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

功能测试报告_重要节假日专项统计_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。
  1. 导入原先没有历史数据变更确认,可能静默覆盖已发布历史日。
  • 处置:新增两阶段导入;未确认时零写入,确认后才允许覆盖历史日。
  1. 快报生成服务原先把当前 DOM 文档放在实例字段,存在并发串扰风险。
  • 处置:改为 ThreadLocal 保存当前文档,并在请求结束时清理;重启后复测连续生成通过。
  1. 导入接口不传文件时由框架抛出 500。
  2. 节假日初始化每次启动都会补齐缺失的第 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位小数。