From d35aed30c9b5920065774eeaaeefafcc05c49761 Mon Sep 17 00:00:00 2001
From: xyc <jc_xiong@hotmail.com>
Date: 星期二, 01 九月 2026 17:32:14 +0800
Subject: [PATCH] docs: 关机快照补充——发布后又拉取到同事 2 个新提交(fbc1c15/91d7eee),已发布版本落后 HEAD

---
 traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java |   18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
index 9415269..945a762 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
@@ -3221,11 +3221,11 @@
     }
 
     /** 琛�1 椤圭洰琛屽~鍏咃紙妯℃澘琛�/鎻掑叆琛屽叡鐢紱cityText 涓庢ā鏉� B 鍒楁牸寮忎竴鑷达級 */
-    private void fillInvestPlanProjectRow(HSSFRow row, InvestmentProject p, InvestmentMonthly m, int seq, String cityText) {
+    private void fillInvestPlanProjectRow(HSSFRow row, InvestmentProject p, InvestmentMonthly m, int seq, String cityText, String displayName) {
         hssfNum(row, 0, (double) seq);
         hssfText(row, 1, cityText);
         hssfText(row, 2, valueOf(p.getCounty()));
-        hssfText(row, 3, p.getProjectName());
+        hssfText(row, 3, displayName != null && !displayName.trim().isEmpty() ? displayName.trim() : p.getProjectName());
         hssfText(row, 4, valueOf(p.getConstructNature()));
         hssfNum(row, 5, parseYearNum(p.getStartTime()));
         hssfNum(row, 6, parseYearNum(p.getEndTime()));
@@ -3332,6 +3332,7 @@
         // 鍘熶綅閫愯鏇挎崲锛氬悎璁�/鍧楁爣棰�/甯傚窞灏忚妭/鍒嗙粍/椤圭洰琛岋紱鏈尮閰嶇殑妯℃澘琛屾竻绌烘牱渚嬫暟鎹紙缁撴瀯/鍚堝苟/鍒楀涓嶅彉锛�
         int seq = 0;
         int si = -1;
+        java.util.Set<Long> usedProjectIds = new HashSet<>();
         for (int r = 5; r <= lastRow; r++) {
             HSSFRow row = sheet.getRow(r);
             if (row == null) continue;
@@ -3391,11 +3392,12 @@
             // 椤圭洰琛岋細鎸� 妯℃澘鍚嶇О+甯傚窞+鍧楃被鍒� 鍖归厤 DB 椤圭洰锛屾湭鍖归厤鏁磋娓呯┖
             blankInvestRow(row, 25);
             if (blockCategory == null) continue; // 鑰佹棫璐ц溅娈垫棤鏁版嵁婧�
-            InvestmentProject p = matchInvest(projects, d, b, blockCategory);
+            InvestmentProject p = matchInvest(projects, d, b, blockCategory, usedProjectIds);
             if (p == null) continue;
+            usedProjectIds.add(p.getId());
             if (sec != null) sec.matched.add(p.getId());
             InvestmentMonthly m = mByProject.get(p.getId());
-            fillInvestPlanProjectRow(row, p, m, ++seq, b);
+            fillInvestPlanProjectRow(row, p, m, ++seq, b, d);
         }
         // 鍔ㄦ�佹彃琛岋細DB 椤圭洰鏁� > 妯℃澘棰勭暀琛屾暟鏃讹紝鍦ㄥ競宸炲皬鑺傛湯灏捐ˉ榻愶紙鑷簳鍚戜笂鎻掕锛岄伩鍏嶈鍙烽敊浣嶏級
         for (int i = sections.size() - 1; i >= 0; i--) {
@@ -3415,7 +3417,7 @@
                 HSSFRow row = sheet.getRow(first + j);
                 if (row == null) continue;
                 InvestmentProject p = extra.get(j);
-                fillInvestPlanProjectRow(row, p, mByProject.get(p.getId()), 0, p.getCity());
+                fillInvestPlanProjectRow(row, p, mByProject.get(p.getId()), 0, p.getCity(), p.getProjectName());
             }
         }
         renumberInvestSeq(sheet, "investPlan");
@@ -3725,6 +3727,11 @@
 
     /** 鍦ㄥ�欓�夐」鐩睜涓寜鍚嶇О鍖归厤 DB 椤圭洰锛堝彲閫� 甯傚窞/绫诲埆 杩囨护 + 鍘垮尯鍓嶇紑娑堟锛夛紝鏈懡涓繑鍥� null */
     private InvestmentProject matchInvest(List<InvestmentProject> pool, String name, String cityFull, String category) {
+        return matchInvest(pool, name, cityFull, category, null);
+    }
+
+    /** 甯﹀凡鍗犵敤鎺掗櫎鐨勫尮閰嶏細鍚屼竴 DB 椤圭洰鍙厑璁稿~鍏呬竴琛岋紙閬垮厤妯℃澘涓�鏈�/浜屾湡鍚屽悕琛岄噸澶嶈緭鍑猴級 */
+    private InvestmentProject matchInvest(List<InvestmentProject> pool, String name, String cityFull, String category, Set<Long> excludeIds) {
         if (name == null || name.trim().isEmpty()) return null;
         String norm = normInvestName(name);
         if (norm.isEmpty()) return null;
@@ -3732,6 +3739,7 @@
         String county = extractInvestCounty(name);
         List<InvestmentProject> cands = new java.util.ArrayList<>();
         for (InvestmentProject p : pool) {
+            if (excludeIds != null && excludeIds.contains(p.getId())) continue;
             if (category != null && !category.equals(p.getCategory())) continue;
             if (cityCanon != null && !cityCanon.equals(RegionUtil.normalizeCityName(p.getCity()))) continue;
             cands.add(p);

--
Gitblit v1.9.1