# 功能测试报告_中口径排名周转量口径统一_2026-09-19 ## 一、功能说明 **问题来源**:用户核对桌面《生成_道路运输量汇总表 (1).xlsx》时,在「中口径排名」页手工加了一列 「人工-周转量」(逐月各分项相加),发现与程序生成的「周转量」列有差异(全省 +0.31978 万人公里, 各市州 ±0.01~0.08),要求定位原因并修复。 **根因**:同一本汇总大表里两页走了两套取数口径。 - 「中口径排名」页周转量来自后端 `ReportExportService.loadMidClassMap()` 公交维度: **逐企业行**判断——该行「城际城乡周转量」> 0 就取字段值,= 0 才回退「总量 − 城市内」。 - 「中口径明细」「道路运输周转量」「中口径分析」等页走台账口径 (`smReadLedgerMetrics()`):先按市州按月汇总,再 合计总量 − 合计城市内。 源报表里「总量/城市内/城际城乡」三个数各自保留两位小数,个别企业行上 `城际城乡 ≠ 总量 − 城市内`(差 ±0.01)。2026 年 1-8 月这类行共 **72 行**, 程序采信字段值、人工用差额法,累加后即出现该差异。 **修改内容**:`traffic-audit-server/.../reportexport/service/ReportExportService.java` (公交维度,原 2458/2460 行附近)——城际城乡一律用「总量 − 城市内」现算,与台账页/明细页/四页合成口径一致。 ## 二、测试环境 | 项 | 内容 | | --- | --- | | 后端 | Spring Boot,`localhost:8090`,改后重新编译并重启(`start-dev.ps1`) | | 数据库 | MySQL `localhost:3308/traffic_audit`(`city_bus_monthly` 等) | | 报表期 | 2026-08(1-8 月累计 + 8 月单月块) | | 对照件 | `D:\桌面\生成_道路运输量汇总表 (1).xlsx`(改前生成 + 用户人工列) | | 生成件 | 接口 `/api/report/export/summaryWorkbook?period=2026-08` → `_after_busfix_2026-08.xlsx` | | 辅助脚本 | `_qa_busfix.py`、`_qa_busfix2.py`、`_qa_busfix3.py`、`_qa_busfix_diff.py`、`_qa_busfix_err.py`、`_qa_busfix_hist.py` | ## 三、用例与结果 | 编号 | 类型 | 输入 | 预期 | 实际 | 结论 | | --- | --- | --- | --- | --- | --- | | T1 | 正向 | 改后生成件「中口径排名」O 列 vs 「中口径明细」S 列,17 市州 | 逐格相等 | 17/17 全部相等(武汉 152330.8912、孝感 64429.9445、随州 59015.4820…) | 通过 | | T2 | 正向 | 全省累计周转量(排名页 O3) | = 明细/人工 1227147.48902 | 1227147.4888(差 −0.0002 万人公里 = 2 人公里) | 通过(差异见「五、遗留」) | | T3 | 正向 | 武汉累计周转量 | = 人工列 152330.8912 | 152330.8912 | 通过 | | T4 | 正向 | 8 月单月块 17 市州合计 | = 明细 8 月合计 | 均为 156017.6956 | 通过 | | T5 | 正向 | 独立接口 `passengerMidAnalysis`(城际城乡公交累计周转量) | = 台账口径 227126.74 | 227126.74(改前 227127.06) | 通过 | | T6 | 正向 | 独立接口 `passengerMidRank` 全省累计周转量 | 接近 1227147.489 | 1227147.4888 | 通过 | | T7 | 回归 | 改前/改后「中口径排名」客运量列(17 市州 + 全省) | 不变 | 完全一致 | 通过 | | T8 | 回归 | 「中口径分析」页 累计周转量(台账口径) | 不变 | 逐格一致(1227147.48902 / 904146.38902 / 227126.74…) | 通过 | | T9 | 回归 | 同比列(全省 −2.35%、武汉 +4.15% 等) | 不变 | 显示精度内完全一致 | 通过 | | T10 | 回归 | 整本工作簿逐格对比改前/改后 | 仅目标格变化 | 除目标列外只出现 1e-10 级浮点噪声 | 通过 | | T11 | 边界 | 2025 年基期(同比基数) | 不受影响 | `city_bus_monthly` 2025 年「存储城际城乡 ≠ 总量−城市内」行数 = 0 | 通过 | | T12 | 边界 | 原「存储值缺失(<=0)才回退」兜底是否仍需要 | 去掉后无副作用 | 2025/2026 均无「未存城际但 总量−内>0」的行(0 行),兜底从未触发 | 通过 | | T13 | 负向 | 源库 72 行「存储城际城乡 ≠ 总量−城市内」 | 统一按差额法 | 17 市州差值全部归零(改前:武汉 +0.04、孝感 +0.08、随州 −0.02…,全省 +0.3198) | 通过 | | T14 | 负向 | 「班线包车」页 2020 年历史列 `#VALUE!` | 非本次引入 | 改前历史生成件同为 236/456 格;Excel 打开会按 `fullCalcOnLoad` 重算 | 通过(既有现象) | ## 四、发现的问题与处置 1. **口径不一致(本次根因)**:公交维度逐企业行采信「城际城乡」字段,与台账页差额法冲突 → 已统一为差额法。 2. **全省行残留 0.0002 万人公里**:排名页全省行是母版公式 `=SUM(O4:O20)`,各市州先四舍五入到 4 位再求和, 与「明细全精度求和」天然差 2 人公里,属母版公式结构性问题,本次未动母版。 3. **历史列 `#VALUE!`**:POI 重算 2020 年同比列的既有现象,与本次改动无关,Excel 打开即自动重算。 ## 五、结论 - 修复后「中口径排名」周转量与人工/台账口径 **17 个市州逐格一致**,差异从 17 项归零; - 客运量、同比、分析页、四页合成页均无回归; - 2025 同比基期不受影响; - 残留 0.0002 万人公里(2 人公里)来自母版全省行 SUM 公式,建议后续单独拍板是否改为全精度写值。 测试人:Codex(AI) 测试日期:2026-09-19