plan-sess_fcb234c9-7ddf-4f56-bd52-e9187c480b56.md 4.1 KB

文件上传与数据清洗(4级降级)逻辑验证计划

0. 两个已拍板的决策

  1. 「完全匹配不到模板」按需求改:应走3级用文件自身表头新建动态表(TEXT 兜底),4级只保留给结构归一/无绑定/置信不足等硬失败。当前代码落4级属缺陷 → 测试确认后修复。
  2. AI 新建表不写 table_info/table_field(遵循 AiCleanStore 既有设计):治理结果分类数据走既有机制——治理树负数 id 节点 → /aiClean/data/page 分流(GovernService:380 治理后重建 AI 节点、前端 index.vue:1287 已分流)。测试验证这条链路能查到数据即可,不改代码。

一、逻辑梳理结论(已逐行核实)

上传(L1判定):upload.vue:475 → /dm/preFileUpload → PreDataListener:每 sheet 建预览表 raw_{sheetId},默认 MATCHED_FAIL;前20行 matchTemplate:340(全字段+必填字段包含)→ 命中打 templateId,未命中留给 AI 链路。

智能清洗(4级降级):/aiClean/smartClean → AiSmartCleanService.run:148,只接管 templateId==null 的 sheet(:160 守卫):

  • 2级:AI 三腿匹配(表头指纹→打分≥0.90→LLM top-12 置信≥0.6)命中既有模板且 STRONG → ExitA → 与1级合并成一次 doClean 写业务表
  • 3级:命中 AI 模板库(指纹/打分/LLM)或 WEAK 弱匹配 → ExitB → loadViaAiTemplate:355 建 ai_t{id} 动态表+登记 AI 模板(写数成功才 ONLINE,0行/失败删表)
  • 4级:无候选/需结构归一/无可用绑定/置信度不过放行线 → 直接 NEED_REVIEW 标记,原因进 need_review_detail,前端日志「AI 无法清洗:表名(原因)」
  • 日志绑定:行级失败→clean_error_log(fileId+sheetId+batchId);每 sheet→ai_clean_job;批次→ai_clean_batch

二、测试用例矩阵(写入 smart-clean-test-cases.md 新章节「4级降级专项验证」)

A组 上传与L1判定(①–④回归):A1 文件B→MATCHED_SUCCESS;A2 文件A→MATCHED_FAIL;A3 混合上传状态正确;A4 非法后缀不落盘;A5 MD5去重 B组 1级:B1 仅文件B→零AI判定、doClean、业务表行数正确;B2 行级失败→clean_error_log 三字段绑定正确 C组 2级(新造文件C=B表头同义改写):C1 →ExitA(job.exitCode=A/refTemplateId 正确,合并一次doClean) D组 3级(新造文件D/E):D1 同义改写+噪声列→ExitB 建 ai_t{id}、ONLINE、行数正确;D2 同表头二次清洗→header_md5 唯一键是复用还是冲突(重点观察);D3 完全无关表头→修复后应新建表(文件表头+TEXT),修复前确认缺陷;D4 0行→删表不登记、job失败 E组 4级(新造文件F=合并单元格):E1 →NeedReview("需要结构归一");E2 必填大量空值→置信度不过线(视LLM行为);E3 NEED_REVIEW 落地全链断言(job状态/批次计数/明细/前端日志/不写数据表) F组 守卫与治理结果:F1 templateId 非空零AI判定;F2 jobs案件隔离;F3 AI 表在治理结果分类树可见(负数id节点)、点开数据可查(/aiClean/data/page)、治理任务重建后不丢(验证既有闭环)

三、执行步骤

  1. 单测基线:mvn test 跑 aiclean 模块 13 类 68 用例,确认全绿
  2. 补单测:D3 修复的新路径(无候选→文件表头自建 AiPlan)、needsStructure 门、0行清理;跑绿
  3. 造测试文件 C/D/E/F(.xlsx 放 public/__test__/,从文件B读表头构造C)
  4. 环境:确认后端8980/前端3100在跑(不在则启动),打开测试案件
  5. 浏览器 E2E(延续既有方式):按矩阵逐条执行,断言=状态/jobs接口+前端UI+必要查库,结果实时记录
  6. 缺陷修复:主修 D3——AiCleanService.judge 无候选分支改为用文件自身表头构建 AiPlan(AiColumnNames 消毒、全 TEXT、无清洗函数),需结构归一等硬失败仍落4级;loadViaAiTemplate 兼容 draft 为空;补单测+E2E 重验;其余新发现 bug 一并修复重跑
  7. 收尾:更新 smart-clean-test-cases.md(逻辑梳理/用例/执行记录),输出汇总报告

风险说明

  • 2/3级判定走真实 LLM(单次几十秒),E2E 判定次数控制在5次左右;新测试文件统一用 .xlsx