对数据导入服务(DataImportService)做“导入前置校验 + 解析健壮性”增强,避免像能耗事故那样“列错位静默导入”:
- 运政车辆、轨迹里程:由“固定列位”改为**表头名称映射**(与 H2032 货运月报一致)——列顺序变化也能导入,缺列/列名不符明确报错。
- 城市公交 U203、巡游出租 U402、投资系统导出:新增**表头列位校验**(requireHeaderLayout),列位错位直接拒绝并提示“第 X 列应为…”。
- 货运量周转量:新增表头校验(首行须为「货运量(万吨)/1月…」布局)。
- 规上规下拆分:新增 sheet 布局校验(第 2 行「市州/规上企业运输量」+ 第 3 行「周转量/货运量」子表头)。
traffic_audit(localhost:3308)。curl /api/import/<type> 直接调用,测试报表期 2026-HT / 2026-06(测后已清理)。| # | 类型 | 用例 | 预期 | 实际 | 结论 |
|---|---|---|---|---|---|
| 1 | 运政车辆 | 模板文件导入 | 成功导入 | 成功 2 条 | ✅ |
| 2 | 运政车辆 | 列顺序打乱(列名不变) | 仍能导入且字段对齐 | 成功 2 条,入库与模板逐项一致 | ✅ |
| 3 | 运政车辆 | 缺「挂车总吨位(吨)」列 | 明确报错 | 表头缺少必需列【挂车总吨位(吨)】 | ✅ |
| 4 | 轨迹里程 | 模板文件导入 | 成功导入 | 成功 2 条 | ✅ |
| 5 | 轨迹里程 | 列顺序打乱 | 仍能导入且字段对齐 | 成功 2 条 | ✅ |
| 6 | 轨迹里程 | 列名改「月度里程(公里)」 | 明确报错 | 表头缺少必需列【月度总里程(公里)】 | ✅ |
| 7 | 城市公交 | 表头第 6 列插「错位列」 | 拒绝并提示列位 | “第 6 列应为「公共汽电车_运营车数」” | ✅ |
| 8 | 巡游出租 | 表头第 5 列插「错位列」 | 拒绝并提示列位 | “第 5 列应为「载客车次总数」” | ✅ |
| 9 | 投资系统导出 | 第 1 列「行号」改「序号」 | 拒绝并提示列位 | “第 1 列应为「行号」” | ✅ |
| 10 | 投资系统导出 | 正确表头 | 成功 | 成功 0 条 | ✅ |
| 11 | 货运量周转量 | 模板文件导入 | 成功导入 | 成功 18 条 | ✅ |
| 12 | 货运量周转量 | 错类型文件(运政车辆) | 拒绝 | “表头应为「货运量(万吨)/1月…」布局” | ✅ |
| 13 | 规上规下 | 模板文件导入 | 成功导入 | 成功 36 条 | ✅ |
| 14 | 规上规下 | sheet 名含“当月”但布局错误 | 拒绝 | “sheet「测试当月」未找到「市州/规上…」表头” | ✅ |
| 15 | 公路旅客运政车辆数 | 模板导入(上午体检) | 成功 | 767 条 0 失败 | ✅ |
| 16 | 个体客运量 | 表头识别(模板仅表头) | 0 条无报错 | 成功 0 条 | ✅ |
| 17 | 出租车运政 | 表头识别(模板仅表头) | 0 条无报错 | 成功 0 条 | ✅ |