# 功能测试报告:中口径排名同比基数方案 A(2026-09-21) ## 1. 需求与方案 用户针对 2026 年 1-8 月汇总大表提出问题: - 「中口径排名」黄冈累计同比系统生成 `7.744917%` - 「中口径明细」同一指标为 `7.641733%` - 要求查明并修正。 按用户拍板采用**方案 A**: - 「中口径排名」计算去年同期累计时,不再使用库内现算的 2025 网约车拆分结果; - 改用母版《中口径明细》页已有的 2025 年逐月静态定稿值; - 2026 年当年累计值、排名公式、全省 SUM 公式和当月同比逻辑均不变; - 找不到母版静态列时保留原库内现算逻辑,并写 WARN 日志。 ## 2. 实现范围 文件:`traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java` - `exportPassengerMidRank()` 增加可选工作簿上下文重载。 - 汇总大表导出时直接复用当前内存工作簿,读取《中口径明细》2025 年静态列。 - 独立导出《生成_中口径排名.xlsx》时,按报表期打开对应汇总母版读取同一静态列。 - 静态列按表头文字识别,不写死列字母。 - 读取 17 市州「总客运量」「总旅客周转量」1..N 月值并累计;全省基数由 17 市州求和。 - 任一市州、任一指标缺少完整月份时放弃静态基数并回退原逻辑,避免静默使用残缺基数。 ## 3. 验证环境 - 后端:Spring Boot `8090` - 数据库:`127.0.0.1:3305/traffic_audit` - 报表期:`2026-08` - 母版:`docs/生成汇总大表/2026年8月道路运输量汇总表.xlsx` - 测试产物: - `_tmp/qa_plan_a_20260921/生成_道路运输量汇总表_202608_方案A.xlsx` - `_tmp/qa_plan_a_20260921/生成_中口径排名_202608_方案A.xlsx` ## 4. 测试结果 | 编号 | 用例 | 预期 | 实测 | 结果 | | --- | --- | --- | --- | --- | | A01 | 后端编译 | 编译成功 | `mvn -DskipTests compile` 成功 | 通过 | | A02 | 2026-08 汇总大表生成 | 成功产出可读 xlsx | 生成成功,1325107 bytes | 通过 | | A03 | 黄冈客运量累计同比 | 排名=明细=`7.641733%` | 排名 `0.07641733462732472`,明细 `0.07641733462732603` | 通过 | | A04 | 黄冈周转量累计同比 | 排名=明细 | 排名 `0.01593727813242681`,明细 `0.015937278132423405` | 通过 | | A05 | 17 市州 × 客运量/周转量累计同比 | 34 组逐格一致 | 含累计值在内共 68 个数值对全部一致,最大绝对差 `2.91e-11` | 通过 | | A06 | 全省累计同比 | 排名=明细 | 客运量:排名 `0.0581055773685379`,明细 `0.058105577368537276`;周转量同样一致 | 通过 | | A07 | 全省累计值=Σ17 市州 | 完全相等 | 客运量 `31528.060699999998`;周转量 `1227147.4890200002`,均相等 | 通过 | | A08 | 2026-08 当月同比回归 | 排名=明细 | 34 个市州指标全部一致,最大绝对差 `5.48e-15` | 通过 | | A09 | 独立《生成_中口径排名.xlsx》 | 使用同一静态基数 | 黄冈客运量 `7.641733%`、周转量 `1.593728%`,与明细一致 | 通过 | | A10 | 静态基数缺失兜底 | 不中断导出,回退现算并记日志 | 代码级检查:母版/静态列缺失返回 `null`,沿用原 `midCumYoy()` | 通过 | ## 5. 结论 方案 A 已实施并完成回归。 - 原来的 `7.74%` 与 `7.64%` 双轨差异已消除; - 2026-08 汇总大表中,黄冈累计同比为 `7.641733%`; - 排名页与中口径明细页的累计同比、累计值、全省汇总均一致; - 当月同比未发生回归; - 未修改任何数据库表结构或业务数据。 ## 6. 备注 项目根目录 `_tmp/qa_plan_a_20260921/` 下的测试产物按项目约定保留,未经用户同意不删除。