From dfcc9f5693c44fcc52a9b0b261ae4dce69bbdb8c Mon Sep 17 00:00:00 2001 From: 6c <420680616@qq.com> Date: 星期五, 19 九月 2025 10:50:12 +0800 Subject: [PATCH] 请求历史特殊处理-若是多次维修导致报表库数据重复,那么按照主键取最新数据 --- product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 51 insertions(+), 2 deletions(-) diff --git a/product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java b/product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java index f6f9462..58a3f4e 100644 --- a/product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java +++ b/product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java @@ -9,6 +9,8 @@ import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.product.common.utils.spring.SpringUtils; import com.product.core.config.CoreConst; @@ -41,7 +43,6 @@ import java.sql.CallableStatement; import java.sql.Connection; import java.sql.SQLException; -import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.*; import java.util.stream.Collectors; @@ -157,7 +158,7 @@ if (FieldSetEntity.isEmpty(reportDbConfig)) { throw new BaseException(ErrorCode.REPORT_DB_CONFIG_FAIL); } - DataTableEntity dt = getBaseDao().listTable(CmnConst.PRODUCT_SYS_DATA_COLLECT, "upper(source_table) in ('T_WIP_TRACKING','T_WIP_PRODUCT_KEYP','T_WIP_DETAIL','T_PM_PRODUCT_SN') and data_source in (select uuid from product_sys_data_sync_manager)", new Object[]{}, new Object[]{"uuid,id,data_source,source_table"}); + DataTableEntity dt = getBaseDao().listTable(CmnConst.PRODUCT_SYS_DATA_COLLECT, "upper(source_table) in ('T_WIP_TRACKING','T_WIP_PRODUCT_KEYP','T_WIP_DETAIL','T_PM_PRODUCT_SN') and data_source in (select uuid from product_sys_data_sync_manager) and id not like 'ch-zs%'", new Object[]{}, new Object[]{"uuid,id,data_source,source_table"}); Map<String, List<FieldSetEntity>> groupByCollectId = dt.getData().stream().collect(Collectors.groupingBy(item -> item.getString("id"))); Map<String, List<FieldSetEntity>> groupBySourceTable = dt.getData().stream().collect(Collectors.groupingBy(item -> item.getString("source_table"))); @@ -178,6 +179,22 @@ // Set<String> productSnTableSet = QuerySqlParseUtil.getAllTableName(reportDao, reportDbName, "da_t_pm_product_sn"); // HistoryEntity productSnData = historyBeforeDispose(getData(reportDao, productSnTableSet, "product_sn", serialNumber, new ErrorCode[]{ErrorCode.PRODUCT_SN_TABLE_NOT_EXISTS, ErrorCode.PRODUCT_SN_DATA_NOT_FOUND}), CmnConst.T_PM_PRODUCT_SN); + // 璇锋眰鍘嗗彶杩斿洖鏁版嵁鏃ュ織鎵撳嵃 + List<HistoryEntity> historyEntityList = Lists.newArrayList(trackingData, keypData, detailData); + historyEntityList.forEach(historyEntity -> { + String primaryField = historyEntity.getPrimaryField();; + SpringMVCContextHolder.getSystemLogger().info(String.format("銆愬綋鍓嶈〃锛�%s銆�", historyEntity.getTableName())); + SpringMVCContextHolder.getSystemLogger().info("銆愪富搴撴暟鎹��"); + for (int i = 0; i < historyEntity.getMasterDataTable().getRows(); i++) { + FieldSetEntity tempFse = historyEntity.getMasterDataTable().getFieldSetEntity(i); + SpringMVCContextHolder.getSystemLogger().info(String.format("%s", tempFse.getString(primaryField))); + } + SpringMVCContextHolder.getSystemLogger().info("銆愬瓙搴撴暟鎹��"); + for (int i = 0; i < historyEntity.getSubDataTable().getRows(); i++) { + FieldSetEntity tempFse = historyEntity.getSubDataTable().getFieldSetEntity(i); + SpringMVCContextHolder.getSystemLogger().info(String.format("%s", tempFse.getString(primaryField))); + } + }); //涓诲簱鏁版嵁婧愰厤缃� String masterDataSource = fs.getString("data_source"); @@ -384,6 +401,10 @@ } } } + + // 鑻ユ槸瀛樺湪涓婚敭鐩稿悓锛屼絾鏄瓨鍌ㄤ簬涓嶅悓鍒嗚〃涓殑鏁版嵁锛岄偅涔堟牴鎹富閿垎缁勬彁鍙栨椂闂磋緝鏂扮殑鏁版嵁 + dt = getNewTimeDt(dt, historyEntity); + if (CmnConst.T_WIP_TRACKING.equalsIgnoreCase(targetTableName) && dt.getRows() > 1) { List<FieldSetEntity> data = dt.getData(); FieldSetEntity newData = null; @@ -442,6 +463,34 @@ return historyEntity; } + /** + * 鑻ユ槸瀛樺湪涓婚敭鐩稿悓锛屼絾鏄瓨鍌ㄤ簬涓嶅悓鍒嗚〃涓殑鏁版嵁锛岄偅涔堟牴鎹富閿垎缁勬彁鍙栨椂闂磋緝鏂扮殑鏁版嵁 + * @param dte + * @return + */ + private DataTableEntity getNewTimeDt(DataTableEntity dte, HistoryEntity historyEntity) { + String primaryField = historyEntity.getPrimaryField();; + String timeField = historyEntity.getTimeField(); + DataTableEntity newDte = new DataTableEntity(); + Map<Long, FieldSetEntity> fseMap = Maps.newHashMap(); + for (int i = 0; i < dte.getRows(); i++) { + FieldSetEntity fse = dte.getFieldSetEntity(i); + long curPrimaryValue = fse.getLong(primaryField); + FieldSetEntity preFse = fseMap.get(curPrimaryValue); + if (FieldSetEntity.isEmpty(preFse)) { + fseMap.put(curPrimaryValue, fse); + } else { + Date curDate = fse.getDate(timeField); + Date preDate = preFse.getDate(timeField); + if (curDate.compareTo(preDate) > 0) { + fseMap.put(curPrimaryValue, fse); + } + } + } + fseMap.values().forEach(newDte::addFieldSetEntity); + return newDte; + } + public DataTableEntity getData(Dao dao, Set<String> tableSet, String filterFieldName, String serialNumber, ErrorCode[] errorCodes) throws InterruptedException, ExecutionException { if (CollectionUtil.isEmpty(tableSet)) { -- Gitblit v1.9.2