# 功能测试报告_中口径排名左块删除与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 口径。