# 功能测试报告_投资明细表就绪与预览类型补齐_2026-09-20 ## 一、功能说明 **问题**:报表生成页面中,「客运站投资明细表」「物流站场投资明细」显示 `未知报表类型:investPassengerDetail / investLogisticsDetail`,无法预览/导出。 **根因**:不是数据问题(8 月客运/物流投资月报已在库:客运 39 行、物流 128 行)。 上一步只把这两个类型接进了**导出**链路(`exportSelected` switch、`REPORT_FILE_NAMES`、前端列表、两个导出接口), 漏了**导出前的就绪校验与预览**链路: 1. `checkExportReady()` 的 `switch (t)` 没有这两个 case → 落到 `default`:`rows=0` + `notes.add("未知报表类型:" + t)`,于是 `ready=false`; 2. `isInvestType(t)` 未收录这两个类型 → 预览循环既不归入投资分支,也拿不到月度覆盖与投资摘要。 **处置**: - `checkExportReady()` 新增两个 case:按类别(客运站场 / 物流园区)统计 `investment_monthly` 该期行数, 并校验 `docs/投资/模板/` 下对应母版是否存在(缺母版则提示); - `isInvestType()` 收录两个类型(月度覆盖 + 问题清单纳入投资分支); - `investPreview()` 增加按类别过滤的重载(`category != null` 时只统计该类别项目), 使两张明细表的摘要不再混入另一类别的合计;原无参重载保留、行为不变。 - 未知类型的兜底报错**保留**(未被削弱)。 ## 二、测试环境 | 项 | 值 | | --- | --- | | 日期 | 2026-09-20 10:4x | | 后端 | Spring Boot 8090(重启加载,`Started TrafficAuditApplication` 10:49:51) | | 前端 | Vue 8080(HTTP 200) | | 数据库 | MySQL 127.0.0.1:3308 `traffic_audit` | | 报表期 | 2026-08(mode=month) | | 接口 | `GET /api/report/ready`、`GET /api/report/preview`(`types` 逗号分隔) | ## 三、用例表 | 编号 | 用例 | 输入 | 预期 | 实际 | 结论 | | --- | --- | --- | --- | --- | --- | | T01 | 就绪校验(正向) | `types=investPassengerDetail,investLogisticsDetail` | 不再出现「未知报表类型」,ready=true | 两项均 `ready=true`、`note` 为空;`rows` = 39(客运)/ 128(物流) | ✅ 通过 | | T02 | 预览(正向) | 同上,调 `/api/report/preview` | 有月度覆盖、摘要与问题清单 | 覆盖 `[8]`、`problems` 为空;摘要:客运「39 项目 / 本月 2048.1 / 自年初 38648.16 / 自开始 550929.76 万元」,物流「128 项目 / 本月 90185.9 / 自年初 704107.7 / 自开始 2656354.31 万元」 | ✅ 通过 | | T03 | 摘要与库内逐项对齐(入库抽查) | 上述摘要 vs SQL 聚合 | 完全一致 | SQL:客运 `2048.1 / 38648.16 / 550929.76`、物流 `90185.9 / 704107.7 / 2656354.31`,**逐项一致** | ✅ 通过 | | T04 | 分类别过滤(正向) | 两张表明细摘要 | 不应混入另一类别数据 | 客运 39 行、物流 128 行,恰好等于 39+128=167(`investPlan` 等全类别类型仍返回 167),说明明细表已按类别收敛 | ✅ 通过 | | T05 | 导出回归(正向) | 调 `/api/report/export/investPassengerDetail`、`.../investLogisticsDetail` | 仍能正常出表 | 生成 `gen_pax_inv.xlsx`(29462 字节)、`gen_log_inv.xls`(134144 字节);此前已验证客运汇总页与定稿 0 差异 | ✅ 通过 | | T06 | 原有投资类型回归(正向) | `types=investPlan,investBillion,investCounty,investFiveYearLogistics` | 行为不变 | 四项均 `ready=true`、`rows=167`、无 note | ✅ 通过 | | T07 | 未知类型仍被拦截(负向) | `types=foo` | 仍提示未知类型且不就绪 | `ready=false`、`rows=0`、`note=未知报表类型:foo` | ✅ 通过 | | T08 | 缺母版提示(负向·设计覆盖) | 移走母版 | 提示「docs/投资/模板 下缺少《…》」 | 未实测(未临时移动用户母版文件);代码路径与 `summaryWorkbook` 缺母版判定同构 | ⚠ 未执行 | ## 四、发现的问题与处置 | 编号 | 问题 | 根因 | 处置 | | --- | --- | --- | --- | | P01 | 两张投资明细表在报表生成页显示「未知报表类型:invest*Detail」 | 只接了导出链路,漏了就绪校验 `switch` 与 `isInvestType` | 补齐 `checkExportReady` 两个 case + `isInvestType` 收录,见上 | | P02 | 明细表摘要若沿用原 `investPreview` 会混入另一类别 | 原方法只按报表期聚合全部投资月报 | 新增带 `category` 的重载,按类别过滤项目 id;原重载保留 | | P03 | 「合   计」行入库会虚增合计(前一晚修复的连带影响) | 源表合计行被当成项目 | 已修复;本次核对:客运本月完成由含合计行的 2130.1 收敛为 **2048.1**,与 SQL 逐项一致,无遗留含「计」的项目行 | ## 五、结论 7 条用例通过、1 条(缺母版提示)未实测: 报表生成页两张投资明细表的就绪/预览已恢复正常,摘要按类别过滤且与库内 SQL 逐项一致, 导出与其它投资报表类型均无回归,未知类型兜底拦截仍然有效。 此前「未知报表类型」纯属**代码漏配**,与 8 月投资月报是否导入无关 —— 数据一直在库(客运 39 / 物流 128)。