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