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

功能测试报告:城市客运报表新增《网约车客运量拆分表》《道路运输量汇总表》与数值两位小数显示(2026-09-03)

功能说明

按 2026-09-03 确认的下一步需求落地三件事:
1. 报表生成-城市客运报表 列表新增两项:网约车客运量拆分表(key=wycSplit)、道路运输量汇总表(整本)(key=summaryWorkbook);单选导出走 /api/report/export/{key},多选打包走 /api/report/export/selected,列表“数据就绪”状态由 /api/report/ready 统一计算(已接入)。
2. 网约车拆分算法与《网约车拆分.xlsx》月页人工口径一致:客运量=订单占比×全省网约车客运量 pin;城市内=巡游出租城市内占比代理,武汉保持自身、其余按剩余占比分摊至全省城市内 pin;城际城乡=总量−城市内;周转量=客运量×巡游出租平均运距占比分摊全省周转量 pin(城市内同法)。输入=《网约车订单及全省总量.xlsx》2026-07 行(B-E 全省 pin、G-W 17 市州订单)+ 系统巡游出租月报(city_taxi_monthly,含平均运距)。
3. 所有生成表数值“显示两位小数、保留全精度”:toBytes(XSSFWorkbook)/toBytesHssf(HSSFWorkbook) 出口统一执行 applyTwoDecimalFormat——非整数的 General/0/0.0/#,##0 等纯数值格式改为 0.00 显示,存储值不动;整数、百分比、日期、科学计数、已含 0.00 的样式一律不改变。

代码改动(未提交、未推送):ReportExportService.java(新增 exportSummaryWorkbook/exportWycSplit/resolveSummaryMother/loadWycMonthlyInput/applyTwoDecimalFormat 及 selected/ready 分支)、ReportExportController.java(新增两个 GET 端点)、ReportExport.vue(城市客运报表列表加两项)。本期另修复母版缺月静默回退问题(见“发现的问题”第 1 条)。

测试环境

  • 后端 8090(mvn spring-boot:run,Started OK 16:32);前端 8080 就绪;MySQL 127.0.0.1:3308。
  • 人工口径参考:docs/城市客运/网约车拆分_2026年7月.xlsx(“与人工大表核对”页);输入文件 docs/城市客运/网约车订单及全省总量.xlsx(2026-07 行)。
  • 母版:docs/生成汇总大表/2026年7月道路运输量汇总表.xlsx(19 页签,4 隐藏页)。
  • 方法:HTTP 调用接口下载产物,openpyxl 逐格比对。

用例与结果(输入 / 预期 / 实际 / 结论)

  1. 正向-数据就绪:wycSplit、summaryWorkbook 查 2026-07 ready → 均 ready=true(rows 17/159,note 空)。PASS。
  2. 正向-wycSplit 导出:GET /export/wycSplit?period=2026-07 → 200,产物 7371B,单页 2026-07拆分,客运量块(全省+17 市州)+ 周转量块结构完整。PASS。
  3. 正向-内部勾稽:全省行订单/客运量/巡游量/城市内/城际城乡与 17 市州求和一致 13 项、各市州 城际城乡=总量−城市内、输入 pin(4852.3/4430.84/28348.02/22705.61/订单 29730791)逐项命中。PASS。
  4. 正向-与人工口径一致:17 市州四指标(客运量、城市内客运量、周转量、城市内周转量)逐市州与“与人工大表核对”比较,最大绝对偏差 0.00000000(阈值 0.02)。PASS。
  5. 正向-两位小数/全精度:产物 185 个非整数数值格 number_format 全部为 0.00;存储值保留全精度(如 1825.1975355818822、0.9131422212146817);订单等整数值保持 General 不出现 .00。PASS。
  6. 正向-summaryWorkbook 导出:GET /export/summaryWorkbook?period=2026-07 → 200,产物 1,269,456B;19 页签名称/顺序/隐藏状态与母版一致;全簿单元格值 0 差异;仅 10,588 处显示格式由 General 调整为 0.00(母版缓存小数,值不变)。PASS。
  7. 正向-批量打包:/export/selected?types=wycSplit,summaryWorkbook → zip 1,206,867B 含两个文件。PASS。
  8. 负向-wycSplit 缺输入:2026-08(输入表该行未维护)→ HTTP500,message“网约车输入 2026-08 行不完整:全省 pin / 订单缺失,请核对《网约车订单及全省总量.xlsx》”,ready=false 并附缺数据说明。PASS(预期失败、提示明确)。
  9. 负向-summaryWorkbook 缺母版:2026-08(docs/生成汇总大表 无 8 月母版)→ HTTP500“未找到模板文件: 2026年8月道路运输量汇总表.xlsx”,ready=false。PASS(预期失败、提示明确,修复后验证)。
  10. 编译回归:mvn compile EXIT=0;后端重启无异常。PASS。

发现的问题与处置

  1. 修复:summaryWorkbook 母版定位原带“≤目标期最新母版回退”,导致 2026-08 请求静默使用 7 月母版生成、文件名为 2026-08 而内容仍为 2026 年 7 月(跨年场景还会只换年份不换月份),属误导性输出。已删除回退逻辑,改为仅精确匹配 {年}年{月}月道路运输量汇总表.xlsx,缺失即明确报错;月份扩展规则留待 P0 母版定稿。
  2. 观察项(与本次改动无关):cityTaxiDetail 导出仍 500“未找到模板文件: 生成_巡游出租客运量分市州明细.xlsx”,docs/城市客运 下该输出模板文件当前缺失,另立任务跟进补齐新版式模板。
  3. 使用说明:网约车拆分每月需在《网约车订单及全省总量.xlsx》补一行当月数据(B-E 全省 pin、G-W 17 市州订单、F 合计),ready 状态会提示缺失,不会静默空跑。

结论

两个新列表选项与“两位小数显示、全精度存储”按口径实现并通过正向/负向回归;网约车拆分 2026-07 与人工口径大表完全一致(最大偏差 0);汇总工作簿骨架与母版零值差异;缺月/缺输入均明确报错不静默。代码未提交未推送。