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

功能测试报告:生成模板新版式改造(2026-09-02)

功能:按用户手工改好的“新版式”模板(上半块「1-N月累计」+ 下半块「N月当月/单月」)调整货运、公路旅客、城市客运三类《生成_*.xlsx》报表的填充逻辑。
范围:只改报表生成代码与底稿引用,不涉及数据导入;代码未提交、未推送。

一、功能说明(代码改动)

1. 公路旅客

  • 生成_中口径分析.xlsx:下半块标题(A9)动态化为「YYYY年M月中口径客运量及周转量」;数据行 R11-R15 填当月客运量/周转量(当月=N月累计−N-1月累计)与当月同比;占比公式 D/H 由指向 B$3/F$3 改为指向 B$11/F$11(当月块自身)。
  • 生成_中口径排名.xlsx:右侧当月块 K1 标题动态化「YYYY年M月全省分市州完成道路客运生产情况」;L/P 填当月值、N/R 填当月同比;左侧仍为 1-N 月累计块。

2. 城市客运

  • 生成_城市客运汇总.xlsx:底部新增单月块(标题 A11,数据行 R13-R19:总客运量/总周转量、公交、出租、巡游出租、网约车=0、轨道、轮渡),填当月完成量,同比留空。
  • 生成_城市客运客运量分市州累计.xlsx、生成_城市客运各市州明细表.xlsx:当月块(客运量 R49-R66、周转量 R71-R88)改填当月值(当月累计差);当月块 RANK/占比/增速排名公式由复制累计块而来,改指当月块自身行;当月标题 A45/A67 动态化。
  • 底稿引用修复:城市客运 6 处已删除的《导入模板_城市公交/巡游出租/轨道轮渡/城市汇总/城市分市州/各市州明细表》全部改回同名《生成_*.xlsx》(ReportExportService/Controller、一键系列包内同步);前端 DataImport.vue 城市公交/巡游出租“下载模板”链接同步改指《生成_*》。

3. 货运

  • 生成_货运量排名.xlsx、生成_周转量排名.xlsx:R23 标题去掉“累计”字样 →「YYYY年M月全省分市州完成公路货运量/货物运输周转量情况」。
  • 第二页数据改填“当月”值(2026-09-02 16:40 确认并实现):货运量第二页合计=模板_货运量周转量当月列(freight_mN)、规上=H2032 当月吨/1e4、规下=差值,同比取去年同月;周转量第二页直接用拆分表 MONTH 行(含当月同比字段)。
  • 第二页列头“累计完成 (万吨/万吨公里)”在导出时内存替换为“当月完成”(renameRankMonthHeader,不改模板源文件)。

二、测试环境

  • 后端 8090 本地运行;数据库 mysql localhost:3308 traffic_audit。
  • 数据现状:h2031(公路旅客企业月报)2026-03/07;city_bus/city_taxi 2026-06/07;h2032 2026-01~08 完整。
  • 测试报表期:2026-07,mode=month。产物留档:outputs/report_check/regression_newtpl_2026-07/

三、用例表

# 类型 输入 预期 实际 结论
1 正向 passengerMidAnalysis 2026-07 上半块=1-7月累计,下半块=7月当月 A1=「2026年1-7月中口径…」B3=6151.91 万人、F3=285634.95;A9=「2026年7月中口径…」B11=3078.86 万人、F11=141155.32;D12-H15 占比公式分母=B$11/F$11 通过
2 正向 passengerMidRank 2026-07 左块累计标题、右块当月标题与当月值 A1=1-7月累计标题;K1=「2026年7月全省分市州完成…」;L3=3078.86(当月)与左块 B 列累计数值明显区分 通过
3 正向 cityPassengerSummary 2026-07 底部单月块=库内 2026-07 合计 A11=「2026年7月全省完成城市客运量情况」;B13=30612.85、D13=218186.08;B14=12974.73(公交)、B15=5860.24(出租)、B18=11731.83(轨道)、B19=46.05(轮渡),与库内 city_bus/city_taxi 2026-07 分项合计逐位一致 通过
4 正向 cityPassengerCitySum 2026-07 当月块=7月当月、公式指当月行 当月客运量块武汉 R50:G=4218.74(公交)、L=1093.91(出租)、V=11701.74(轨道)、X=46.05(轮渡)、B=17060.44,与 DB 2026-07 一致;C/H/M/R 排名公式范围=B$50:B$66 等当月行;累计块与当月块数值区分明显 通过
5 正向 freightRank / turnoverRank 2026-07 R23 标题无“累计”;第二页=当月值 R23=「2026年7月…完成…」;上半块 1-7 累计不变;第二页 2026-07 当月值与库内逐项一致(见用例 11) 通过
11 正向 freightRank/turnoverRank 2026-07 当月版(产出 freightRank_当月版_2026-07.xlsx / turnoverRank_当月版_2026-07.xlsx) 第二页当月值与 DB 一致、列头=当月完成 货运量第二页:全省 R26 B/G/L=3754.7823/12530.9282/16285.7105、武汉 R27 B=1227.5499(DB H2032 2026-07 武汉合计 1227.5499 ✓)、L=4940.9715;周转量第二页:全省 R26=597278.64/1584647.07/2181925.71、武汉 R27=204809.5633/462751.8106/667561.3739,与 DB scale_split MONTH 行一致;B25/G25/L25 列头=“当月完成”;无错误公式 通过
6 正向 10 个导出接口(含未动表的公交/出租/轨道轮渡明细)2026-07 全部可出数 全部 HTTP 200;全文件错误公式扫描 #REF!/#DIV/0!/#N/A = 0 残留 通过
7 负向 无数据月份 period=2026-05(citySummary/freightRank) 不报错、当月块留空 HTTP 200,空表正常生成(产物 neg_citySummary_2026-05_nodata.xlsx) 通过
8 负向 年初单月 period=2026-01(freightRank) 当月块=1月数据 HTTP 200(产物 neg_freightRank_2026-01.xlsx) 通过
9 边界 超范围月份 period=2026-13 不崩、软处理 HTTP 200 正常出文件 通过(宽松处理)
10 负向 非法报表期 period=bad-period 友好报错或 400 HTTP 500(无入参校验;前端为固定下拉,正常路径不可达) 发现缺陷(低优先)

四、入库抽查(与源库逐项对齐)

  • 城市客运汇总底部单月块:B14/D14(公交 12974.73 / 87147.68)、B15/D15(出租 5860.24 / 34236.60)、B18/D18(轨道 11731.83 / 96645.23)、B19/D19(轮渡 46.05 / 156.57)= SELECT SUM 2026-07 city_bus/city_taxi 逐项一致。
  • 城市客运当月块分市州:武汉 R50 公交 4218.74、出租 1093.91 = DB 2026-07 武汉市合计;其余 16 市州公交值与 DB 逐市州一致(抽查 G 列 R50-R66)。
  • 公路旅客中口径下半块 3078.86 万人 / 141155.32 万人公里 = 2026-07 当月源值(累计差口径,与既有回归口径一致)。

五、发现的问题与处置

  1. 货运两张排名表第二页“当月”填充(已实现并验证,2026-09-02 16:40):业务确认第二页要当月值后,已实现当月填充(货运量:规上=H2032 当月/合计=模板当月列/规下=差值;周转量:拆分表 MONTH 行),并把第二页列头内存替换为“当月完成”。2026-07 回归与 DB 逐项一致、无错误公式。模板源文件(docs/货运/生成_*.xlsx)本身仍写“累计完成”字样,如需源文件一并改可在 Excel 中另存(程序导出已自动显示为“当月完成”)。
  2. 城市客运当月块 Q 块表头歧义(待业务确认):当月客运量块表头行 48 Q 列写“其中:出租”、当月周转量块表头行 70 Q 列写“其中:网约车”,程序按“网约车=0 留空”填充;需确认业务口径(已记入待确认清单)。
  3. 增速/增速排名列:E/J/O/T/W/Y 无去年同期数据时留空,其排名公式(F/K/P/U 等)保留;无去年数据时排名无业务意义,待模板口径确认后决定是否整列清空。
  4. 非法 period 返回 500:报表参数未做格式校验,前端固定下拉不可达,低优先级,建议后续统一补。

六、结论

  • 公路旅客、城市客运新版式改造已落地:上半“累计”+下半“当月”双块结构正确、公式范围正确、数值与库内 2026-07 数据逐项对齐,无错误公式残留 → 可用。
  • 货运两张排名表第二页“当月”填充已实现并通过 2026-07 回归(与库内 H2032 / freight_turnover_import / scale_split MONTH 行逐项一致)。