From fc00eb79fce982425f9a83d63894a51549ed758a Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期一, 12 十月 2026 17:11:58 +0800
Subject: [PATCH] fix(汇总大表): 扩列表头行改按基准月份列判定并清理9月母版被写入日期的13格(待验收)

---
 HANDOFF.md                                                                                         |    8 ++++++++
 docs/生成汇总大表/2026年9月道路运输量汇总表.xlsx                                                                   |    0 
 traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java |   43 ++++++++++++++++++++++++++++++++++---------
 3 files changed, 42 insertions(+), 9 deletions(-)

diff --git a/HANDOFF.md b/HANDOFF.md
index 4b07b2c..4149825 100644
--- a/HANDOFF.md
+++ b/HANDOFF.md
@@ -4,6 +4,14 @@
 > **姣忓ぉ缁撴潫鏃�**锛氭妸褰撳ぉ杩涘睍銆佽俯杩囩殑鍧戙�佹柊闇�姹傘�佹湭瀹屾垚浜嬮」鏇存柊鍒版湰鏂囦欢锛岀劧鍚庡彲浠ユ斁蹇冨紑鏂板璇濄��
 > **鍗忎綔绾﹀畾锛�2026-08-31锛�**锛氳銆屾彁浜ゃ��= 鏈湴 commit + 鎺ㄩ�佸埌杩滅 git锛坥rigin main锛孏itblit锛夛紝涓嶅啀鍙仛鏈湴 commit銆�
 
+### 10-12锛�11锛夛細鎵╁垪琛ㄥご琛屼簩娆′慨姝� + 9 鏈堟瘝鐗堣鎵╁垪鍐欐垚鏃ユ湡鐨� 13 鏍兼竻鐞嗐�愬緟楠屾敹銆�
+
+- **鐜拌薄锛堢敤鎴锋姤鍛婏級**锛氱敓鎴愯〃閲�"寰堝鏁版嵁鏄� 8 鏈堢殑"銆傛帓鏌ュ彂鐜� **9 鏈堟瘝鐗堥噷鏈� 13 涓暟鎹牸琚啓鎴愪簡 9 鏈堟湀浠芥棩鏈熷簭鍒� `46266`锛�= 2026-09-01锛�**锛歚 璐ц繍!S11/T11`銆乣鐝嚎鍖呰溅!S9/T9`銆乣鍏氦!S8/T8`銆乣鍑虹!S6/T6`銆乣涓彛寰勬槑缁�!S5/T5`锛涗笅娓哥紦瀛樿甯﹀亸锛坄鐝嚎鍖呰溅!S5`銆乣涓彛寰勬槑缁�!S99/S100/S104/S105` 绛変篃鏄� 46266锛夈��
+- **鏍瑰洜**锛氭墿鍒楀櫒 `headerRowsOf` 棣栫増鍙姹�"鏁磋 鈮�2 涓湀浠芥牸"锛岃�屽嚭绉熺 6 琛屻�佺彮绾垮寘杞︾ 3 琛岃繖绫�**鏁版嵁琛�**閲屾伆濂芥湁 2 涓儚鏃ユ湡搴忓垪鐨勬暟鍊� 鈫� 琚鍒ゆ垚琛ㄥご琛� 鈫� 鎵╁垪鏃舵妸"鏈堜唤鏃ユ湡"鍐欒繘浜嗘暟鎹锛坄cloneHeaderCell` 瀵规暟鍊兼牸鍐� `targetMonth` 鐨勬棩鏈燂級銆�
+- **淇硶**锛氭敼涓�**鍏堝彇"鏈堜唤琛ㄥご鏍兼渶澶氱殑閭d竴琛�"浣滃熀鍑嗭紝鎶婂畠鐨勬湀浠藉垪褰撴爣鍑嗗垪**锛涘彧鏈夎繖浜涘垪涓婂ぇ鍗婃槸鏈堜唤鏍肩殑琛屾墠绠楄〃澶磋銆傝建閬撱�佽疆娓′竴椤典袱涓潡鐨� `[1,10]` 淇濇寔 鉁擄紱` 璐ц繍/鍏氦/缃戠害杞�/涓彛寰勬槑缁哷 浠嶄负鍗曡琛ㄥご 鉁撱��
+- **姣嶇増淇锛堢敤 Excel COM锛屾湭鏁存湰閲嶅啓锛�**锛�13 鏍兼寜鎵╁垪瑙勫垯绮句慨锛堣鐣欑┖鐨勬竻绌恒�佸叕寮忔寜瑙勫垯琛ュ洖 `=S12+S13` / `=S11/AN11-1` / `=S10+S14+鈥锛�+ `CalculateFull` 鏁存湰閲嶇畻鍒锋柊缂撳瓨锛涗慨澶嶅墠澶囦唤 `_bak_2026骞�9鏈堟瘝鐗坃娓呯悊鑴忔牸鍓峗20261012.xlsx`銆備慨澶嶅悗鍏ㄧ翱鍙墿 3 涓� `46266` 鐨�**鍚堟硶琛ㄥご鏈堜唤鏍�**锛堝煄甯傚杩� S2銆佸叕浜� S3銆佸嚭绉� S3锛夈��
+- **楠岃瘉**锛氶噸璺� 2026-08鈫�9 鏈堟墿鍒楋紙鏃ュ織琛ㄥご琛� ` 璐ц繍[2] 鐝嚎鍖呰溅[1] 鍩庡競瀹㈣繍[1] 鍏氦[2] 鍑虹[2] 缃戠害杞2] 杞ㄩ亾銆佽疆娓1,10] 涓彛寰勬槑缁哰2]`锛夛紝鏂版帹浠跺湪杩� 13 鏍间笂鍏ㄩ儴姝g‘锛涢噸璺� 2026-09 鐢熸垚锛屼骇鐗� `docs\鐢熸垚姹囨�诲ぇ琛╘杈撳嚭\鐢熸垚_閬撹矾杩愯緭閲忔眹鎬昏〃_2026-09.xlsx` 涓� 13 鏍兼仮澶嶄负鐪熷疄 9 鏈堝�硷紙`鐝嚎鍖呰溅!S9=20647.5363`銆乣鍏氦!S8=61618.09`銆乣鍑虹!S6=32787.72`锛夛紝**鏃� 46266 娈嬬暀**銆�
+- **鎶ュ憡锛堟湰鍦般�佷笉鍏ュ簱锛�**锛歚docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_鎵╁垪琛ㄥご琛屽熀鍑嗗垪淇涓庢瘝鐗堣剰鏍兼竻鐞哶2026-10-12.md`銆傜姸鎬侊細**銆愬緟楠屾敹銆�**銆�
 ### 10-12锛�3锛夛細淇��9 鏈堜骇鐗╀涪 8 鏈堝垪 / 绱婕忔湀銆嶁�斺�旀墿鍒楁敼涓�**浠ュ綋鏈熶骇鐗╀负搴�**銆愬緟楠屾敹銆�
 
 - **鐜拌薄锛堢敤鎴锋姤鍛婏級**锛氱敓鎴愮殑 9 鏈堟眹鎬诲ぇ琛ㄩ噷 **8 鏈堝垪鍏ㄧ┖**锛岀疮璁℃紡鎺� 8 鏈堬紙瑙勪笂璐ц繍閲忕疮璁℃樉绀� 31309.58锛屾纭簲涓� 1-7鏈� 27734.46 + 8鏈� 3665.36 + 9鏈� 3575.12 = **34974.95**锛夈��
diff --git "a/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2649\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx" "b/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2649\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
index 287aa1d..dac7381 100644
--- "a/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2649\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
+++ "b/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/2026\345\271\2649\346\234\210\351\201\223\350\267\257\350\277\220\350\276\223\351\207\217\346\261\207\346\200\273\350\241\250.xlsx"
Binary files differ
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java
index 6d3b317..c9cd5a4 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/layout/SummaryLayoutExpander.java
@@ -264,23 +264,48 @@
         return insertCol;
     }
 
-    /** 琛ㄥご琛岋紙0 鍩猴級锛氬惈銆屽勾+鏈堛�嶈〃澶村崟鍏冩牸鐨勮锛涜建閬撱�佽疆娓℃湁涓や釜鍧� 鈫� 涓よ銆� */
+    /**
+     * 琛ㄥご琛岋紙0 鍩猴級锛氳建閬撱�佽疆娓¤繖绫讳竴椤典袱涓潡鐨勬湁涓よ銆�
+     *
+     * <p>2026-10-12 浜屾淇锛氬厛鍙栥�屾湀浠借〃澶存牸鏈�澶氱殑閭d竴琛屻�嶄綔鍩哄噯锛屾妸瀹冪殑鏈堜唤鍒楀綋浣滄爣鍑嗗垪锛�
+     * 鍙湁杩欎簺鍒椾笂澶у崐鏄湀浠芥牸鐨勮鎵嶇畻琛ㄥご琛屻�傚墠鐗堝彧瑕佹眰銆屾暣琛� 鈮�2 涓湀浠芥牸銆嶏紝
+     * 浼氭妸鏁版嵁琛岄噷鎭板ソ钀芥垚鏃ユ湡搴忓垪鐨勬暟鍊煎綋鎴愯〃澶� 鈫� 鎵╁垪鏃舵妸鏈堜唤鏃ユ湡鍐欒繘鏁版嵁琛�
+     * 锛�2026-09 姣嶇増 ` 璐ц繍!S11`銆乣鍑虹!S6` 绛� 13 鏍艰鍐欐垚 46266锛夈��
+     */
     private List<Integer> headerRowsOf(Sheet sh) {
-        List<Integer> rows = new ArrayList<>();
-        int lastRow = Math.min(sh.getLastRowNum(), sh.getFirstRowNum() + HEADER_SCAN_ROWS);
-        for (int r = sh.getFirstRowNum(); r <= lastRow; r++) {
+        int first = sh.getFirstRowNum();
+        int lastRow = Math.min(sh.getLastRowNum(), first + HEADER_SCAN_ROWS);
+        List<Integer> base = new ArrayList<>();
+        for (int r = first; r <= lastRow; r++) {
             Row row = sh.getRow(r);
             if (row == null) continue;
-            for (int c = row.getFirstCellNum(); c >= 0 && c < row.getLastCellNum(); c++) {
-                if (yearMonthOf(row.getCell(c)) != null) {
-                    rows.add(r);
-                    break;
-                }
+            List<Integer> cols = monthColsOf(row);
+            if (cols.size() > base.size()) base = cols;
+        }
+        List<Integer> rows = new ArrayList<>();
+        if (base.size() < 2) return rows;
+        int need = Math.max(2, (base.size() + 1) / 2);
+        for (int r = first; r <= lastRow; r++) {
+            Row row = sh.getRow(r);
+            if (row == null) continue;
+            int hit = 0;
+            for (int c : base) {
+                if (yearMonthOf(row.getCell(c)) != null) hit++;
             }
+            if (hit >= need) rows.add(r);
         }
         return rows;
     }
 
+    /** 琛屽唴鎵�鏈夈�屽勾+鏈堛�嶈〃澶存牸鐨勫垪鍙凤紙0 鍩猴級 */
+    private List<Integer> monthColsOf(Row row) {
+        List<Integer> cols = new ArrayList<>();
+        for (int c = row.getFirstCellNum(); c >= 0 && c < row.getLastCellNum(); c++) {
+            if (yearMonthOf(row.getCell(c)) != null) cols.add(c);
+        }
+        return cols;
+    }
+
     private Map<Integer, Integer> monthCols(Sheet sh, int year) {
         Map<Integer, Integer> cols = new LinkedHashMap<>();
         int lastRow = Math.min(sh.getLastRowNum(), sh.getFirstRowNum() + HEADER_SCAN_ROWS);

--
Gitblit v1.9.1