编辑 | blame | 历史 | 原始文档

功能测试报告:汇总大表 1-6 月生成 + 1-7 月扩列(2026-09-04)

一、功能说明

  • 目标:验证《道路运输量汇总表》生成程序可产出两本产物——
  1. 1-7 月扩列(period=2026-07):以“1-4 月骨架”母版为底、按同期备份母版还原月度块,得到 1-7 月完整工作簿;
  2. 1-6 月生成(period=2026-07&toMonth=6):在上述 1-7 内容基础上,把 8 个台账/合成页裁剪到 6 月——
    • 7 月当月值列(O)、7 月同比列(P)的**数据格清空,表头保留**(用户拍板口径 ①);
    • 累计公式(Q)去掉 7 月项,累计同比公式(R)分母去掉 2025 年 7 月列(=2025 年 1-6 月,用户拍板口径 ②)。
  • 代码改动:
  • ReportExportService.exportSummaryWorkbook(period, mode, toMonth):新增可选 toMonth 裁剪;
  • 新增 trimSummaryMonthlySheets(wb, keepMonths):只处理 8 个台账/合成页(货运、班线包车、城市客运、公交、出租、网约车、轨道、轮渡、中口径明细),按“含累计公式且任一 2026 月度值列非空”识别数据行;
  • ReportExportController /export/summaryWorkbook 增加可选参数 toMonth。
  • 产物(程序实际 HTTP 生成,非手工改表):
  • docs/生成汇总大表/输出/道路运输量汇总表_2026-07.xlsx(921,070 B)
  • docs/生成汇总大表/输出/道路运输量汇总表_2026-06.xlsx(912,980 B)

二、测试环境

  • 后端 Spring Boot 8090(mvn spring-boot:run 实跑,本机 MySQL 127.0.0.1:3308/traffic_audit);
  • 母版:docs/生成汇总大表/2026年7月道路运输量汇总表.xlsx(1-4 月骨架,工作区未提交版);
  • 备份母版(逐格对照基准):docs/生成汇总大表/_备份_2026年7月道路运输量汇总表_清理前_20260904.xlsx;
  • 校验脚本:逐格比较单元格原文(公式含 =、值、文本),数值按 int/float 等价归一化。

三、用例与结果

# 用例 输入 预期 实际 结论
1 1-7 月扩列 GET /api/report/export/summaryWorkbook?period=2026-07&mode=month 与备份母版全簿逐格一致 真差异=0 通过
2 1-6 月生成(正向) 同上追加 &toMonth=6 非裁剪范围(非 8 台账页 + 8 台账页 A..N 等)与备份一致;仅 O/P/Q/R 按规则变化 非白名单真差异=0 通过
3 7 月两列清空/表头保留 8 台账页数据行 O/P 数据格空、表头行 O/P 保留 数据格清空 1132,表头保留 24,表头异常 0 通过
4 累计按 1-6 月 数据行 Q 列公式 去掉 +O{行} 改写 566 处,例:=C5+E5+...+O5→=C5+...+M5 通过
5 累计同比分母=2025 1-6 月 数据行 R 列公式 去掉 ,AF{行}/+AF{行} 改写 566 处,例:=Q5/SUM(T5..AF5)-1→=Q5/SUM(T5..AD5)-1 通过
6 抽查关键格 货运/中口径明细 O/P/Q/R 表头见文、数据行 O/P 空 07 数据行 O=3754.7823(7 月值),06 同格为空;表头一致 通过
7 负向/边界 toMonth 缺省或 ≥7 行为与旧版一致(全簿还原) 同用例 1,真差异 0 通过

四、实现中发现并处置的问题

  1. POI 行号 0-based vs 公式 1-based:初版按行索引拼接 +O4,匹配不上公式里的 O5,导致 Q/R 未改写(仅清空生效)。处置:token 行号改 excelRow = r + 1。
  2. 2025 同月列 0-based 索引错 1:分母列 T..AF 的 0-based 起点是 19(T),误用 20 会算出 AG(列号越 1 列),R 公式匹配不到。处置:lastCol = 19 + 2*(m-1)。
  3. 两处修复后均重新 mvn compile + 重启后端复测通过(最终产物为修复后代码生成)。

五、边界与已知项(本次未纳入)

  • 成品聚合页(货运量排名、货运周转量排名、中口径排名、中口径分析、城市汇总、城市分市州、道路运输周转量)的单元格为**人工母版静态值(1-7 月累计口径)**,本次裁剪不触及;要随“1-6 月”自动重算需走 P2-P5 数据驱动填充(另排期)。
  • 2025/2024 参考列保留母版缓存值,未改(已确认口径)。
  • 隐藏页(公路总客运、2025年城市客运量、中口径客运量、中口径计算过程)未纳入裁剪,保持原样。

六、结论

“先生成 1-6 月、1-7 月扩列”两本产物经程序实际生成并通过逐格对照:1-7 月产物与备份母版零差异;1-6 月产物在 8 个台账/合成页正确执行“7 月两列留空(表头保留)、累计/同比按 1-6 月”的口径,其余范围零差异。P0 项可关闭,剩余成品聚合页数据驱动重算(P2-P5)单列跟进。