# 功能测试报告:数据导入页“导入进度·清空”按钮(按报表期清空数据库) 2026-09-10 ## 功能说明 - 数据导入页右侧“导入进度”侧栏标题旁新增红色“清空”按钮(与“刷新”并列),随侧栏展开可见。 - 作用:一键清空当前所选报表期在数据库中的全部已导入业务数据,并同步删除该报表期的审核结果、审核通过标记(audit_run)与导入批次记录(import_batch),用于整月重新导入;投资项目主档(investment_project)保留不动。 - 交互:点击 → 二次确认弹窗(标题含报表期,提示不可撤销)→ 确认后调用 `POST /api/import/clear?period=yyyy-MM`;清空过程中按钮进入 loading 并禁用;未选报表期或正在导入时按钮禁用;成功后提示“已清空 xxx 报表期的数据,可以重新导入”并自动刷新导入进度。 ## 涉及改动 - 后端 `DataImportService.clearPeriod(period)`:`@Transactional`,先校验报表期格式,再按报表期删除 h2032/运政车辆/轨迹里程/规上规下/货运量周转量/旅客月报/个体/旅客运政/能耗/能耗运政/投资月度/投资系统/城市公交/巡游出租/出租车运政/网约车总数/网约车订单各表数据,并删除该期 audit_result、audit_run、import_batch;返回各表删除行数统计。 - 后端 `DataImportController` 新增 `POST /api/import/clear`(参数 period)。 - 前端 `DataImport.vue`:新增 `clearing` 状态、`clearPeriodData()` 方法与侧栏按钮/样式。 ## 测试环境 - 后端:traffic-audit-server 8090(含本次改动,`start-dev.ps1` 启动成功,backend.log 出现 `Started TrafficAuditApplication`)。 - 前端:traffic-audit-web 8080 dev(Compiled successfully),浏览器为 Codex 应用内浏览器,`admin` 登录。 - 数据库:本机 MySQL `localhost:3308/traffic_audit`,用 mysql CLI 直查核对。 - 测试数据:`docs/货运需导入的数据/货运/2026年1-7月报/道路货物运输月度生产情况(2026年6月).xls`(636 行),导入到一次性测试期 `2099-01`,全程不触碰任何真实月份。 ## 用例表 | # | 用例 | 输入 | 预期 | 实际 | 结论 | |---|---|---|---|---|---| | 1 | 基线检查 | 查询 2099-01 的批次与审核结果 | 均为空 | 批次 0 条、审核结果 0 条 | 通过 | | 2 | 正向-导入 | 上传 6 月货运 xls,period=2099-01 | 成功且行数 636 | 返回“H2032月报导入成功,共 636 条记录”,批次 1 条 | 通过 | | 3 | 正向-审核 | `POST /audit/execute?period=2099-01&reportType=H2032` | 生成审核结果与已审核标记 | 生成 audit_result 31 行、audit_run 1 行 | 通过 | | 4 | 正向-清空(接口) | `POST /import/clear?period=2099-01` | 返回删除统计,库内该期清空 | 返回 dataRows=636、auditRows=31、auditRunRows=1、batchRows=1;DB 直查 h2032/audit_result/audit_run/import_batch 均为 0 | 通过 | | 5 | 正向-清空后重导 | 再次上传同一文件 period=2099-01 | 可正常重新导入 | 成功 636 条;DB h2032=636、import_batch=1 | 通过 | | 6 | 负向-非法报表期 | `period=abc` | 拒绝并提示格式 | code=500,“清空失败: 报表期格式不正确,应为 yyyy-MM” | 通过 | | 7 | 边界-空报表期 | `period=2098-12`(无数据) | 成功且各项为 0 | dataRows/auditRows/auditRunRows/batchRows 均为 0 | 通过 | | 8 | UI-按钮存在 | 打开数据导入页,选 2099-01,展开“导入进度” | 标题旁出现“刷新/清空”,进度显示 H203-2 已导入 636 行 | 与预期一致(可访问性树读到“清空”按钮与“已导入 636 行”) | 通过 | | 9 | UI-二次确认 | 点“清空” | 弹出确认框,标题含报表期 | 弹窗标题“清空 2099-01 数据”,正文提示不可撤销,按钮“取消/确认清空” | 通过 | | 10 | UI-确认清空 | 点“确认清空” | 提示成功、进度全部回“未导入”、库内清空 | 提示“已清空 2099-01 报表期的数据,可以重新导入”;进度全部未导入;DB 直查四表均为 0 | 通过 | | 11 | 回归-真实月份不受影响 | 清空前后对比批次分布与库内行数 | 真实月份无变化 | 批次分布与改动前完全一致(2025 各月 1 条、2026-07 45 条、2026-08 48 条、2026-09 7 条);h2032:2025-07=664、2026-07=636、2026-09=636 | 通过 | ## 发现的问题与处置 - 未发现功能缺陷。 - 说明:一次清空会删除该报表期“全部类型”的业务数据及审核结果/已审核标记,弹窗已明确提示不可撤销;若只想清单一类型,目前需整月清空后重导,可作为后续增强(按类型清空)。 - 环境备注:本机库 `admin` 密码为 `123456`(见 docs/交接文档-20260831.md,8/31 实测),`admin123` 在本机不匹配。 ## 结论 - 通过。清空按钮在界面可用、确认弹窗语义清晰,接口按报表期完整清除业务数据、审核结果、审核标记与导入批次,清空后可立即整月重导;对真实月份数据零影响。 - 待用户实际浏览器验收:在自己工作机上点一次“清空”(建议先确认所选报表期与备份)确认弹窗文案与预期一致。