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

功能测试报告:汇总工作簿骨架生成(P0-P1)(2026-09-03)

功能说明

按 2026-09-03 口径确认(《自动生成汇总工作簿落地方案》v0.1:#REF! 以后处理;2025 年列暂时保留母版缓存值;先试 P0-P1 骨架),新增汇总工作簿生成接口:
- 后端从 docs/生成汇总大表/ 定位母版《YYYY年M月道路运输量汇总表.xlsx》并整本复制,保留全部 19 个页签、版式、公式与 2025/2024 参考列缓存值;
- 仅当目标年 ≠ 2026 时,将单元格文本中的 2026年 前缀替换为目标年(如 2027年),2025/2024 字样与页签名不动;目标年为 2026 时不做任何替换(与母版一致);
- 数据填充(台账→口径合成→成品)按方案 P2 起逐步接入,本期仅验证骨架可生成、无损坏。

代码改动(未提交、未推送):
- traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
- 新增 summary.template-dir 配置项(默认 docs/生成汇总大表);
- 新增 exportSummaryWorkbook(period, mode) 与 dynamicSummaryYear(wb, year);
- selectedReportData 增加 summaryWorkbook 分支;REPORT_FILE_NAMES 增加 summaryWorkbook。
- traffic-audit-server/src/main/java/com/trafficaudit/reportexport/controller/ReportExportController.java
- 新增 GET /api/report/export/summaryWorkbook?period=…&mode=month。

测试环境

  • 后端 8090(start-dev.ps1 启动,就绪日志 OK);MySQL 127.0.0.1:3308。
  • 母版:docs/生成汇总大表/2026年7月道路运输量汇总表.xlsx(19 页签,隐藏 4 页:公路总客运、2025年城市客运量、中口径客运量、中口径计算过程)。
  • 方法:调用接口下载生成文件,openpyxl 与母版逐项比对(页签清单/顺序/隐藏状态/年份文本计数/前三行版式)。

用例与结果

  1. 2026-07 骨架生成(正向):接口 200,产物 1.23MB;页签 19 个且顺序与母版一致;4 个隐藏页保持 hidden。结论 PASS。
  2. 版式保留(正向):19 页前三行单元格字符串与母版 0 差异(含表头年份 2026年);无页签被改名/增删。结论 PASS。
  3. 年份文本未被误替换(正向):全表统计 2025年146 处、2024年160 处、2026年59 处,生成文件与母版完全一致(目标年=2026 时不做替换)。结论 PASS。
  4. 缺失月份负向:period=2026-08 请求返回 500,后端日志报 未找到模板文件: 2026年8月道路运输量汇总表.xlsx,符合预期(母版仅 7 月)。结论 PASS(预期失败)。
  5. 编译回归:改动后 mvn 编译 EXIT=0(compile2.log);后端启动无异常。结论 PASS。

发现的问题与处置

  1. 动态年份替换(如 2027 年)逻辑仅做了代码走查 + 2026 恒等验证,未端到端实测(母版只有 2026 年 7 月、目录中无其它年份模板,属预期);P2 阶段补一个临时 2027 模板做替换回归。
  2. 方案遗留待拍板项(行列边界、月份扩展、2024 列、轨道轮渡入库、输出目录)本期不处理,推进 P2(台账页数据填充)前需确认。

结论

汇总工作簿 P0-P1 骨架按口径实现并通过验证:整本复制母版生成成功,页签/隐藏/版式/2025-2024 缓存值零损坏;目标年 2026 时与母版一致;缺失月份按“未找到模板文件”明确报错,无静默错误。代码未提交未推送。