From 7c2f69ddcc1a35a314768bae203b7bd5df875429 Mon Sep 17 00:00:00 2001
From: 6c <420680616@qq.com>
Date: 星期四, 18 九月 2025 10:29:31 +0800
Subject: [PATCH] 请求历史特殊处理-若是多次维修导致报表库数据重复,那么按照主键取最新数据

---
 product-server-data-center/src/main/java/com/product/data/center/service/MesExternalService.java |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 51 insertions(+), 0 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 f42e2fc..7aaee55 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;
@@ -177,6 +179,23 @@
 //		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();;
+            String timeField = historyEntity.getTimeField();
+            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 %s %s", tempFse.getString(primaryField), tempFse.getDate(timeField, "yyyy-MM-dd HH:mm:ss"), BaseUtil.fieldSetEntityToJson(tempFse)));
+            }
+            SpringMVCContextHolder.getSystemLogger().info("銆愬瓙搴撴暟鎹��");
+            for (int i = 0; i < historyEntity.getSubDataTable().getRows(); i++) {
+                FieldSetEntity tempFse = historyEntity.getSubDataTable().getFieldSetEntity(i);
+                SpringMVCContextHolder.getSystemLogger().info(String.format("%s %s %s", tempFse.getString(primaryField), tempFse.getDate(timeField, "yyyy-MM-dd HH:mm:ss"), BaseUtil.fieldSetEntityToJson(tempFse)));
+            }
+        });
 
         //涓诲簱鏁版嵁婧愰厤缃�
         String masterDataSource = fs.getString("data_source");
@@ -383,6 +402,10 @@
                 }
             }
         }
+
+        // 鑻ユ槸瀛樺湪涓婚敭鐩稿悓锛屼絾鏄瓨鍌ㄤ簬涓嶅悓鍒嗚〃涓殑鏁版嵁锛岄偅涔堟牴鎹富閿垎缁勬彁鍙栨椂闂磋緝鏂扮殑鏁版嵁
+        dt = getNewTimeDt(dt, historyEntity);
+
         if (CmnConst.T_WIP_TRACKING.equalsIgnoreCase(targetTableName) && dt.getRows() > 1) {
             List<FieldSetEntity> data = dt.getData();
             FieldSetEntity newData = null;
@@ -441,6 +464,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