fix(货运页): 当月无规上记录不再写 0(缺数留空);回补母版《班线包车》WPS 保存丢失的 2019/2020 块 420 格,并清 2021/2022 历史 0 值 78 格

FreightCalc: 当月分支改用 get(month),无记录返回 null 留空(累计分支不变)。母版: 清 78 格 0(行90/93/108/111 的 2021/2022 块,与手工定稿逐格对齐);XML 精准回补《班线包车》2019/2020 块(含 144 个 #DIV/0!),该页现与 09-27 母版逐格一致;保留用户 WPS 调整的边框与字号。验证:两次生成差异可完整归因,错误值逐页与 09-27 基准一致。
3个文件已修改
22 ■■■■■ 已修改文件
HANDOFF.md 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/生成汇总大表/2026年8月道路运输量汇总表.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
traffic-audit-server/src/main/java/com/trafficaudit/reportexport/calc/FreightCalc.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HANDOFF.md
@@ -4,6 +4,17 @@
> **每天结束时**:把当天进展、踩过的坑、新需求、未完成事项更新到本文件,然后可以放心开新对话。
> **协作约定(2026-08-31)**:说「提交」= æœ¬åœ° commit + æŽ¨é€åˆ°è¿œç«¯ git(origin main,Gitblit),不再只做本地 commit。
## æœ€æ–°ï¼ˆ2026-09-28)
- **用户用 WPS ç¼–辑母版**:改《班线包车》边框、《道路运输周转量》字号,并删除《中口径明细》`AW` åˆ—(手工定稿同删)。已验证生成端正常:中口径明细 2024 åŠæ›´æ—©å—整体左移(跨页/同页公式自动改引用,`#REF!` 2→0)、中口径排名块 J..R â†’ A..I å‡æ­£ç¡®å¸¦å…¥äº§ç‰©ã€‚
- **⚠️ WPS ä¿å­˜çš„连带损坏(待回补)**:《班线包车》2019/2020 å—约 **590 æ ¼**内容丢失(`FN/FO/FM`、`FP:FT`、`GE` å˜ç©ºï¼›`EO/EQ/ES/EU/EW/EY/DT/DW...EM` å…± **144 æ ¼**变 `#DIV/0!`)。生成件已带出(该页 `#DIV/0!` 228→372)。**待用户确认后按备份/定稿回补(只补值与公式,保留其边框与字号)。**
- **口径落地「缺数留空」**:母版《 è´§è¿ã€‹è¡Œ 90/93(仙桃 è§„上两行)、108/111(林区)在 2021、2022 å¹´å—çš„ 78 ä¸ª `0` å€¼å·²æ¸…空(与手工定稿按表头对齐逐格核对:母版=0 ä¸”定稿=空 78 æ ¼ã€å†²çª 0 æ ¼ï¼‰ï¼›ä»£ç  `FreightCalc.buildMetrics` å½“月分支改为「该月无规上记录 â†’ ç•™ç©ºã€ï¼Œä¸å†å†™ 0(累计分支不变)。
- **纠正一条错判**:此前「程序少一列 11 æœˆçŽ¯æ¯”ã€ä¸æˆç«‹â€”â€”ç”Ÿæˆä»¶ä¸Žæ‰‹å·¥å®šç¨¿çš„çŽ¯æ¯”æœŸé—´é›†åˆå®Œå…¨ä¸€è‡´ï¼ˆ12月…1月 å…± 12 åˆ—);差异根因是手工定稿《 è´§è¿ã€‹åœ¨ 2025 å¹´å—多一列**无表头辅助列**(`U`,74 æ ¼ï¼‰ï¼Œè‡ªè¯¥åˆ—起手工整体右移 1 åˆ—。**比对必须按表头期间对齐,不能按列位置比。**
- **验证**:生成两次(约 15 ç§’/次),第二次相对第一次**仅 78 æ ¼ 0→空**,错误值数量不变;`公交!S5=98460.97` ç­‰ç¼“存值抽查保留。
- **运行状态**:后端已按 `start-dev.ps1` é‡å¯ï¼ˆæ–° PID,8090/8080 åœ¨è·‘);本机库仍为 `localhost:3308/traffic_audit`。
- **✅ ç­çº¿åŒ…车回补完成(09-28 ä¸‹åˆï¼‰**:用户确认后按 09-27 æ¯ç‰ˆå¤‡ä»½ï¼ˆ`_bak_202608母版文本数字转数值前_20260927.xlsx`)XML ç²¾å‡†å›žè¡¥ã€Šç­çº¿åŒ…车》2019/2020 å— â€”— **该页与 09-27 æ¯ç‰ˆé€æ ¼ä¸€è‡´ï¼ˆ0 å·®å¼‚)**,错误值回到 `#REF!` 8 / `#DIV/0!` 228;母版其它页未受影响。验收生成:与 09-27 ç”Ÿæˆä»¶ (6) æ¯”对错误值逐页一致,差异仅剩既定改动(` è´§è¿` 78 æ ¼æ¸… 0、中口径明细 4915 æ ¼åˆ åˆ—位移、中口径排名 672 æ ¼å—位移、班线包车 82 æ ¼æµ®ç‚¹å°¾å·®/0-空)。
- **待办**:① æŽ’名页结构(块顺序、标题措辞、市州名短名/全名、周转量排名多 7 è¡Œï¼‰ï¼›â‘¡ æŽ’名页结构(块顺序、标题措辞、市州名短名/全名、周转量排名多 7 è¡Œï¼‰ï¼›â‘¢ ç¼º 2026-09 æ¯ç‰ˆã€å¯¼å‡ºå‰åŸºæ•°ä½“检(P0-3)。
## æœ€æ–°ï¼ˆ2026-09-27)
- **提交规范改为同事方式(用户 09-27 å†³å®šï¼Œå·²å†™å…¥ AGENTS.md)**:
docs/Éú³É»ã×Ü´ó±í/2026Äê8ÔµÀ·ÔËÊäÁ¿»ã×ܱí.xlsx
Binary files differ
traffic-audit-server/src/main/java/com/trafficaudit/reportexport/calc/FreightCalc.java
@@ -147,14 +147,15 @@
        Double aboveFreight = null;
        Map<Integer, Double> h2032Buckets = h2032TonByCityMonth.get(city);
        if (h2032Buckets != null) {
            double ton;
            if (cumulative) {
                ton = 0.0;
                double ton = 0.0;
                for (int m = 1; m <= month; m++) ton += h2032Buckets.getOrDefault(m, 0.0);
            } else {
                ton = h2032Buckets.getOrDefault(month, 0.0);
            }
            aboveFreight = ton / 10000.0;
            } else {
                // å½“月无规上记录 -> ç•™ç©ºï¼ˆä¸å†å†™ 0);有记录(含真实 0 å€¼ï¼‰æ‰å†™æ•°
                Double ton = h2032Buckets.get(month);
                aboveFreight = ton == null ? null : ton / 10000.0;
            }
        }
        FreightTurnoverImport ft = ftMap.get(city);