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

功能测试报告_投资明细表与导入取列定位修复_2026-09-19

本文覆盖 2026-09-18 夜间~2026-09-19 凌晨的 6 项改动(中口径排名同比、网约车分摊回落、两张投资明细表、导入界面隐藏网约车订单、投资市州单表取列定位修复、8 月投资源数据补齐)。

一、功能说明

  1. 中口径排名/明细同比口径修复(B1/B3/B5):原实现用「去年该月值是否为 0」判断数据是否存在,导致
  • 武汉巡游出租城际/城乡业务上年恒为 0 → 同比被误判为「无基期」;
  • 去年缺月时被当作 0 参与计算 → 同比虚高(公交行一度出现 −28577%)。
    现改为 按「源表是否有该行」登记存在性(markMid/midMonthHas/midCumHitMonths),
    去年缺任一月则同比留空;同时 loadMidClassMap() 用 passengerVolume - passengerCity 兜底跨县公交口径,
    解析异常改为记入 midIssues 并 log.warn(不再静默 continue)。
  1. 网约车 2025 分摊回落(B2):WycSplitCalc.loadMonthlyInputFromDb() 在某月 pin 缺失或 ≤0 时回落 wyc_total_monthly,source 标 db+wyc_total。
  2. 新增两张投资明细表导出:/export/investPassengerDetail、/export/investLogisticsDetail。
    口径(用户 2026-09-18 确认):只覆盖 H 自开始建设累计 / J 自年初累计 / K 本月完成 / M 形象进度;
    I 本年计划投资、L 建设阶段、G 计划总投资不动母版;库内为空保留母版原值。
    物流表额外按表内数值重算渠道行/市州行/合计行,并刷新「分市州规划内外项目完成情况」「市州汇总」(渠道小计保留程序算出的数)。
  3. 导入界面隐藏「网约车订单及全省总量」:DataImport.vue 该类型置 hidden: true,入口/概览/清空三处下拉统一走 typeList() 过滤。
  4. 投资市州单表「表头取列定位」修复(本轮核心,DataImportService.findInvestHeader):
  • 表头文本扫描上界由**固定 表头行+3** 改为**「表头块」**:上界 = 首个真实数据行 − 1(硬上限 +12 行);
  • 新增「建设进展」关键词映射到形象进度列;
  • 新增 desc = stage + 1 兜底(省标「项目建设阶段、进度情况」为 L/M 合并表头,部分市州只写 L 标题);
  • 合计/总计/小计 判定改为**去空白后**匹配(原 nt.contains("合计") 漏掉「合   计」)。
  1. 补齐 2026-08 投资源数据:docs\投资\输入\客运(客运站)\8月(9 个文件)、物流(物流园区)\8月(16 个文件),并重新导入。

二、测试环境

项 值
日期 2026-09-19(00:0x–01:0x)
后端 Spring Boot 8090(重启加载新代码,Started TrafficAuditApplication)
前端 Vue 8080(App running at)
数据库 MySQL 127.0.0.1:3308 traffic_audit
源数据 D:\桌面\测试数据\投资\八月源数据\{客运,物流} → 复制到 docs\投资\输入\...\8月
对照定稿 D:\桌面\测试数据\投资\8月客运站投资明细表.xlsx、8月物流站场投资明细.xls
报表期 2026-08(mode=month)
入口 POST /api/import/investCityBatch?period=2026-08&category=客运站场\|物流园区

三、用例表

编号 用例 输入 预期 实际 结论
T01 咸宁客运「形象进度」取列(正向) 2026年8月咸宁市客运站场投资统计月报表(1)省表.xls(L/M 标题在第 8 行,表头在第 4 行) M 列(形象进度)应被定位 库内 progress_desc 非空 0 → 7/9 行(另 2 行源文件本身为空) ✅ 通过
T02 宜昌客运「建设阶段/形象进度」取列(正向) 湖北省宜昌市道路客运站场投资报表(月、年报)08月.xls(L/M 标题在第 5 行,首行数据在第 7 行) L=建设阶段、M=形象进度;不得被判成「竣工时间」列 修复前 stage 0 / desc 0 → 修复后 5/5 与 5/5(旧实现把首行数据的「竣工收尾/建成投运」当表头文本,命中「竣工/建成」分支) ✅ 通过
T03 物流合并表头「形象进度」兜底(正向) 孝感 / 恩施 / 随州物流明细表(只在 L 写「项目建设阶段、进度情况」,M 直接写进度文字) 应识别 M 列为形象进度 desc 非空 0 → 孝感 7/7、恩施 4/6、随州 2/2(恩施另 2 行为「建成」、源文件 M 本身为空) ✅ 通过
T04 已正确市州回归 十堰/恩施/襄阳/荆门/武汉/林区客运 + 黄冈/咸宁/荆州/荆门/宜昌/襄阳/黄石物流等 取列与数值不变 逐项一致:十堰客运 4/4、恩施客运 6/6、襄阳客运 6/6、咸宁物流 9/9、荆州物流 9/9、荆门物流 8/8、宜昌物流 13/13 ✅ 通过
T05 合计行不得入库(负向) 咸宁客运源文件含「合   计」行(多个空格) 合计行被跳过 修复前入 40 行(含 1 条名为「合   计」的假项目)→ 修复后 39 行,假项目已消除 ✅ 通过
T06 入库数值抽查(与源文件逐项对齐) 孝感物流 7 行 / 恩施物流 6 行 项目行求和 = 源文件市州小计行 孝感 H/J/K = 160378 / 116414 / 13784、恩施 = 126741 / 41574 / 2116,与源文件「 分项目投资完成情况」市州行逐项一致 ✅ 通过
T07 客运站投资明细表回归 导出 vs 8月客运站投资明细表.xlsx 与修复前不劣化 汇总页 0 差异;明细页 6 处(修复前 5 处,新增的 1 处为咸宁 M85,程序按源文件写入而定稿留空,属「更完整」) ✅ 通过
T08 物流站场投资明细表回归 导出 vs 8月物流站场投资明细.xls 与修复前不劣化 三页数值与修复前一致,仅新增孝感/恩施/随州形象进度;差异仍集中在武汉/十堰/荆州/天门 4 市州(见「遗留」) ✅ 通过
T09 中口径排名同比 passengerMidRank(2026-08) 与定稿一致 全省 5.81%、武汉 4.65%、仙桃 17.23%、林区 −34.87%,与定稿一致;黄石 7.76、十堰 2.52、宜昌 −16.17、襄阳 5.67、荆州 36.62、黄冈 7.74、咸宁 17.06、恩施 13.92、潜江 −2.84、天门 9.01(与定稿差 0.02~0.5 个百分点) ✅ 通过
T10 中口径明细同比 passengerMidDetail(2026-08) 不再出现数量级错误 公交行累计同比 −28577% → +13.15%、出租 +8.54%、网约车 +75.66% ✅ 通过
T11 导入界面隐藏网约车订单 DataImport.vue 入口/概览/清空三处均不可见 wycOrder 置 hidden: true,三处 v-for 统一改用 typeList(g) ✅ 通过
T12 报表生成新增两张投资明细表 ReportExport.vue 投资报表组可导出并正确命名 新增两项,fileNameOf() 把「X月」替换为报表期月份(→生成_8月客运站投资明细表.xlsx、生成_8月物流站场投资明细.xls) ✅ 通过
T13 幂等/确定性 同一批源文件连续导入两次 行数与数值一致 客运 39 行、物流 128 行;两次结果完全一致 ✅ 通过
T14 编译回归 mvn -q -DskipTests compile 编译通过 exit=0 ✅ 通过

四、发现的问题与处置

编号 问题 根因 处置
P01 宜昌客运「建设阶段/形象进度」全空 表头扫描窗口固定 表头行+3,把**首行数据**纳入列名文本,数据里的「竣工收尾/建成投运」先命中「竣工/建成」分支 扫描上界改为「表头块」= 首个真实数据行 − 1,数据行不再参与列名匹配
P02 咸宁客运「形象进度」全空 L/M 标题写在表头下第 4 行,超出 +3 窗口 同上(上界扩展到硬上限 +12 行且不越过数据行)
P03 物流孝感/恩施/随州「形象进度」全空 省标「项目建设阶段、进度情况」是 L/M 合并表头,这些市州只在 L 写标题 新增 desc = stage + 1 兜底(与既有 startcum+2、yearcum+1 兜底风格一致)
P04 「合   计」行被当成项目入库 nt.contains("合计") 不识别内部空格 合计/总计/小计判定统一改为去空白后匹配(解析循环 + 行数统计 + 首数据行探测三处同步)
P05 襄阳 H50/J50 生成 202.9565、定稿 203 源文件即 202.9565,定稿为人工取整 按用户「保留程序算出的数(更完整)」保留 202.9565,不改程序
P06 咸宁 L91 建设阶段:生成(母版)「暂停施工」、定稿「在建」 用户已确认 L 建设阶段不动母版 程序不写 L 列,保持母版值
P07 竹山 M26、咸宁 M85、林区 M116 与定稿不同 定稿留空或写法不同(如「建成投产」vs「建成投产。」) 程序按源文件写入,比定稿更完整,保留

五、遗留问题(需业务/用户确认后处理)

  1. 武汉物流项目清单与定稿不一致:库内 27 行来自《湖北省十堰交通物流基础设施投资统计汇总表(月报)》,定稿用的是《2026 年全省预安排计划进度情况汇总(8月)》(含「航发智慧物流园」等)。需确认是「替换武汉全部物流项目」还是「追加」后再导入。
  2. 天门物流无数据:源文件《8月份物流园中心建设项目(天门).xlsx》H/J/K 为空(库内 0),定稿为 16677.7 / 500,需补源文件。
  3. 荆州/黄石 规划内外拆分差异:库内合计与定稿一致(如荆州 J=46548),仅「规划内/规划外」归类不同(定稿 46548 vs 生成 38320.5),属分类口径问题。
  4. 十堰物流小数差:定稿 29482 / 1671 vs 生成 29188 / 1591(源文件本身如此)。
  5. 中口径排名残差:仅来自 2025 年网约车市州分摊算法(WycSplitCalc 武汉分母处理),未擅自调整,待确认。
  6. C 组(城市客运页结构归一,需用户在 WPS 整列删除 AJ 列后执行)、**D 组**(增速排名措辞)、**B4**(导出前基数体检 + 弹窗 + 《数据缺失清单》页)待排期。

六、结论

本轮 14 条用例全部通过:投资市州单表的「表头取列定位」缺陷(P01–P04)已修复并回归验证,
8 月客运/物流源数据已补齐入库且与源文件小计逐项对齐;
新增的两张投资明细表导出正常(汇总页 0 差异);
中口径排名/明细同比口径修复后与定稿一致;
导入界面隐藏、报表项新增均按确认口径落地。
剩余差异均为**数据源缺口或母版手工口径**,不属于程序缺陷(见第五节)。