# 功能测试报告_重要节假日专项统计_2026-10-02 ## 一、功能说明 新增“专项统计-重要节假日”模块,覆盖以下能力: 1. 系统配置菜单新增“节假日管理”和“客运系数管理”,仅 admin 可维护。 2. 节假日管理字段:年份、节假日分类(春节/五一/十一)、日期、第几日。 3. 客运系数管理字段:年份、日期分类(节假日/非节假日)、客运系数。 4. 专项统计-节假日菜单支持按年份、节假日分类查看客流与车流综合数据。 5. 支持导入《2026年十一数据.xlsx》模板,按所选年份读取当年列(2026 年为客流 C 列、普通国省道 D 列),按“第几日”写入当年客流和车流;2024/2025 历史数据仅首次初始化,不要求日常重复导入。 6. 导入时先检查“比本次最新导入日更早”的历史日期是否被改动;如有变化,先不写库并列出差异,由用户选择是否允许覆盖。 7. 支持导出 Excel,模板为《2026年十一数据.xlsx》。 8. 支持下载《湖北省国庆假期综合运输客流快报(10月X日).docx》,默认日期为系统日期前一天,也允许用户自选日期;环比、同比按“增长/下降/持平”输出。 9. 应用首次启动时,从模板工作簿初始化 2024/2025 年十一客流、车流,以及 2024-2026 年客运系数。 ## 二、测试环境 | 项目 | 内容 | |------|------| | 工作目录 | `D:\Codex\MyProject\trafficAudit` | | 后端 | Spring Boot,`http://localhost:8090` | | 前端 | Vue 2 + Element UI,`http://localhost:8080` | | 数据库 | MySQL `127.0.0.1:3305/traffic_audit` | | 源工作簿 | `docs/专项统计/重要节假日/2026年十一数据.xlsx` | | 快报模板 | `docs/专项统计/重要节假日/湖北省国庆假期综合运输客流快报模板.docx` | | 编译 | `mvn -q -DskipTests compile -f traffic-audit-server/pom.xml` 通过 | | 前端构建 | `npm run build` 通过,仅有原项目 bundle 体积 warning | ## 三、用例表 | 编号 | 类型 | 输入/操作 | 预期 | 实际 | 结论 | |------|------|-----------|------|------|------| | T01 | 初始化 | 启动后端 | 自动建/初始化 4 张节假日表 | 表存在,初始化完成 | 通过 | | T02 | 初始化 | 查询节假日配置 | 2024/2026 年 7 天,2025 年 8 天 | 2024 年 7 天,2025 年 8 天,2026 年 7 天 | 通过 | | T03 | 初始化 | 查询客流、车流 | 2024/2025 数据从源工作簿读取 | 客流 28/32 行;车流 14/16 行 | 通过 | | T04 | 初始化 | 查询客运系数 | 2024-2026 年系数来自源工作簿 | 每年 HOLIDAY/NON_HOLIDAY 均 2.4,与源表一致 | 通过 | | T05 | 入库抽查 | 源工作簿 vs 数据库逐项比对 | 无差异 | 90 个单元格比对,差异 0 | 通过 | | T06 | 权限 | 未登录访问节假日接口 | 拦截 | HTTP 401,提示未登录 | 通过 | | T07 | 权限 | 非 admin 保存节假日 | 拒绝 | code=403,提示仅 admin 可管理 | 通过 | | T08 | 权限 | 非 admin 保存客运系数 | 拒绝 | code=403,提示仅 admin 可管理 | 通过 | | T09 | 正向 | admin 新增/编辑/删除节假日 2030 测试记录 | 成功且无脏数据 | 新增、编辑成功;重复配置返回 400;删除成功 | 通过 | | T10 | 正向 | admin 新增/编辑/删除客运系数 2030 测试记录 | 成功且无脏数据 | 新增、编辑成功;非法系数返回 400;删除成功 | 通过 | | T11 | 正向 | 导入源工作簿 2025 年十一数据 | 覆盖写入 | 客流 32 条、车流 16 条,失败 0 | 通过 | | T12 | 正向 | 导入临时 2026 测试工作簿(同值验证持平) | 写入并生成快报 | 客流 8 条、车流 4 条,失败 0;测试数据已清理 | 通过 | | T13 | 负向 | 选择未配置年份导入 | 提示先维护节假日 | code=400,提示“请先在系统配置中维护节假日” | 通过 | | T14 | 负向 | 导入非 Excel 文件 | 解析失败并提示 | code=400,提示 unsupported file type | 通过 | | T15 | 负向 | 不传文件导入 | 业务提示,不返回 500 | code=400,提示“请选择要导入的 Excel 文件” | 通过 | | T16 | 导出 | 导出 2025 年十一 Excel | 带库内数据,公式保留 | 文件可被 openpyxl 打开,2025 客流/车流数据正确 | 通过 | | T17 | 快报 | 下载 2025-10-01 快报 | 首日正文不输出“环比……”;表格环比列为“—”,正文/表格完整 | 正文为“10月1日(假期第1天)……万人次,比2025年同期增长6.8%。”,无“环比”短语;表格环比列为“—” | 通过 | | T18 | 快报 | 下载 2025-10-02 快报 | 环比为下降并输出绝对值 | 输出“环比下降11.5%” | 通过 | | T19 | 快报 | 下载 2025-10-03 快报 | 环比为正并输出绝对值 | 输出“环比增长2.4%” | 通过 | | T20 | 快报 | 临时构造 2026 第 1/2 日相同数据 | 环比为 0 时输出“持平” | 输出“环比持平” | 通过 | | T21 | 并发/稳定 | 重启后连续生成快报 | 不串文档 | 两份不同日期快报内容正确 | 通过 | | T22 | 前端 | admin 打开“专项统计-节假日” | 页面渲染、数据表显示 | 标题、菜单、表格正常 | 通过 | | T23 | 前端 | admin 打开“系统配置” | 两个 Tab 正常 | 节假日管理、客运系数管理正常 | 通过 | | T24 | 前端 | 非 admin 访问系统配置 | 菜单隐藏且直访被重定向 | 菜单不可见,直访回工作台 | 通过 | | T25 | 前端 | 点击“下载模板” | HTTP 200,文件可下载 | 浏览器实际请求返回 200 | 通过 | | T26 | 控制台 | 页面烟测收集 JS 错误 | 无错误 | 无 pageerror/console error | 通过 | | T27 | 历史检查 | 已有 2026 第1日数据后,导入第1日被修改且第2日正常的文件(不确认) | 不写库,返回历史变化 | `confirmationRequired=true`,列出 6 条差异;库内第1日仍为原值 | 通过 | | T28 | 历史检查 | 同上文件,用户确认允许导入 | 覆盖历史日数据 | 返回成功 12 条;库内第1日由 100/200/300 更新为 110/210/310 | 通过 | | T29 | 前端确认 | 页面导入含历史变化的文件 | 弹窗显示差异和“允许导入/不允许” | 弹窗出现且包含原值/导入值;点击允许后导入成功 | 通过 | | T30 | 默认日期 | 打开快报日期选择 | 默认系统日期前一天,可手工修改 | 页面默认取 2026-10-01,日期控件可选择 | 通过 | | T31 | 菜单顺序 | 查看左侧菜单 | 专项统计位于报表生成之后 | 顺序为 报表生成 -> 专项统计 -> 规则管理 -> 用户管理 -> 系统配置 | 通过 | | T32 | 精度 | Excel 客运系数 2.4 入库后查询 | 不出现 2.3999999999999995 | 库内 2024/2025/2026 年系数均为 2.4,接口返回 coefficient=2.4 | 通过 | | T33 | 精度 | 系统配置-客运系数管理列表 | 显示 2.4 | 浏览器实测两行均显示 2.4 | 通过 | | T34 | 精度 | 节假日统计页客运系数列 | 显示 2.4 | overview 接口与页面均显示 2.4 | 通过 | | T35 | 精度 | 检查节假日数值列类型 | decimal(30,15) | passenger_count/vehicle_count/coefficient/comparison_base 均为 decimal(30,15) | 通过 | | T36 | 导入口径 | 导入含 2024/2025 历史列与客运系数列的 2026 工作簿 | 只读 2026 当年列,不写 2024/2025,不读系数 | 写入 12 条(客流 8 + 车流 4),2024/2025 列与系数列未入库 | 通过 | | T37 | 历史检查回归 | 已有 2026 第1/2 日数据后,导入第1日被改动的文件(不确认) | 不写库并列出差异 | confirmationRequired=true,列出 6 条差异,库内第1日仍为 100/100/100/100/200/300 | 通过 | | T38 | 历史检查回归 | 同上文件,用户确认允许导入 | 覆盖历史日数据 | 返回成功 12 条,库内第1日更新为 110/110/110/110/210/310,第2日不变 | 通过 | | T39 | 页面表头 | 节假日数据一览表头加单位 | 列头带单位 | 实测:铁路/民航/道路/水路(万人次),高速车流/国省道车流(万辆次),非营业性人员流动量/总人员流动量(万人次),客运系数无单位 | 通过 | | T40 | 配置回归 | admin 删除 2026-10-08 后重启后端 | 删除结果保持,不再自动补回 | 重启后库内、接口和页面均为 2026-10-01 至 10-07 共 7 天 | 通过 | | T41 | 环比基期导入 | 2026 年普通国省道 C 列填 320、D 列填 360 | C 列作为环比基期保存,D 列为当日车流 | 库内 comparison_base=320,vehicle_count=360;接口均返回 | 通过 | | T42 | 环比基期导出 | 导出已导入基期的 2026 年数据 | 普通国省道 C 列回填基期,D 列回填当日车流 | 导出文件 C4=320、D4=360 | 通过 | | T43 | 国省道车流环比 | 2026-10-02 国省道当日360、基期320 | 仅国省道直接环比使用基期 | 国省道车流环比为12.50%;快报总人员流动量仍为17.00%,不受基期影响 | 通过 | | T44 | 映射导出 | 有基期时导出普通国省道 E 列公式 | E 使用当日与环比基期计算 | 导出 E4 公式为 `=(D4-C4)/C4` | 通过 | | T45 | 历史基期变更 | 已有 2026 第1日基期后,导入新的第1日基期值 | 不确认时零写入并列出差异 | confirmationRequired=true,提示原值300/导入值310,库内仍为300 | 通过 | | T46 | 历史年份隔离 | 导出 2024/2025 年数据 | 历史年份不使用环比基期 | 两份导出文件普通国省道 C3:C10 均为空 | 通过 | | T47 | 快报首日口径 | 下载 2025-10-01 快报并检查正文 | 第1天不生成“环比增长/下降/持平”短语 | 正文为“10月1日(假期第1天),全省全社会跨区域人员流动量1714.41万人次,比2025年同期增长6.8%。”;第二天仍输出“环比下降11.5%” | 通过 | | T48 | 快报百分比精度 | 下载 2025-10-01/02 快报检查正文和表格 | 同比/环比百分比保留1位小数,人数/车流保留2位小数 | 6.79%显示为6.8%,11.46%显示为11.5%;人数1714.41、1518.02仍为2位小数 | 通过 | ## 四、发现的问题与处置 1. 模板下载整段路径使用 `encodeURIComponent`,把 `/` 编码为 `%2F`,Tomcat 返回 400。 - 处置:前端改为按路径段编码,保留斜杠,复测返回 200。 2. 导入原先没有历史数据变更确认,可能静默覆盖已发布历史日。 - 处置:新增两阶段导入;未确认时零写入,确认后才允许覆盖历史日。 3. 快报生成服务原先把当前 DOM 文档放在实例字段,存在并发串扰风险。 - 处置:改为 `ThreadLocal` 保存当前文档,并在请求结束时清理;重启后复测连续生成通过。 4. 导入接口不传文件时由框架抛出 500。 5. 节假日初始化每次启动都会补齐缺失的第 N 日,导致 admin 删除 2026-10-08 后,重启又被自动插回。 - 处置:文件参数改为可选,统一返回业务 400 提示。 - 处置:`seedNationalDayCalendar()` 改为仅在 `holiday_calendar` 整表为空时执行首次初始化;非空配置完全由 admin 维护。复测重启后 2026 年十一保持 7 天。 ## 五、数据清理 - 测试中产生的 2026 客流/车流临时数据已删除。 - 测试产生的 `import_batch` 节假日导入记录已删除。 - 2024/2025 初始化数据和 2024-2026 客运系数保留,符合需求。 ## 六、结论 重要节假日专项统计模块的正向流程、权限控制、数据初始化、导入导出、快报生成和前端页面烟测均通过;源工作簿 90 个数据单元格入库抽查无差异。发现的问题已修复并完成回归,当前后端 8090、前端 8080 正常运行。 ## 七、补充回归(2026-10-02,Excel 浮点精度与菜单顺序) 背景:Excel 内部按 IEEE 754 双精度浮点存储数值(有效 15 位),库内客运系数原为 2.3999999999999995,页面显示异常。参考 `docs/Excel浮点数存储.txt` 全面整改。 修改内容: 1. 新增数值工具 `HolidayNumberUtils`:Excel 单元格数值统一用 `NumberToTextConverter.toText(double)` 转文本再入 `BigDecimal`,计算使用 `MathContext(15, HALF_UP)`,与 Excel 15 位有效数字保持一致。 2. 节假日模块实体、服务、导入导出、快报统一由 `Double` 改为 `BigDecimal`。 3. 三张表数值列改为 `DECIMAL(30,15)`:`holiday_passenger_flow.passenger_count`、`holiday_vehicle_flow.vehicle_count`、`holiday_passenger_coefficient.coefficient`;迁移脚本 `docs/sql_holiday_decimal_migration.sql`。 4. 库内 6 条客运系数(2024-2026 年、节假日/非节假日)由 2.3999999999999995 校正为 2.4。 5. “专项统计”菜单移动到“报表生成”之后;前端客运系数展示统一去除浮点尾差。 验证结果: - `mvn -q -DskipTests compile` 通过;`npm run build` 通过(仅原有 bundle 体积警告)。 - 菜单顺序实测:报表生成 -> 专项统计 -> 规则管理 -> 用户管理 -> 系统配置。 - 系统配置-客运系数管理列表浏览器实测显示 2.4;接口 `coefficient=2.4`。 - 三张表数值列均为 `decimal(30,15)`。 - 历史变更两阶段导入回归:不确认时零写入并列出 6 条差异,确认后第1日由 100/100/100/100/200/300 覆盖为 110/110/110/110/210/310,第2日不变。 - 导入口径复核:仅写入所选年份当年列(本用例 12 条),2024/2025 历史列与客运系数列不读不入库。 - 测试产生的 2026 客流/车流及 `import_batch` 记录已清理;2024/2025 历史数据与 2024-2026 客运系数保留。 - 页面表头补单位(浏览器实测):铁路/民航/道路/水路(万人次)、高速车流/国省道车流(万辆次)、非营业性人员流动量/总人员流动量(万人次);客运系数保留无单位。 ## 八、补充回归(2026-10-02,节假日删除后重启复活) 现象:admin 已在系统配置中删除 2026-10-08,但后端重启后该行再次出现。 根因:`HolidayReferenceDataInitializer` 在每次应用启动时调用 `seedNationalDayCalendar()`,原逻辑按固定天数遍历并补齐所有缺失的第 N 日,因此把 admin 已删除的日期重新插入。 修复与验证: - `HolidayWorkbookService.seedNationalDayCalendar()` 增加非空保护:节假日表只要已有任一配置,就不再进行自动补种。 - 后端编译通过,重启后数据库 2026 年十一为 `2026-10-01` 至 `2026-10-07` 共 7 天。 - 接口验证:节假日配置 7 条,统计一览 7 行,最后一日 `dayIndex=7`、`date=2026-10-07`。 ## 九、补充回归(2026-10-02,普通国省道环比基期) 背景:普通国省道 `C` 列为“环比基期”。当普通国省道流量趋势与高速公路不一致时,以高速为准,手工填写基期,环比按 `当日 / 环比基期 - 1`;未填写时仍按 `当日 / 前一日 - 1`。 实现口径: - `holiday_vehicle_flow` 新增可空字段 `comparison_base DECIMAL(30,15)`,迁移脚本 `docs/sql_holiday_comparison_base_migration.sql`。 - 仅 2026 年启用:2024、2025 历史数据不导入、不导出、不参与基期计算。 - 2026 年普通国省道 C 列导入为 `comparison_base`,D 列导入为 `vehicle_count`;导出时 C/D 列分别回填。 - 基期只影响普通国省道车流量自身的环比:有基期时 `当日 / 基期 - 1`,无基期时 `当日 / 前一日 - 1`。 - 折算人员流动量、公路人员流动量、非营业性人员流动量、全社会人员流动量和 Word 快报继续按 Excel 原有公式计算,不受基期影响。 - 导出时如某日填写基期,普通国省道 E 列公式写为 `=(D-C)/C`。 - 基期改变同样纳入历史日期变更检查,用户确认前不写库。 - 快报第1天没有前一日可比基数,正文不输出“环比增长/下降/持平”短语;表格当日环比列为“—”。第2天起仍按实际前一日计算并输出环比。 - 快报中的同比/环比百分比统一保留1位小数(四舍五入);人次、车流等业务数值仍保留2位小数。