smart-clean-test-cases.md 6.3 KB

智能清洗端到端测试用例(smart-clean-test-cases)

测试方式:浏览器实测(ZCode in-app browser),逐条执行、记录实际结果;发现 bug 即修复并重跑该条 + 相关回归条目。 测试账号:admin / admin123;前端 http://localhost:3100;后端 http://localhost:8980(`/js/a`)。 每次重启后端后必须:案件管理 → 打开案件(数据测试)→ 再继续。

测试文件:

  • 文件 A:周海--车辆登记信息.xls(5.6KB,sheet「机动车信息」模板匹配失败 → AI 判定 → 待人工)
  • 文件 B:周海--通信18905810269.xls(92KB,通信记录可匹配模板 → 系统既有清洗)
# 场景 步骤 预期 结果
① 上传解析 A 上传页注入文件 A 解析树出现、sheet「机动车信息」模板匹配失败、「智能」可用 ✅ / N/A
② 上传解析 B 上传页注入文件 B 解析树出现、sheet 匹配模板成功、「智能」可用 ✅ / N/A
③ 混合上传 同批注入 A+B 树中两文件、状态各自正确 ✅ / N/A
④ MD5 去重回归 再次上传文件 A(不删记录) 后端跳过解析返回 null(原行为),页面无新树 ✅ / N/A
⑤ AI 判定推进 选 A 点「智能」→ 进度页 AI 卡判定 0/1→1/1,阶段推进 ✅ / N/A
⑥ 待人工结论 判定完成 待人工 1、失败 0、阶段 DONE ✅ / N/A
⑦ 处理日志 查看处理日志 「融合清洗已启动」「开始处理:文件 A」两条 ✅ / N/A
⑧ AI 卡列表布局 待人工 ≥4 条时查看 卡内 ≤3 条 + 「查看全部 N」抽屉;抽屉含原因说明文案 ✅ / N/A
⑨ 判定详情 抽屉点「详情」 弹窗:原因/置信度五维/抽样统计/逐列校验/预览样本/模型草稿 ✅ / N/A
⑩ AI 重新判定 抽屉点「AI 重判」 受理成功提示;约几十秒后清单刷新出新结论 ✅ / N/A
⑪ 既有路径推进 选 B 点「智能」 无 AI 表 → doClean 推进 → 100% → 完成态 ✅ / N/A
⑫ 既有入库验证 完成后查数据 通信记录表有数据 ✅ / N/A
⑬ 混合批次 A+B 点「智能」 B 交既有清洗一次 doClean、A 待人工、批次 DONE ✅ / N/A
⑭ 混合互不影响 验证数据 B 已入库、A 待人工,互不影响 ✅ / N/A
⑮ 清洗页有数据(核心 bug) 进度页点「去人工确认」 清洗页树出现、sheet 被选中、预览数据加载 ✅ / N/A
⑯ 清洗页清单可见 看左栏 「待人工确认」面板含该表、原因、置信度 ✅ / N/A
⑰ 清单「处理」定位 点「处理」 树定位到目标 sheet、选中、预览加载 ✅ / N/A
⑱ 仅洗当前表 配模板规则后「导入数据」 头部出现「仅清洗当前表」徽标;提交树只含该 sheet;清洗完成 ✅ / N/A
⑲ 清单消项不丢 清洗后回清洗页 该项已消项(SUPERSEDED),其余待人工仍在 ✅ / N/A
⑳ 清洗页内详情 清单点「详情」 详情弹窗正常 ✅ / N/A
㉑ 清洗页内重判 清单点「AI 重判」 受理成功、清单轮询刷新 ✅ / N/A
㉒ 上传页行级手动清洗回归 上传页行级按钮 清洗页正常(原 sessionStorage 路径) ✅ / N/A
㉓ 上传页整页手动清洗回归 上传页「手动清洗」按钮 正常跳转清洗页 ✅ / N/A
㉔ importList 重新清洗回归 导入管理「重新清洗」 reClean=1&fileId 路径正常 ✅ / N/A
㉕ 超时出口改手动清洗 融合页「改为手动清洗」 带 batchId → 清洗页按批次重建树 ✅ / N/A
㉖ Skip 入明细 构造 Skip(如删源文件后清洗) 清单出现 Skip 项、计数与条数一致 ✅ / N/A
㉗ jobs 案件隔离 切换案件调 /aiClean/jobs 只返回当前案件的 job ✅ / N/A
㉘ 重跑不重判待人工 有待人工时再点「智能」 日志显示沿用待人工、无新的模型调用 ✅ / N/A
㉙ 重判命中既有模板 重判后结论变化 ExistingHit → dispatchExisting 走 doClean ✅ / N/A
㉚ SSE 断连/刷新恢复 进度页刷新 restoreImportProgress 恢复进度继续 ✅ / N/A

执行记录

测试共执行 3 轮混合批次 + 多轮单项验证(浏览器实测)。后因需求调整(移除人工确认逻辑),与待人工闭环相关的条目(⑧⑨⑩⑮-㉑㉖㉙ 及部分回归)按最终形态重新验证或标记 N/A。

已修复并验证的问题

  1. AI 判定线程丢案件上下文(AiSmartCleanService):CompletableFuture 派发的判定线程无 ScopedValue 绑定 → 全部判定 400 失败。修复:判定任务包 CaseContextHolder.runWith。✅
  2. 模型调用总时长无上限(LlmService):Reactor timeout 是片间超时,本地模型慢速流式输出 35 分钟不触发。修复:blockLast 总时长兜底(匹配调用 180s)+ 提示词要求简短推理(判定从 35min+ 降到 ~60s)。✅
  3. /aiClean/jobs 跨案件越权:加 caseId 过滤。✅
  4. Skip 结论计数与明细不符:Skip 也写入明细。✅
  5. 清洗页树兜底:sessionStorage 被流程消费后可按 focusKey/batchId 从 /dm/getFiles 重建树(修复「人工确认页无数据」同源问题,超时出口「改为手动清洗」也依赖它)。✅

最终形态(移除人工确认后)验证

  • 混合批次(A 车辆登记 + B 通信记录):B 三表走系统清洗成功(272 条),A 判定后进入「无法清洗」;批次 DONE、失败 0。✅
  • AI 卡指标更名「无法清洗(表)」、列表纯展示(无任何跳转/操作按钮),展示原因。✅
  • 清洗页不再有待人工工作清单面板。✅
  • 上传页行级/整页「手动清洗」、importList 重新清洗等旧入口不受影响。✅
  • MD5 去重还原后重复上传仍被拦截。✅

待人工确认逻辑(已按需求移除)

  • 相关代码(清单面板/详情弹窗/重判/resolve 接口/消项钩子/仅清洗当前表模式)已全部移除; git 历史中保留可随时恢复。
  • ai_clean_job 仍以 NEED_REVIEW 状态记录「无法清洗」结论(原因可查),仅不再引导人工处理。