Admin:确定性解析 SYB 规格并补建蝦皮 SKU #204

Closed
opened 2026-08-13 10:20:14 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / 顺运宝数据补全
  • 阶段:蝦皮规格补全
  • 依赖:#203

要解决什么

SYB 货运单保存了蝦皮规格原文,但目前只作为历史观测展示,明确不写 shopee_skus。用户确认改变该边界:确定性代码能够明确解析颜色/第一规格、尺码和建议体重时,写入来源为 SYB 的蝦皮规格,为后续 PDD/AI 匹配提供结构化数据;歧义数据继续不猜。

做什么 / 不做什么

  • 做:
    • 增加独立纯函数解析器,始终保留 spec_raw。
    • 只对明确支持的两维格式解析成功;识别颜色/第一规格、标准尺码及可选建议体重。
    • 按 (goods_id, spec_key) 幂等补建 SKU,shopee_sku_id 为空、来源为 syb。
    • SYB 只创建或补空,不覆盖人工、真实 SKU ID、商品目录字段或较高优先级来源。
    • 商品目录以后提交同一规格时合并到原内部记录并可补真实 SKU ID。
    • 对历史 syb_orders 做可预览统计的幂等存量回填。
  • 不做:
    • 不使用大模型解析,不猜测三维、多分隔符、残缺或无法完整消费的文本。
    • 解析失败不创建正式 SKU,继续保留在 SYB 观测区。
    • 不把内部记录 ID 冒充真实蝦皮 SKU ID,不自动创建采购任务。

怎么做

  • 在 admin/spec/ 增加确定性解析器和脱敏样本测试。
  • 在 service 编排同步后的规格提升,repository 使用现有无真实 SKU ID 数据结构和唯一 (goods_id,spec_key) 写入。
  • 解析器至少覆盖已确认样本:白色,L【建議50-60公斤】、黑色,M、带复合第一规格和小数体重建议的两维格式;未知结构返回明确未解析原因。
  • 写入字段来源和观测时间;人工行及非空高优先级字段不可覆盖。
  • 存量回填先统计成功、歧义、已存在和冲突,写入只处理成功且安全的记录,重复执行幂等。
  • 更新 #140 形成的“只读不写回”基线说明,明确新边界。

验收标准

  • 支持格式能稳定解析出第一规格、尺码和建议体重,并原样保存 spec_raw。
  • 歧义、三维、残缺、未知尺码或未完整消费的文本解析失败且不创建 SKU。
  • 同一商品和 spec_key 重复同步只保留一个内部 SKU。
  • SYB SKU 的真实蝦皮 SKU ID 为空、来源为 syb,页面不冒充真实 ID。
  • 人工、目录/API 和已有真实 SKU 字段不被 SYB 覆盖。
  • 后续商品目录同规格可以合并并补充真实 SKU ID。
  • 历史回填有分类统计、可重复执行且不复活软删除商品。
  • 现有 SYB→PDD 映射与采购校验回归通过。
  • 固定 Go 1.23.0 的 build、test、vet 和 MySQL 8.4 _test 验证通过。

怎么验证

运行解析器表驱动测试、同步/重复同步/来源优先级测试、目录合并测试和现有采购工作流回归;从 admin/ 用固定 Go 1.23.0 执行全量 build/test/vet;独立 MySQL 8.4 _test 执行存量回填预览、应用和重放。

风险和回退

  • 风险:把复杂规格误解析为正式 SKU 会影响后续真实采购。解析必须白名单化并完整消费输入,无法确定即拒绝。
  • 回退:关闭新的规格提升路径;按 source='syb' 且无真实 SKU ID 定位新增记录。不得无条件删除已经被人工或目录补全的记录。
## 基本信息 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#15 / 顺运宝数据补全 - 阶段:蝦皮规格补全 - 依赖:#203 ## 要解决什么 SYB 货运单保存了蝦皮规格原文,但目前只作为历史观测展示,明确不写 `shopee_skus`。用户确认改变该边界:确定性代码能够明确解析颜色/第一规格、尺码和建议体重时,写入来源为 SYB 的蝦皮规格,为后续 PDD/AI 匹配提供结构化数据;歧义数据继续不猜。 ## 做什么 / 不做什么 - 做: - 增加独立纯函数解析器,始终保留 `spec_raw`。 - 只对明确支持的两维格式解析成功;识别颜色/第一规格、标准尺码及可选建议体重。 - 按 `(goods_id, spec_key)` 幂等补建 SKU,`shopee_sku_id` 为空、来源为 `syb`。 - SYB 只创建或补空,不覆盖人工、真实 SKU ID、商品目录字段或较高优先级来源。 - 商品目录以后提交同一规格时合并到原内部记录并可补真实 SKU ID。 - 对历史 `syb_orders` 做可预览统计的幂等存量回填。 - 不做: - 不使用大模型解析,不猜测三维、多分隔符、残缺或无法完整消费的文本。 - 解析失败不创建正式 SKU,继续保留在 SYB 观测区。 - 不把内部记录 ID 冒充真实蝦皮 SKU ID,不自动创建采购任务。 ## 怎么做 - 在 `admin/spec/` 增加确定性解析器和脱敏样本测试。 - 在 service 编排同步后的规格提升,repository 使用现有无真实 SKU ID 数据结构和唯一 `(goods_id,spec_key)` 写入。 - 解析器至少覆盖已确认样本:`白色,L【建議50-60公斤】`、`黑色,M`、带复合第一规格和小数体重建议的两维格式;未知结构返回明确未解析原因。 - 写入字段来源和观测时间;人工行及非空高优先级字段不可覆盖。 - 存量回填先统计成功、歧义、已存在和冲突,写入只处理成功且安全的记录,重复执行幂等。 - 更新 #140 形成的“只读不写回”基线说明,明确新边界。 ## 验收标准 - [x] 支持格式能稳定解析出第一规格、尺码和建议体重,并原样保存 `spec_raw`。 - [x] 歧义、三维、残缺、未知尺码或未完整消费的文本解析失败且不创建 SKU。 - [x] 同一商品和 `spec_key` 重复同步只保留一个内部 SKU。 - [x] SYB SKU 的真实蝦皮 SKU ID 为空、来源为 `syb`,页面不冒充真实 ID。 - [x] 人工、目录/API 和已有真实 SKU 字段不被 SYB 覆盖。 - [x] 后续商品目录同规格可以合并并补充真实 SKU ID。 - [x] 历史回填有分类统计、可重复执行且不复活软删除商品。 - [x] 现有 SYB→PDD 映射与采购校验回归通过。 - [x] 固定 Go 1.23.0 的 build、test、vet 和 MySQL 8.4 `_test` 验证通过。 ## 怎么验证 运行解析器表驱动测试、同步/重复同步/来源优先级测试、目录合并测试和现有采购工作流回归;从 `admin/` 用固定 Go 1.23.0 执行全量 build/test/vet;独立 MySQL 8.4 `_test` 执行存量回填预览、应用和重放。 ## 风险和回退 - 风险:把复杂规格误解析为正式 SKU 会影响后续真实采购。解析必须白名单化并完整消费输入,无法确定即拒绝。 - 回退:关闭新的规格提升路径;按 `source='syb'` 且无真实 SKU ID 定位新增记录。不得无条件删除已经被人工或目录补全的记录。
Author
Owner

实施完成,待验收

  • 实现提交:ad1ccc2
  • 归档提交:901b37a
  • 归档:docs/task/204-syb确定性解析蝦皮规格.md
  • 已实现:严格二维规格解析、稳定内部 SKU、低优先级来源、目录真实 SKU 合并和 MySQL v16 历史回填。
  • 验证:Go 1.23.0 下 go vet ./...、go build ./...、go test ./... -count=1 通过。
  • 未验证:现有 buy 对隔离库 autobuy_test 无权限,真实 MySQL 8.4 迁移测试被阻止;未使用生产库代测。
## 实施完成,待验收 - 实现提交:ad1ccc2 - 归档提交:901b37a - 归档:docs/task/204-syb确定性解析蝦皮规格.md - 已实现:严格二维规格解析、稳定内部 SKU、低优先级来源、目录真实 SKU 合并和 MySQL v16 历史回填。 - 验证:Go 1.23.0 下 go vet ./...、go build ./...、go test ./... -count=1 通过。 - 未验证:现有 buy 对隔离库 autobuy_test 无权限,真实 MySQL 8.4 迁移测试被阻止;未使用生产库代测。
Author
Owner

用户于 2026-08-14 明确验收通过。验收清单已确认,现关闭工单。

用户于 2026-08-14 明确验收通过。验收清单已确认,现关闭工单。
ila closed this issue 2026-08-14 09:20:46 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#204