From 57fc8a3392d903ec14f7d79824c8bf136b541134 Mon Sep 17 00:00:00 2001 From: chengma Date: Fri, 14 Aug 2026 10:31:21 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?#202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...202-Admin顺运宝列表批量AI匹配进度与筛选.md | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 docs/task/202-Admin顺运宝列表批量AI匹配进度与筛选.md diff --git a/docs/task/202-Admin顺运宝列表批量AI匹配进度与筛选.md b/docs/task/202-Admin顺运宝列表批量AI匹配进度与筛选.md new file mode 100644 index 0000000..d0592ff --- /dev/null +++ b/docs/task/202-Admin顺运宝列表批量AI匹配进度与筛选.md @@ -0,0 +1,79 @@ +# 202 Admin:顺运宝列表增加批量 AI 匹配、进度与筛选 + +- 类型:需求 +- 父级大工单:#14 +- 所属 MVP / 版本:#199 / AI规格批量匹配 +- 状态:已完成,待用户验收 +- 日期:2026-08-14 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/202 + +## 背景与目标 + +采购员需要在顺运宝列表批量处理已经关联并采集 PDD 数据的商品,而不是逐条打开详情。 +批量操作必须持久化进度、逐条展示结果,并保持人工映射优先、上下文失效保护和“不创建采购 +任务”的边界。 + +## 最终方案 + +- MySQL v22 增加批次和批次明细表,保存创建人、非敏感配置快照、进度、逐条结果和重启 + 中断状态,不保存 API Key。 +- 顺运宝列表增加“AI匹配”和“匹配记录”,最多提交 100 条。后台使用配置并发上限执行; + 相同蝦皮商品、顺运宝规格与 PDD 上下文只处理一次,其余明细从当前有效映射复用。 +- 每条继续调用 #201 的核心服务,模型不能绕过候选白名单、硬门禁、上下文版本和人工优先。 + 单条失败不会回滚其他成功条目。 +- 进度弹窗轮询服务端状态,显示总数、已处理、成功、复用、待人工、失败和逐条原因;采购员 + 只能查看自己的批次,管理员可以查看全部。 +- 增加独立匹配来源徽标和“AI规格匹配”来源筛选。人工详情改写会把当前来源改为人工,AI + 历史决策和批次记录保留。 +- Admin 启动时把遗留的等待中/运行中批次标记为中断,成功映射不回滚,未完成条目可重新 + 勾选重试。 + +实施时补充了 `AISpecMatchResult.ConfidenceSet`,用于区分“模型明确返回 0%”和“没有置信度”, +避免批次记录把有效零值误判为空值;不改变 #201 的匹配门禁和保存结论。 + +## 改了哪些 + +- `admin/repository/mysql_db.go`、`admin/repository/ai_match_batch.go`:MySQL v22、批次持久化、 + 进度统计和中断收敛。 +- `admin/service/ai_match_batch.go`、`admin/service/ai_specmatch.go`、`admin/service/syb.go`:批次 + 编排、上下文去重、来源筛选、来源展示和置信度零值语义。 +- `admin/handler/web/ai_match.go`、`admin/handler/web/others.go`、`admin/handler/web/web.go`、 + `admin/main.go`:创建/查询路由、页面数据和启动恢复。 +- `admin/templates/syb/`、`admin/static/js/app.js`、`admin/static/css/app.css`:批量确认、进度 + 弹窗、轮询、来源徽标和 1366px 紧凑布局。 +- `admin/service/ai_match_batch_test.go` 及既有回归测试:去重身份、结果分类、权限、中断和批次 + 汇总测试。 +- `docs/admin/`:同步需求、架构、数据模型、界面和安全基线。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 勾选可匹配明细创建批次,并在服务端限制空选择、重复 ID 和 100 条上限 | 通过 | +| 持久化批次/逐条状态,页面显示并自动刷新全部计数和逐条原因 | 通过 | +| 同一匹配上下文只处理一次,其余明细校验当前共享映射后复用 | 通过(专项集成用例已编写) | +| 人工映射不被覆盖,条件不足、失败和上下文变化不自动写入 | 通过 | +| 合格结果可进入采购就绪,但批量操作不创建任务、不调用 Client | 通过 | +| “AI规格匹配”筛选和列表/详情来源徽标按当前有效来源工作 | 通过 | +| 人工修改后当前来源变为人工,历史审计保留 | 通过 | +| 启动收敛未完成批次,成功结果不回滚,允许安全重试 | 通过(专项集成用例已编写) | +| 采购员只看本人批次,管理员可看全部;页面有文字反馈和可滚动明细 | 通过 | +| Go 构建、测试、vet 和 JavaScript 语法检查 | 通过;真实 MySQL 项见下方未验证说明 | + +## 测试 + +- 执行的命令: + - `go test ./service -run 'Test(AISpecMatchIdentity|BatchItemFromMatch|AIMatchBatch_)' -count=1 -v` + - `go test ./... -count=1` + - `go vet ./...` + - `node --check static/js/app.js` + - `git diff --check` +- 结果:纯逻辑专项测试、完整 Go 测试、vet、JavaScript 语法和差异格式检查通过。MySQL 专项 + 用例能被测试套件发现,并在没有测试库开关时按项目规则明确跳过。 +- **没验证到的部分**:当前环境未提供启用 `CMAUTOBUY_MYSQL_TEST=1` 的独立 MySQL 8.4 + `_test` 数据库,因此没有实际执行 v22 首建/升级/重放、真实事务并发和进程重启后的数据库 + 状态检查;也未连接真实模型服务或在浏览器 1366×768 人工验收。没有使用生产数据库代替。 + +## 相关提交 + +- `d64579e` feat: 增加顺运宝批量 AI 规格匹配 (#202)