档口入库码:只读确定性匹配与写入规划 #120

Closed
opened 2026-08-27 23:30:17 +08:00 by ila · 3 comments
Owner

所属与来源

  • 父 MVP:#117。
  • 来源:用户于 2026-08-27 要求先按已确认的全栈分析方案建单并制作总原型,审核通过后才能实施。
  • 前置依赖:#118、#119。

目标

把源模块的确定性匹配算法迁入 GoAuto;Excel 导入成功后自动执行,只读实时读取 SYB 并形成可审核的写入计划,不修改远端。

触发与交互

  • #119 导入事务成功后自动创建匹配任务,不等待匹配完成才返回导入请求。
  • 页面不提供常驻“批量匹配”按钮;匹配进度由 #122 轮询展示。
  • 临时读取失败和计划失效允许采购员对异常项重新匹配;证据冲突、订单不存在和规格歧义需修正 Excel。
  • 导入请求与记录 ID 生成幂等工作键,避免重复创建匹配任务。
  • 记录在匹配过程中被物理删除时,worker 按取消结束,不能重新插入记录。

方案

  • 通过订单号实时查询 SYB stock/detail,不能以本地 syb_product 缓存作为最终依据。
  • 依次使用规格精确/规范化、原始 SKU 对 sku/variationSku 精确匹配、档口/货号证据;证据冲突或候选歧义明确失败。
  • 保留数字前导零、标点拆词、重复相同明细和原始 SKU 与档口冲突等源模块边界。
  • 同一规划批次中预留 detail,且避开其他有效记录已经占用的 detail,防止两条记录认领同一远端明细。
  • 保存结构化规划快照:stock/detail 身份、规格/SKU/采购字段、当前入库码、所需占位明细数和规划时间。
  • 执行前仍必须由 #121 重读远端,规划不是写入授权。

非目标

  • 不调用删除码、创建明细或写码接口。
  • 不使用 AI、OCR、模糊相似度或人工猜测候选。
  • 不实现异步写入 worker。

验收标准

  • 精确匹配、规范化匹配、重复明细、多件数量与 detail 预留正确。
  • SKU 与档口证据冲突、候选不足、候选过多、订单不存在均明确失败。
  • 导入成功后自动创建一次匹配任务,幂等重放不重复执行。
  • 页面/API 不依赖人工批量匹配入口;异常项重新匹配边界明确。
  • 规划只读,测试能证明未调用任何 SYB 写方法。
  • 规划快照足以支持页面展示与执行前漂移比较,不保存原始远端响应。
  • 并发规划不会让两个有效记录持有同一 detail。
  • 源项目相关匹配测试已迁移并按 GoAuto 模型补充。

验证

使用 fake SYB 覆盖订单不存在、会话恢复、完全匹配、前导零、标点、SKU 冲突、重复明细、已占用明细和远端读取失败。

风险与文档

本工单只读,不需要真实写入授权;会改变 SYB 读取调用路径和业务规则,完成后更新架构、规则、接口和 SYB 契约 Wiki。

## 所属与来源 - 父 MVP:#117。 - 来源:用户于 2026-08-27 要求先按已确认的全栈分析方案建单并制作总原型,审核通过后才能实施。 - 前置依赖:#118、#119。 ## 目标 把源模块的确定性匹配算法迁入 GoAuto;Excel 导入成功后自动执行,只读实时读取 SYB 并形成可审核的写入计划,不修改远端。 ## 触发与交互 - #119 导入事务成功后自动创建匹配任务,不等待匹配完成才返回导入请求。 - 页面不提供常驻“批量匹配”按钮;匹配进度由 #122 轮询展示。 - 临时读取失败和计划失效允许采购员对异常项重新匹配;证据冲突、订单不存在和规格歧义需修正 Excel。 - 导入请求与记录 ID 生成幂等工作键,避免重复创建匹配任务。 - 记录在匹配过程中被物理删除时,worker 按取消结束,不能重新插入记录。 ## 方案 - 通过订单号实时查询 SYB stock/detail,不能以本地 `syb_product` 缓存作为最终依据。 - 依次使用规格精确/规范化、原始 SKU 对 `sku/variationSku` 精确匹配、档口/货号证据;证据冲突或候选歧义明确失败。 - 保留数字前导零、标点拆词、重复相同明细和原始 SKU 与档口冲突等源模块边界。 - 同一规划批次中预留 detail,且避开其他有效记录已经占用的 detail,防止两条记录认领同一远端明细。 - 保存结构化规划快照:stock/detail 身份、规格/SKU/采购字段、当前入库码、所需占位明细数和规划时间。 - 执行前仍必须由 #121 重读远端,规划不是写入授权。 ## 非目标 - 不调用删除码、创建明细或写码接口。 - 不使用 AI、OCR、模糊相似度或人工猜测候选。 - 不实现异步写入 worker。 ## 验收标准 - [ ] 精确匹配、规范化匹配、重复明细、多件数量与 detail 预留正确。 - [ ] SKU 与档口证据冲突、候选不足、候选过多、订单不存在均明确失败。 - [ ] 导入成功后自动创建一次匹配任务,幂等重放不重复执行。 - [ ] 页面/API 不依赖人工批量匹配入口;异常项重新匹配边界明确。 - [ ] 规划只读,测试能证明未调用任何 SYB 写方法。 - [ ] 规划快照足以支持页面展示与执行前漂移比较,不保存原始远端响应。 - [ ] 并发规划不会让两个有效记录持有同一 detail。 - [ ] 源项目相关匹配测试已迁移并按 GoAuto 模型补充。 ## 验证 使用 fake SYB 覆盖订单不存在、会话恢复、完全匹配、前导零、标点、SKU 冲突、重复明细、已占用明细和远端读取失败。 ## 风险与文档 本工单只读,不需要真实写入授权;会改变 SYB 读取调用路径和业务规则,完成后更新架构、规则、接口和 SYB 契约 Wiki。
Author
Owner

开始实施。#118 已验收;#119 数据模型和导入基础已落地且首轮受影响 Go 回归通过。当前工单将接通导入后自动创建的后台只读匹配任务,实时读取 SYB stock/detail,保存结构化规划快照并覆盖确定性匹配、证据冲突、明细预留和幂等。不会调用任何 SYB 写方法。

开始实施。#118 已验收;#119 数据模型和导入基础已落地且首轮受影响 Go 回归通过。当前工单将接通导入后自动创建的后台只读匹配任务,实时读取 SYB stock/detail,保存结构化规划快照并覆盖确定性匹配、证据冲突、明细预留和幂等。不会调用任何 SYB 写方法。
Author
Owner

实施完成,待用户验收

实现提交:5c6655f;文档提交:fd15ce0、68395ca、2f54155。

  • 导入提交后异步启动只读匹配;重匹配任务显式保存勾选记录 ID,只处理任务范围,不扫描同日其他记录。
  • 实时按精确订单号读取 stock/detail,执行规格、SKU/variationSKU、档口证据与数量的确定性裁决;歧义、冲突和不足均不猜测。
  • 同一批次和现有有效计划共同预留 detail,避免重复认领;计划保存远端身份、当前码、占位数、替换数和证据哈希,不保存原始响应。
  • 匹配接口类型只暴露读取方法,测试 fake 没有任何写方法;专项测试覆盖多件、SKU/档口冲突、预留、一次执行和任务范围隔离。

共同验证与文档证据

  • .\scripts\verify.ps1 -Component all:通过(服务端 go test ./... 与构建、Web lint/生产构建、Android 单测与 debug APK 构建);Web lint 仅有 30 条存量 warning,0 error。
  • 专项浏览器验收:npx playwright test tests/e2e/syb-inner-codes.spec.ts,1 passed。
  • 线上 Wiki revision:架构 6ed5b970878ff0211946fbba02c64eaccfe8d8bb;业务规则 4236dd1d219cc6235537adfd8d0411308c449971;产品索引 0d9924b4566e567edf167ba678fedde28a41cfd3;SYB 契约 f596931468caf524cbd9d90b3c299b32a8cf8228。
  • harness.py sync 已完整导出。独立 sync --check 因 Gitea 直连读取超时未返回成功码;随后通过 Gitea MCP 对上述四页逐字比较正文并核对镜像 revision,四页均 content_equal=true、revision_equal=true。
  • 保留无关未跟踪文件 gitea.zip,未纳入提交。
## 实施完成,待用户验收 实现提交:`5c6655f`;文档提交:`fd15ce0`、`68395ca`、`2f54155`。 - 导入提交后异步启动只读匹配;重匹配任务显式保存勾选记录 ID,只处理任务范围,不扫描同日其他记录。 - 实时按精确订单号读取 stock/detail,执行规格、SKU/variationSKU、档口证据与数量的确定性裁决;歧义、冲突和不足均不猜测。 - 同一批次和现有有效计划共同预留 detail,避免重复认领;计划保存远端身份、当前码、占位数、替换数和证据哈希,不保存原始响应。 - 匹配接口类型只暴露读取方法,测试 fake 没有任何写方法;专项测试覆盖多件、SKU/档口冲突、预留、一次执行和任务范围隔离。 ### 共同验证与文档证据 - `.\scripts\verify.ps1 -Component all`:通过(服务端 `go test ./...` 与构建、Web lint/生产构建、Android 单测与 debug APK 构建);Web lint 仅有 30 条存量 warning,0 error。 - 专项浏览器验收:`npx playwright test tests/e2e/syb-inner-codes.spec.ts`,1 passed。 - 线上 Wiki revision:架构 `6ed5b970878ff0211946fbba02c64eaccfe8d8bb`;业务规则 `4236dd1d219cc6235537adfd8d0411308c449971`;产品索引 `0d9924b4566e567edf167ba678fedde28a41cfd3`;SYB 契约 `f596931468caf524cbd9d90b3c299b32a8cf8228`。 - `harness.py sync` 已完整导出。独立 `sync --check` 因 Gitea 直连读取超时未返回成功码;随后通过 Gitea MCP 对上述四页逐字比较正文并核对镜像 revision,四页均 `content_equal=true`、`revision_equal=true`。 - 保留无关未跟踪文件 `gitea.zip`,未纳入提交。
Author
Owner

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila closed this issue 2026-08-28 15:07:24 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#120