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

功能测试报告_中口径排名左块删除与7月回归收口及8月扩列_2026-09-08

一、功能说明

  1. 按 2026-09-08 业务拍板(《确认回执汇总…》第六节第 6 条):删除汇总大表 中口径排名 页 r1-20 左块(A..H,陈旧当月数据:A=2026-01 客运量、E=2026-02 周转量,无期次标题),页内仅保留两张可见表:r1-20「1-7 月累计」与 r22-41「7 月当月」(均在 J..R)。
  2. 程序侧同步:ReportExportService.restoreSummaryMonthlyBlocks 对 中口径排名 页 A..H(0-based 0-7 列)**永不从备份母版回填**,杜绝“母版删了、一生成又复活”。
  3. 7 月回归收口(含排名页左块删除一起验);通过后再扩 8 月母版(M0 版式重建器 v4)。

二、测试环境

  • 母版:docs/生成汇总大表/2026年7月道路运输量汇总表.xlsx(清理后骨架)与 _备份_2026年7月道路运输量汇总表_清理前_20260904.xlsx(完整 7 月,还原源)。
  • 生成链路:后端 mvn spring-boot:run(8090),接口 GET /api/report/export/summaryWorkbook?period=2026-07|2026-08&mode=month。
  • 校验工具:openpyxl 内容级 diff(data_only=False 双读)、mvn -DskipTests compile。

三、用例表

# 用例 输入/操作 预期 实际 结论
1 母版删除左块 7 月母版 中口径排名 A1:H20 清空 + 移除 A1:H1/A22:H22 合并 仅 J1:R1、J22:R22 保留合并;A..H r1-20 无内容 清 148 格;合并仅剩 J1:R1/J22:R22;整簿 diff 仅此区 通过
2 程序不回填左块 后端生成 2026-07 汇总表(走还原逻辑) 生成物排名页无 A..H 陈旧块 生成物 vs 备份母版 diff=179,其中 148=左块删除(预期)、31=日期列 int/float 写法(显示相同) 通过
3 7 月 M1 数值回归 货运/公交出租轨道/网约/城市汇总/班线包车脚本复跑(库 2026-01~07) 各页与母版缓存 0 差异 freight/pax/wyc/urban/mid 全 diffs=0 通过
4 Java 编译 mvn -q -DskipTests compile 无错误 exit=0 通过
5 8 月扩列(v4) 修正后 7 月整本 → 8 月母版 2026年8月道路运输量汇总表.xlsx 8 个台账/合成页 +2 列(2026年8月/8月同比),累计滚动,2025 参照右移 8 页 maxCol +2;累计 +Q、同比分母 +AJ;7→8 月数值格 2387 个 0 差异 通过
6 扩列版式细节 新 8 月两列表头、隐藏列、排名页 两行纵向合并表头;隐藏列平移保留;排名页无左块 Q/R 表头与 15/16 列同款合并(各页行位正确);隐藏列按 >=17 +2 保留;排名页仅 J 系合并 通过
7 程序读新 8 月母版 后端生成 2026-08(POI 读母版) 不报 Zip-bomb、输出=母版 styles.xml 比值 0.0099 触发 POI 误报→ZipSecureFile.setMinInflateRatio(0.0001) 后修复;生成物与 8 月母版内容 diff=0 通过

四、发现的问题与处置

  1. POI Zip-bomb 误报:openpyxl 重写后 styles.xml 压缩比 0.009988 < 0.01,POI 拒读新版 8 月母版。处置:exportSummaryWorkbook 读母版前临时调低阈值(0.0001)并在 finally 还原,仅影响本方法读取内部模板。
  2. 历史遗留:8 月版式原型(v3 产出)的新 8 月列无两行合并、隐藏列标记丢失、以“清理前备份”为源会带回排名左块;v4 修正源为“已删左块的 7 月生成物”并补两行合并与隐藏列平移。
  3. 本版 8 月母版 2026 组累计公式已滚动至 1-8 月(+Q/+AJ),但 8 月当月值仍为空,待 8 月数据导入后由 M2/M3 填值。

五、结论

  • 中口径排名左块删除在母版与程序生成链路均生效;7 月回归收口通过(排名页随同验证无左块、其余页与库 0 差异)。
  • 8 月扩列母版已生成并通过程序端到端读取验证,可作为后续 8 月数据填充的母版。
  • 遗留:M2 SummaryFiller / M3 8 月实弹(导数后填 2026-08 当月值)、母版缓存校验走 Q1 口径。