Admin:修复档口货号中文括号与前导零匹配 #273

Open
opened 2026-08-18 17:17:22 +08:00 by ila · 0 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#14
  • 所属 MVP / 版本:#224
  • 阶段:档口入库码确定性匹配兼容修复

要解决什么

2026-08-18 的档口入库码记录中,订单 260814A21AAB1G、规格 黑色(有口袋),2XL【建議67.5-82.5公斤】 能唯一命中顺运宝商品,但被标记为“规格能匹配,但档口及货号与候选商品不一致”。

已确认根因:导入档口为 将客大码网批#067;候选 sku 使用 067【将客大码网批】...,variationSku 使用 汽配-将客大码网批#67...。现有规则不把中文括号 【 识别为货号边界,纯数字货号也不在档口名称一致的前提下兼容前导零,导致真实唯一候选被排除。该旧记录的 source_sku_raw 为空,无法由 #259 的原始 SKU 规则补救。

做什么 / 不做什么

  • 做:结构化提取候选 sku / variationSku 中的档口名称和货号,支持中文括号作为货号边界。
  • 做:纯数字货号比较时允许前导零等价,但必须同时验证档口名称一致。
  • 做:保留原始 SKU ���优先级、唯一命中、冲突阻断、规格唯一、采购字段为空和 detail 防重复占用等既有安全门禁。
  • 做:补充本缺陷、前导零同号异档口、中文括号、非数字货号及既有成功场景的回归测试。
  • 不做:不做全局模糊包含,不只凭短货号匹配,不选择第一个候选。
  • 不做:不改数据库结构、导入格式、页面、Admin 接口或顺运宝写入流程;本工单验证阶段不向顺运宝写入。

怎么做

  • admin/service/inner_code_match.go:把档口字段拆为名称与货号;从候选 sku / variationSku 安全提取可比较的名称和货号。中文 【】 作为边界;纯数字货号去除前导零后只能在档口名称也匹配时成立。保留旧规则作为兼容路径,但不得放宽到“同货号不同档口”。
  • admin/service/inner_code_match_test.go:加入 将客大码网批#067 对 067【将客大码网批】 / #67 的唯一命中测试,以及不同档口、候选重复、非数字货号、现有格式不退化测试。
  • 不新增迁移;预计只修改上述 service 与测试文件。

验收标准

  • 将客大码网批#067 能唯一匹配规格相同且 SKU 为 067【将客大码网批】... 的候选。
  • 067 与 67 仅在两侧均为纯数字且档口名称一致时允许等价。
  • 相同数字货号但档口名称不同的候选不得命中。
  • 非数字货号继续精确比较,不进行前导零或模糊转换。
  • 原始 SKU 唯一命中与冲突阻断规则保持不变。
  • 规格歧义、候选重复、采购字段不为空和 detail 防重复占用门禁保持不变。
  • 定向测试、Admin 全量测试、固定 Go 1.23.0 build/vet 和 git diff --check 通过。
  • 对生产目标订单只做重新匹配前的只读核对,不自动回写入库码。

怎么验证

从仓库根目录执行:

$env:GOTOOLCHAIN='go1.23.0'
Set-Location admin
go test ./service -run InnerCode -count=1
go test ./... -count=1
go build ./...
go vet ./...
Set-Location ..
git diff --check
Remove-Item Env:GOTOOLCHAIN

风险和回退

  • 风险:货号 067 与 67 在不同档口可能同时存在,因此禁止脱离档口名称单独做数字等价。
  • 风险:顺运宝 SKU 表达形式较多;解析失败必须保持不匹配,不能退化成猜测。
  • 回退:回退本工单代码提交即可;没有数据库结构和生产数据变更。已经由人工执行的远端回写不属于代码回退范围。

实施记录

  • 状态:已完成,待用户验收。
  • 实现提交:5e0cf95、6f20c05。
  • 归档提交:055b5fa、cb7719c。
  • 归档文档:docs/task/273-档口货号括号与前导零匹配.md。
  • 固定 Go 1.23.0 的定向测试、全量测试、build、vet 及 git diff --check 全部通过。
  • 生产目标订单只做了远端候选只读核对,没有重新匹配、回写或修改生产数据。
  • 补充阻断规格中的重量数字被误识别为货号。
## 基本信息 - 类型:缺陷 - 父级大工单:#14 - 所属 MVP / 版本:#224 - 阶段:档口入库码确定性匹配兼容修复 ## 要解决什么 2026-08-18 的档口入库码记录中,订单 `260814A21AAB1G`、规格 `黑色(有口袋),2XL【建議67.5-82.5公斤】` 能唯一命中顺运宝商品,但被标记为“规格能匹配,但档口及货号与候选商品不一致”。 已确认根因:导入档口为 `将客大码网批#067`;候选 `sku` 使用 `067【将客大码网批】...`,`variationSku` 使用 `汽配-将客大码网批#67...`。现有规则不把中文括号 `【` 识别为货号边界,纯数字货号也不在档口名称一致的前提下兼容前导零,导致真实唯一候选被排除。该旧记录的 `source_sku_raw` 为空,无法由 #259 的原始 SKU 规则补救。 ## 做什么 / 不做什么 - 做:结构化提取候选 `sku` / `variationSku` 中的档口名称和货号,支持中文括号作为货号边界。 - 做:纯数字货号比较时允许前导零等价,但必须同时验证档口名称一致。 - 做:保留原始 SKU ���优先级、唯一命中、冲突阻断、规格唯一、采购字段为空和 detail 防重复占用等既有安全门禁。 - 做:补充本缺陷、前导零同号异档口、中文括号、非数字货号及既有成功场景的回归测试。 - 不做:不做全局模糊包含,不只凭短货号匹配,不选择第一个候选。 - 不做:不改数据库结构、导入格式、页面、Admin 接口或顺运宝写入流程;本工单验证阶段不向顺运宝写入。 ## 怎么做 - `admin/service/inner_code_match.go`:把档口字段拆为名称与货号;从候选 `sku` / `variationSku` 安全提取可比较的名称和货号。中文 `【】` 作为边界;纯数字货号去除前导零后只能在档口名称也匹配时成立。保留旧规则作为兼容路径,但不得放宽到“同货号不同档口”。 - `admin/service/inner_code_match_test.go`:加入 `将客大码网批#067` 对 `067【将客大码网批】` / `#67` 的唯一命中测试,以及不同档口、候选重复、非数字货号、现有格式不退化测试。 - 不新增迁移;预计只修改上述 service 与测试文件。 ## 验收标准 - [x] `将客大码网批#067` 能唯一匹配规格相同且 SKU 为 `067【将客大码网批】...` 的候选。 - [x] `067` 与 `67` 仅在两侧均为纯数字且档口名称一致时允许等价。 - [x] 相同数字货号但档口名称不同的候选不得命中。 - [x] 非数字货号继续精确比较,不进行前导零或模糊转换。 - [x] 原始 SKU 唯一命中与冲突阻断规则保持不变。 - [x] 规格歧义、候选重复、采购字段不为空和 detail 防重复占用门禁保持不变。 - [x] 定向测试、Admin 全量测试、固定 Go 1.23.0 build/vet 和 `git diff --check` 通过。 - [x] 对生产目标订单只做重新匹配前的只读核对,不自动回写入库码。 ## 怎么验证 从仓库根目录执行: ```powershell $env:GOTOOLCHAIN='go1.23.0' Set-Location admin go test ./service -run InnerCode -count=1 go test ./... -count=1 go build ./... go vet ./... Set-Location .. git diff --check Remove-Item Env:GOTOOLCHAIN ``` ## 风险和回退 - 风险:货号 `067` 与 `67` 在不同档口可能同时存在,因此禁止脱离档口名称单独做数字等价。 - 风险:顺运宝 SKU 表达形式较多;解析失败必须保持不匹配,不能退化成猜测。 - 回退:回退本工单代码提交即可;没有数据库结构和生产数据变更。已经由人工执行的远端回写不属于代码回退范围。 ## 实施记录 - 状态:已完成,待用户验收。 - 实现提交:`5e0cf95`、`6f20c05`。 - 归档提交:`055b5fa`、`cb7719c`。 - 归档文档:`docs/task/273-档口货号括号与前导零匹配.md`。 - 固定 Go 1.23.0 的定向测试、全量测试、build、vet 及 `git diff --check` 全部通过。 - 生产目标订单只做了远端候选只读核对,没有重新匹配、回写或修改生产数据。 - 补充阻断规格中的重量数字被误识别为货号。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#273