Browse Source

多数据源

master
han\hanst 6 months ago
parent
commit
3e4bd07a16
  1. 2
      src/main/java/com/gaotao/modules/base/entity/ReportFamilyList.java
  2. 82
      src/main/java/com/gaotao/modules/base/service/Impl/DataSourceServiceImpl.java
  3. 44
      src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java
  4. 4
      src/main/resources/mapper/base/BaseMapper.xml

2
src/main/java/com/gaotao/modules/base/entity/ReportFamilyList.java

@ -18,5 +18,7 @@ public class ReportFamilyList implements Serializable {
private String viewSql; // 视图名称 private String viewSql; // 视图名称
private String ifsViewSql; // IFS视图名称
// 其他字段根据实际表结构添加 // 其他字段根据实际表结构添加
} }

82
src/main/java/com/gaotao/modules/base/service/Impl/DataSourceServiceImpl.java

@ -2,12 +2,14 @@ package com.gaotao.modules.base.service.Impl;
import com.gaotao.modules.base.service.BaseService; import com.gaotao.modules.base.service.BaseService;
import com.gaotao.modules.base.service.DataSourceService; import com.gaotao.modules.base.service.DataSourceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
@Slf4j
@Service @Service
public class DataSourceServiceImpl implements DataSourceService { public class DataSourceServiceImpl implements DataSourceService {
@ -20,10 +22,49 @@ public class DataSourceServiceImpl implements DataSourceService {
public List<Map<String, Object>> getViewFieldsByLabelType(String labelType, String site) { public List<Map<String, Object>> getViewFieldsByLabelType(String labelType, String site) {
List<Map<String, Object>> fields = new ArrayList<>(); List<Map<String, Object>> fields = new ArrayList<>();
try { try {
// 根据标签类型获取对应的视图名称
String viewName = getViewNameByLabelType(labelType);
if (viewName != null) {
// 查询视图的字段信息
// 根据标签类型获取对应的视图信息
Map<String, String> viewInfo = getViewInfoByLabelType(labelType);
String mainViewName = viewInfo.get("viewSql");
String ifsViewName = viewInfo.get("ifsViewSql");
// 查询主视图的字段信息
if (mainViewName != null && !mainViewName.trim().isEmpty()) {
List<Map<String, Object>> mainViewFields = getViewFields(mainViewName, "主视图");
fields.addAll(mainViewFields);
}
// 查询IFS视图的字段信息自动添加_ifs后缀
if (ifsViewName != null && !ifsViewName.trim().isEmpty()) {
List<Map<String, Object>> ifsViewFields = getViewFields(ifsViewName, "IFS视图");
// 给所有IFS视图字段添加_ifs后缀
for (Map<String, Object> field : ifsViewFields) {
String originalFieldName = field.get("fieldName").toString();
field.put("fieldName", originalFieldName + "_ifs");
}
fields.addAll(ifsViewFields);
}
// 如果两个视图都没有找到使用模拟数据
if (fields.isEmpty()) {
fields = getCCLLabel(labelType, site);
}
// 获取已保存的字段描述
loadFieldDescriptions(labelType, site, fields);
} catch (Exception e) {
log.error("获取视图字段失败: labelType={}, error={}", labelType, e.getMessage());
}
return fields;
}
/**
* 获取指定视图的字段信息
*/
private List<Map<String, Object>> getViewFields(String viewName, String viewSource) {
List<Map<String, Object>> fields = new ArrayList<>();
try {
String sql = "SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE " + String sql = "SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE " +
"FROM INFORMATION_SCHEMA.COLUMNS " + "FROM INFORMATION_SCHEMA.COLUMNS " +
"WHERE TABLE_NAME = ? " + "WHERE TABLE_NAME = ? " +
@ -37,16 +78,11 @@ public class DataSourceServiceImpl implements DataSourceService {
field.put("fieldType", column.get("DATA_TYPE")); field.put("fieldType", column.get("DATA_TYPE"));
field.put("isRequired", "NO".equals(column.get("IS_NULLABLE"))); field.put("isRequired", "NO".equals(column.get("IS_NULLABLE")));
field.put("fieldDescription", ""); // 初始为空后续可以从配置表获取 field.put("fieldDescription", ""); // 初始为空后续可以从配置表获取
field.put("viewSource", viewSource); // 标识字段来源
fields.add(field); fields.add(field);
} }
} else {
// 如果没有找到对应的视图使用模拟数据
fields = getCCLLabel(labelType, site);
}
// 获取已保存的字段描述
loadFieldDescriptions(labelType, site, fields);
} catch (Exception e) { } catch (Exception e) {
log.error("获取视图字段失败: viewName={}, viewSource={}, error={}", viewName, viewSource, e.getMessage());
} }
return fields; return fields;
} }
@ -99,9 +135,27 @@ public class DataSourceServiceImpl implements DataSourceService {
} }
} }
private String getViewNameByLabelType(String labelType) {
List<java.util.Map<String, Object>> viewMapping = baseService.getLabelTypeList(null,labelType);
return viewMapping.isEmpty()?null:(viewMapping.getFirst().get("viewSql")!=null?viewMapping.getFirst().get("viewSql").toString():null);
private Map<String, String> getViewInfoByLabelType(String labelType) {
Map<String, String> viewInfo = new HashMap<>();
List<java.util.Map<String, Object>> viewMapping = baseService.getLabelTypeList(null, labelType);
if (!viewMapping.isEmpty()) {
java.util.Map<String, Object> mapping = viewMapping.getFirst();
// 获取主视图SQL
Object viewSql = mapping.get("viewSql");
if (viewSql != null) {
viewInfo.put("viewSql", viewSql.toString());
}
// 获取IFS视图SQL
Object ifsViewSql = mapping.get("ifsViewSql");
if (ifsViewSql != null) {
viewInfo.put("ifsViewSql", ifsViewSql.toString());
}
}
return viewInfo;
} }
private void loadFieldDescriptions(String labelType, String site, List<Map<String, Object>> fields) { private void loadFieldDescriptions(String labelType, String site, List<Map<String, Object>> fields) {

44
src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java

@ -17,11 +17,7 @@ import java.time.LocalDate;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -1243,16 +1239,42 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
} }
String viewSql = familyInfo.getViewSql(); String viewSql = familyInfo.getViewSql();
log.info("获取到视图SQL名称: {}", viewSql);
String ifsViewSql = familyInfo.getIfsViewSql();
log.info("获取到主视图SQL名称: {}", viewSql);
log.info("获取到IFS视图SQL名称: {}", ifsViewSql);
// 3. 执行视图查询获取真实数据 // 3. 执行视图查询获取真实数据
java.util.Map<String, Object> realDataMap = baseService.getViewData(viewSql, reportId);
if (realDataMap == null || realDataMap.isEmpty()) {
log.warn("视图查询未返回数据,使用空数据映射");
realDataMap = new java.util.HashMap<>();
java.util.Map<String, Object> realDataMap = new java.util.HashMap<>();
// 3.1 查询主视图数据
java.util.Map<String, Object> mainViewData = new java.util.HashMap<>();
if (viewSql != null && !viewSql.trim().isEmpty()) {
mainViewData = baseService.getViewData(viewSql, reportId);
if (mainViewData != null && !mainViewData.isEmpty()) {
realDataMap.putAll(mainViewData);
log.info("获取到主视图数据,字段数: {}", mainViewData.size());
}
}
// 3.2 查询IFS视图数据并添加_ifs后缀
if (ifsViewSql != null && !ifsViewSql.trim().isEmpty()) {
java.util.Map<String, Object> ifsViewData = baseService.getViewData(ifsViewSql, reportId);
if (ifsViewData != null && !ifsViewData.isEmpty()) {
// 给所有IFS字段添加_ifs后缀
for (Map.Entry<String, Object> entry : ifsViewData.entrySet()) {
String originalFieldName = entry.getKey();
String ifsFieldName = originalFieldName + "_ifs";
realDataMap.put(ifsFieldName, entry.getValue());
}
log.info("获取到IFS视图数据并添加_ifs后缀,字段数: {}", ifsViewData.size());
}
}
if (realDataMap.isEmpty()) {
log.warn("两个视图查询都未返回数据,使用空数据映射");
} }
log.info("获取到真实数据,字段数: {}", realDataMap.size());
log.info("合并后的真实数据,总字段数: {}", realDataMap.size());
// 4. 使用真实数据生成ZPL // 4. 使用真实数据生成ZPL
return generateZplWithData(elements, realDataMap, labelSetting); return generateZplWithData(elements, realDataMap, labelSetting);

4
src/main/resources/mapper/base/BaseMapper.xml

@ -455,7 +455,7 @@
<!-- 获取标签类型列表 --> <!-- 获取标签类型列表 -->
<select id="getLabelTypeList" resultType="java.util.Map"> <select id="getLabelTypeList" resultType="java.util.Map">
SELECT name as label, name as value,view_sql as viewSql
SELECT name as label, name as value, view_sql as viewSql, ifs_view_sql as ifsViewSql
FROM report_family_list FROM report_family_list
<where> <where>
<if test="labelType != null and labelType != ''"> <if test="labelType != null and labelType != ''">
@ -473,7 +473,7 @@
<!-- 根据ReportFamily获取视图SQL名称 --> <!-- 根据ReportFamily获取视图SQL名称 -->
<select id="getReportFamilyByName" resultType="ReportFamilyList"> <select id="getReportFamilyByName" resultType="ReportFamilyList">
SELECT name, view_sql as viewSql
SELECT name, view_sql as viewSql, ifs_view_sql as ifsViewSql
FROM report_family_list FROM report_family_list
WHERE name = #{name} WHERE name = #{name}
</select> </select>

Loading…
Cancel
Save