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

功能测试报告_投资市州月报多sheet识别与序号空格_2026-09-02

功能说明

修复「投资(物流园区/客运站场)」市州月报导入的 2 个问题:
1. 多 sheet 选表错误:神农架林区物流投资月报2026.08.xlsx 共 46 个 sheet(前 24 个为历史"潜江传化1月~2021.8"遗留 sheet,后 22 个为神农架真实月报 2024.10…2026.8),旧逻辑只看"8月"字样,误选历史 sheet「潜江传化8月」,读出潜江项目归属神农架 → 被市州一致性校验拒绝(导入失败)。
2. 序号为空的项目行被跳过:真数据 sheet 2026.8 中「神农架物流园」项目行序号列为空,旧解析把空序号行一律当市州小节行跳过,导致真实数据从未入库(库里只有客运「神农架枢纽站」,无「神农架物流园」)。

修复方案(DataImportService.java)

  • investSheetMatchesPeriod:支持点号报表期(2026.8/2026.08 → 归一化为连字符再匹配)。
  • 选 sheet 加分:匹配报表期且 sheet 名含年份前缀(2026)时额外 +100000 分,优先选当期真实报表,历史纯月份名 sheet 无此加分。
  • 解析循环:空序号行若非市州名、且 isLikelyInvestProjectName 为真 → 按项目行处理;非空非数字序号 → 跳过。
  • 新增 helper isLikelyInvestProjectName:长度>4、非市州名、非备注/说明/注:/填表/审核/统计/负责开头。
  • countInvestRows 同步支持空序号项目行计数。

测试环境

  • 后端:traffic-audit-server(Spring Boot,8090),代码重新编译后重启(11:34 就绪)。
  • 数据库:MySQL 3308 traffic_audit。
  • 接口:POST /api/import/batch(type=investmentLogistics,period=2026-08)。
  • 测试文件:D:\桌面\测试数据\八月源数据\物流\神农架林区物流投资月报2026.08.xlsx、潜江2026.08.xlsx。

用例表

# 用例 输入 预期 实际 结论
1 正向:神农架+潜江两文件批量导入 神农架林区物流投资月报2026.08.xlsx + 潜江2026.08.xlsx total=2, success=2, fail=0 total=2, success=2, fail=0,神农架林区 1 条、潜江市 1 条 ✅ 通过
2 入库验证:神农架物流园项目 — investment_project 存在「神农架物流园」,city=神农架林区 id=228,total_investment=7440.35,city=神农架林区,builder=国投集团交投公司 ✅ 通过
3 入库验证:神农架物流园 8 月月度数据 — investment_monthly 2026-08 有记录 year_plan=31,year_cum=26.1,month_done=0,start_cum=7535.45 ✅ 通过
4 入库验证:潜江文件不受影响 — 潜江传化公路港项目 2026-08 正常 year_plan=12000,year_cum=5173,month_done=1440 ✅ 通过
5 反向对照:旧代码该场景 同一批文件(修复前 11:32 记录) — batch#170:success=1, fail=1,报「潜江传化公路港项目」市州错位 ✅ 修复生效

发现的问题与处置

  • 无新问题。历史遗留说明:import_batch #170(11:32:19)与 #168(11:00:56)为修复前旧逻辑的失败记录,属测试对照,不影响数据。
  • 修复前库里确实缺失神农架物流园 6/7/8 月数据(真实数据一直漏导),本次导入后 8 月已补齐;6/7 月如需补导,需用同逻辑重导历史文件。

结论

全部用例通过。多 sheet 选表优先当期带年份 sheet、空序号项目行可正确解析、市州一致性校验不再误伤神农架文件;潜江文件解析不受影响。