From 7b5ab4f33889e02bd97ce0994b29b1dd0ed68009 Mon Sep 17 00:00:00 2001 From: 6c <420680616@qq.com> Date: 星期一, 22 九月 2025 15:48:43 +0800 Subject: [PATCH] 请求历史特殊处理-若是多次维修导致报表库数据重复,那么按照主键取最新数据 --- product-server-data-center/src/main/java/com/product/data/center/service/SpDealService.java | 46 +++++++++++++++++++++++++++++++++++++++------- 1 files changed, 39 insertions(+), 7 deletions(-) diff --git a/product-server-data-center/src/main/java/com/product/data/center/service/SpDealService.java b/product-server-data-center/src/main/java/com/product/data/center/service/SpDealService.java index 3857fe2..948c09f 100644 --- a/product-server-data-center/src/main/java/com/product/data/center/service/SpDealService.java +++ b/product-server-data-center/src/main/java/com/product/data/center/service/SpDealService.java @@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; @@ -172,12 +173,13 @@ // 妫�鏌ユ槸鍚︽墍鏈夎〃閮藉瓨鍦紝鑻ユ槸涓嶅瓨鍦紝閭d箞鍒涘缓 checkTableIfNoThenCreate(monthMap.keySet(), reportTableNamePrefix, createTableService); - String querySql = joinReportDbQuerySql(monthMap, reportTableNamePrefix, sourceInfo); + String querySql = joinReportDbQuerySql(monthMap, reportTableNamePrefix, sourceInfo, singleSubDbTableInfoObj.getString("auto_field")); DataTableEntity reportDbExistsDte = reportDbe.getDao().getList(querySql); for (int i = 0; i < reportDbExistsDte.getRows(); i++) { FieldSetEntity reportDbExistsFse = reportDbExistsDte.getFieldSetEntity(i); for (Map<String, FieldSetEntity> singleMonthMap : monthMap.values()) { - singleMonthMap.remove(reportDbExistsFse.getString("pre_master_key")); + singleMonthMap.remove(formatNumberString(reportDbExistsFse.getString("pre_master_key"))); + singleMonthMap.remove(formatNumberString(reportDbExistsFse.getString(singleSubDbTableInfoObj.getString("auto_field")))); } } for (Map.Entry<String, Map<String, FieldSetEntity>> entry : monthMap.entrySet()) { @@ -206,6 +208,30 @@ stop(subDbe, reportDbe); SpringMVCContextHolder.getSystemLogger().info("[璇锋眰鍘嗗彶鐗规畩澶勭悊-缁撴潫]"); } + } + } + + /** + * 鍒ゆ柇瀛楃涓叉槸鍚︿负鏁板瓧锛堟暣鏁版垨灏忔暟锛夛紝濡傛灉鏄紝鍒欏幓鎺夋湯灏惧浣欑殑0锛堝彲鑳藉悓鏃跺幓鎺夊皬鏁扮偣锛� + * @param str 杈撳叆瀛楃涓� + * @return 鏍煎紡鍖栧悗鐨勫瓧绗︿覆锛屽鏋滀笉鏄暟瀛楀垯杩斿洖鍘熷瓧绗︿覆 + */ + private String formatNumberString(String str) { + if (str == null) { + return null; + } + + try { + // 浣跨敤 BigDecimal 瑙f瀽锛屽畠鑳藉鐞嗘暣鏁般�佸皬鏁般�佺瀛﹁鏁版硶绛� + BigDecimal bd = new BigDecimal(str); + // 鍘绘帀鏈熬鐨勯浂 + bd = bd.stripTrailingZeros(); + + // 杞崲涓哄瓧绗︿覆锛堜娇鐢� toPlainString 閬垮厤绉戝璁℃暟娉曪級 + return bd.toPlainString(); + } catch (NumberFormatException e) { + // 濡傛灉涓嶆槸鏈夋晥鏁板瓧锛岃繑鍥炲師瀛楃涓� + return str; } } @@ -357,18 +383,24 @@ * @param monthMap 鏈堜唤map * @param reportTableNamePrefix 鎶ヨ〃搴撹〃鍚嶅墠缂� * @param sourceInfo 閲囬泦琛╥d - * @return 鎶ヨ〃搴撴煡璇㈣鍙� + * @param primaryKeyField 涓婚敭瀛楁 + * @return 鎶ヨ〃搴撴煡璇㈣鍙� */ - private String joinReportDbQuerySql(Map<String, Map<String, FieldSetEntity>> monthMap, String reportTableNamePrefix, String sourceInfo) { + private String joinReportDbQuerySql(Map<String, Map<String, FieldSetEntity>> monthMap, String reportTableNamePrefix, String sourceInfo, String primaryKeyField) { StringBuilder sql = new StringBuilder(128); - String model = "SELECT * FROM %s_%s WHERE source_info='%s' AND %s"; + String model1 = "SELECT * FROM %s_%s WHERE source_info='%s' AND %s\n"; + String model2 = "SELECT * FROM %s_%s WHERE %s\n"; for (Map.Entry<String, Map<String, FieldSetEntity>> entry : monthMap.entrySet()) { String month = entry.getKey(); Set<String> masterKeySet = entry.getValue().keySet(); if (sql.length() > 0) { - sql.append("\nUNION ALL\n"); + sql.append("UNION ALL\n"); } - sql.append(String.format(model, reportTableNamePrefix, month, sourceInfo, BaseUtil.buildQuestionMarkFilter("pre_master_key", masterKeySet.toArray(), true))); + String checkPreMasterKeyPart = BaseUtil.buildQuestionMarkFilter("pre_master_key", masterKeySet.toArray(), true); + String checkPrimaryKeyPart = BaseUtil.buildQuestionMarkFilter(primaryKeyField, masterKeySet.toArray(), true); + sql.append(String.format(model1, reportTableNamePrefix, month, sourceInfo, checkPreMasterKeyPart)); + sql.append("UNION ALL\n"); + sql.append(String.format(model2, reportTableNamePrefix, month, checkPrimaryKeyPart)); } return sql.toString(); } -- Gitblit v1.9.2