From 3e4bd07a16a007abf09dfa996a3e71ce34c35745 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Wed, 27 Aug 2025 13:14:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E6=95=B0=E6=8D=AE=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/base/entity/ReportFamilyList.java | 12 ++- .../service/Impl/DataSourceServiceImpl.java | 100 ++++++++++++++---- .../Impl/LabelDataProcessorServiceImpl.java | 44 ++++++-- src/main/resources/mapper/base/BaseMapper.xml | 4 +- 4 files changed, 119 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/gaotao/modules/base/entity/ReportFamilyList.java b/src/main/java/com/gaotao/modules/base/entity/ReportFamilyList.java index 7f425e4..f233ab2 100644 --- a/src/main/java/com/gaotao/modules/base/entity/ReportFamilyList.java +++ b/src/main/java/com/gaotao/modules/base/entity/ReportFamilyList.java @@ -11,12 +11,14 @@ import java.io.Serializable; @Data @TableName("report_family_list") public class ReportFamilyList implements Serializable { - + private String name; // 标签类型 - + private String site; // 工厂 - + private String viewSql; // 视图名称 - + + private String ifsViewSql; // IFS视图名称 + // 其他字段根据实际表结构添加 -} \ No newline at end of file +} diff --git a/src/main/java/com/gaotao/modules/base/service/Impl/DataSourceServiceImpl.java b/src/main/java/com/gaotao/modules/base/service/Impl/DataSourceServiceImpl.java index 17bb13b..133595d 100644 --- a/src/main/java/com/gaotao/modules/base/service/Impl/DataSourceServiceImpl.java +++ b/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.DataSourceService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import java.util.*; +@Slf4j @Service public class DataSourceServiceImpl implements DataSourceService { @@ -20,33 +22,67 @@ public class DataSourceServiceImpl implements DataSourceService { public List> getViewFieldsByLabelType(String labelType, String site) { List> fields = new ArrayList<>(); try { - // 根据标签类型获取对应的视图名称 - String viewName = getViewNameByLabelType(labelType); - if (viewName != null) { - // 查询视图的字段信息 - String sql = "SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE " + - "FROM INFORMATION_SCHEMA.COLUMNS " + - "WHERE TABLE_NAME = ? " + - "ORDER BY ORDINAL_POSITION"; - - List> columns = jdbcTemplate.queryForList(sql, viewName); - - for (Map column : columns) { - Map field = new HashMap<>(); - field.put("fieldName", column.get("COLUMN_NAME")); - field.put("fieldType", column.get("DATA_TYPE")); - field.put("isRequired", "NO".equals(column.get("IS_NULLABLE"))); - field.put("fieldDescription", ""); // 初始为空,后续可以从配置表获取 - fields.add(field); + // 根据标签类型获取对应的视图信息 + Map viewInfo = getViewInfoByLabelType(labelType); + String mainViewName = viewInfo.get("viewSql"); + String ifsViewName = viewInfo.get("ifsViewSql"); + + // 查询主视图的字段信息 + if (mainViewName != null && !mainViewName.trim().isEmpty()) { + List> mainViewFields = getViewFields(mainViewName, "主视图"); + fields.addAll(mainViewFields); + } + + // 查询IFS视图的字段信息,自动添加_ifs后缀 + if (ifsViewName != null && !ifsViewName.trim().isEmpty()) { + List> ifsViewFields = getViewFields(ifsViewName, "IFS视图"); + // 给所有IFS视图字段添加_ifs后缀 + for (Map field : ifsViewFields) { + String originalFieldName = field.get("fieldName").toString(); + field.put("fieldName", originalFieldName + "_ifs"); } - } else { - // 如果没有找到对应的视图,使用模拟数据 + 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> getViewFields(String viewName, String viewSource) { + List> fields = new ArrayList<>(); + try { + String sql = "SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE " + + "FROM INFORMATION_SCHEMA.COLUMNS " + + "WHERE TABLE_NAME = ? " + + "ORDER BY ORDINAL_POSITION"; + + List> columns = jdbcTemplate.queryForList(sql, viewName); + + for (Map column : columns) { + Map field = new HashMap<>(); + field.put("fieldName", column.get("COLUMN_NAME")); + field.put("fieldType", column.get("DATA_TYPE")); + field.put("isRequired", "NO".equals(column.get("IS_NULLABLE"))); + field.put("fieldDescription", ""); // 初始为空,后续可以从配置表获取 + field.put("viewSource", viewSource); // 标识字段来源 + fields.add(field); + } + } catch (Exception e) { + log.error("获取视图字段失败: viewName={}, viewSource={}, error={}", viewName, viewSource, e.getMessage()); } return fields; } @@ -99,9 +135,27 @@ public class DataSourceServiceImpl implements DataSourceService { } } - private String getViewNameByLabelType(String labelType) { - List> viewMapping = baseService.getLabelTypeList(null,labelType); - return viewMapping.isEmpty()?null:(viewMapping.getFirst().get("viewSql")!=null?viewMapping.getFirst().get("viewSql").toString():null); + private Map getViewInfoByLabelType(String labelType) { + Map viewInfo = new HashMap<>(); + List> viewMapping = baseService.getLabelTypeList(null, labelType); + + if (!viewMapping.isEmpty()) { + java.util.Map 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> fields) { diff --git a/src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java b/src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java index c67210d..3a29fee 100644 --- a/src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java +++ b/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.format.DateTimeFormatter; 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.Pattern; import java.util.stream.Collectors; @@ -1243,16 +1239,42 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService } String viewSql = familyInfo.getViewSql(); - log.info("获取到视图SQL名称: {}", viewSql); + String ifsViewSql = familyInfo.getIfsViewSql(); + log.info("获取到主视图SQL名称: {}", viewSql); + log.info("获取到IFS视图SQL名称: {}", ifsViewSql); // 3. 执行视图查询获取真实数据 - java.util.Map realDataMap = baseService.getViewData(viewSql, reportId); - if (realDataMap == null || realDataMap.isEmpty()) { - log.warn("视图查询未返回数据,使用空数据映射"); - realDataMap = new java.util.HashMap<>(); + java.util.Map realDataMap = new java.util.HashMap<>(); + + // 3.1 查询主视图数据 + java.util.Map 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 ifsViewData = baseService.getViewData(ifsViewSql, reportId); + if (ifsViewData != null && !ifsViewData.isEmpty()) { + // 给所有IFS字段添加_ifs后缀 + for (Map.Entry 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 return generateZplWithData(elements, realDataMap, labelSetting); diff --git a/src/main/resources/mapper/base/BaseMapper.xml b/src/main/resources/mapper/base/BaseMapper.xml index 7bc5606..dd171ae 100644 --- a/src/main/resources/mapper/base/BaseMapper.xml +++ b/src/main/resources/mapper/base/BaseMapper.xml @@ -455,7 +455,7 @@ - SELECT name, view_sql as viewSql + SELECT name, view_sql as viewSql, ifs_view_sql as ifsViewSql FROM report_family_list WHERE name = #{name}