feat(server): 同步虾皮完整颜色尺码并一次性匹配,避免重复采集与匹配 #290

Open
opened 2026-09-16 10:08:50 +08:00 by ila · 0 comments
Owner

依据 #288 的评估与 2026-09-16 的讨论。依赖 #289(塌缩检测)先行。

原始需求

用户原话要点:「同个蝦皮商品有多个 syb 订单时,只要其中一个颜色采集匹配后,其他颜色的 syb 订单不需要再次采集和匹配,可以直接采购」。

用户已提供接口:按虾皮商品 id 返回该商品的全部颜色与尺码。

已确认的事实

采集本就不需要重复:采集按 PDD 商品进行(collection_eligibility.go 的判定链从 SYB 明细走到 pdd.ID,无颜色条件),同一虾皮商品的多个颜色共用一个 PDD 商品。实测 PDD 8479 一次采集即拿到 5 个颜色的完整规格。

匹配无法省略但可以不用人点:映射按规格值逐个保存,白色 → PDD 某值 推导不出 黑色 → ?。但触发可以自动化。

规格滞后是问题根源:虾皮档案的颜色尺码是从 SYB 明细增量累积的(mergeParsedSpec),SYB 送来什么才有什么。已有映射的商品最近 2 天仍新增 28 条明细、涉及 17 个商品,其中不少是全新的颜色尺码组合——所以「弄好一次」现在不成立。

接口可用:返回 data.color[] 与 data.size[],462 字节。尺码字符串与 SYB 逐字一致(2XL 60.0-67.5公斤)。

[必须] 颜色字符串对不上:接口返回虾皮原文 香芋紫 【雙梅花】純棉,而 SYB 经 Parse 剥离后是 香芋紫 純棉。写入档案前必须做同样的剥离,否则映射查不到,等于白做。

匹配成本

映射存在每个规格值上,不是每个组合上。线上已关联商品平均 1.5 个颜色 + 1.5 个尺码,最多 10 + 9。一个商品平均几次 AI 调用即可全覆盖,最坏 15 次。

方案

  1. 配置 GOAUTO_ERPGO_BASE_URL 与 GOAUTO_ERPGO_APIKEY,由 scripts/start-server.ps1 从本地 config.yaml 的 erpgo 段转为环境变量;服务端只读环境变量。线上需在 /etc/goauto/goauto.env 单独配置。
  2. 虾皮商品已关联 PDD 且 PDD 已采集时,拉取该商品完整颜色尺码,经与 Parse 相同的剥离后合并进档案(复用 shopeeproduct.Merge,它已保证保留既有映射)。
  3. 对全部未映射的规格值触发一次匹配。
  4. 记录 spec_sync_pdd_product_id 与 spec_sync_at。

[必须] 标记记录当时关联的是哪个 PDD 商品,而不是布尔值。跳过判据为 spec_sync_pdd_product_id == 当前 pdd_product_id,这样重新关联时标记自动失效,不依赖记得去清。

  1. 批量与单个创建图搜任务时,按该标记跳过已完整同步并匹配的商品。

非目标

  • 不纳入价格。接口返回 TWD、PDD 为 CNY,无汇率无法比较;ImageSearchPriceAllowed 目前零调用,已标注未接线。
  • 不改 stripBrackets(#288 的 A″ 延后)。
  • 不自动创建采购。

依赖与风险

  • [必须] 依赖 #289:拉取全量规格会把同一商品的多个塌缩规格一次性撞进同一个键(如虾皮 1355 的 6 个白色),显著放大 #288 的问题,甚至可能覆盖现有正确映射。必须先有塌缩检测。
  • 虾皮新增颜色时,SYB 送来档案里没有的值,标记仍在会导致被跳过。需在同步遇到未知规格时使标记失效或补拉。
  • 匹配由 AI 自动确认且无置信度门槛(#200 已取消),范围扩大意味着更多规格无人复核。补偿控制是既有的 image_search_linked 标记。

验收

  • 商品首次准备好后,其全部颜色尺码写入档案并完成匹配。
  • 同一虾皮商品的其它颜色 SYB 订单无需再采集、无需再点匹配即可创建采购。
  • 重新关联到其它 PDD 商品后,标记自动失效。
  • 已完整同步并匹配的商品在批量与单个创建图搜时被跳过,并有可读提示。
  • 接口不可用或超时不影响采集结果提交。
  • 凭据不出现在代码、日志、工单与文档中。

验证

go build ./...;go test ./app/goauto/task/... ./app/goauto/purchase/... ./app/goauto/shopeeproduct/...;Web 构建。

文档影响

新增外部接口依赖与规格同步流程,需更新 docs/08-agent-api-contract.md 与架构、业务规则页面。

> 依据 #288 的评估与 2026-09-16 的讨论。依赖 #289(塌缩检测)先行。 ## 原始需求 用户原话要点:「同个蝦皮商品有多个 syb 订单时,只要其中一个颜色采集匹配后,其他颜色的 syb 订单不需要再次采集和匹配,可以直接采购」。 用户已提供接口:按虾皮商品 id 返回该商品的全部颜色与尺码。 ## 已确认的事实 **采集本就不需要重复**:采集按 PDD 商品进行(`collection_eligibility.go` 的判定链从 SYB 明细走到 `pdd.ID`,无颜色条件),同一虾皮商品的多个颜色共用一个 PDD 商品。实测 PDD 8479 一次采集即拿到 5 个颜色的完整规格。 **匹配无法省略但可以不用人点**:映射按规格值逐个保存,`白色 → PDD 某值` 推导不出 `黑色 → ?`。但触发可以自动化。 **规格滞后是问题根源**:虾皮档案的颜色尺码是从 SYB 明细增量累积的(`mergeParsedSpec`),SYB 送来什么才有什么。已有映射的商品最近 2 天仍新增 28 条明细、涉及 17 个商品,其中不少是全新的颜色尺码组合——所以「弄好一次」现在不成立。 **接口可用**:返回 `data.color[]` 与 `data.size[]`,462 字节。尺码字符串与 SYB 逐字一致(`2XL 60.0-67.5公斤`)。 `[必须]` **颜色字符串对不上**:接口返回虾皮原文 `香芋紫 【雙梅花】純棉`,而 SYB 经 `Parse` 剥离后是 `香芋紫 純棉`。写入档案前必须做同样的剥离,否则映射查不到,等于白做。 ## 匹配成本 映射存在每个规格值上,不是每个组合上。线上已关联商品平均 1.5 个颜色 + 1.5 个尺码,最多 10 + 9。一个商品平均几次 AI 调用即可全覆盖,最坏 15 次。 ## 方案 1. 配置 `GOAUTO_ERPGO_BASE_URL` 与 `GOAUTO_ERPGO_APIKEY`,由 `scripts/start-server.ps1` 从本地 `config.yaml` 的 `erpgo` 段转为环境变量;服务端只读环境变量。线上需在 `/etc/goauto/goauto.env` 单独配置。 2. 虾皮商品已关联 PDD 且 PDD 已采集时,拉取该商品完整颜色尺码,经与 `Parse` 相同的剥离后合并进档案(复用 `shopeeproduct.Merge`,它已保证保留既有映射)。 3. 对全部未映射的规格值触发一次匹配。 4. 记录 `spec_sync_pdd_product_id` 与 `spec_sync_at`。 `[必须]` 标记记录**当时关联的是哪个 PDD 商品**,而不是布尔值。跳过判据为 `spec_sync_pdd_product_id == 当前 pdd_product_id`,这样重新关联时标记自动失效,不依赖记得去清。 5. 批量与单个创建图搜任务时,按该标记跳过已完整同步并匹配的商品。 ## 非目标 - 不纳入价格。接口返回 TWD、PDD 为 CNY,无汇率无法比较;`ImageSearchPriceAllowed` 目前零调用,已标注未接线。 - 不改 `stripBrackets`(#288 的 A″ 延后)。 - 不自动创建采购。 ## 依赖与风险 - `[必须]` 依赖 #289:拉取全量规格会把同一商品的多个塌缩规格一次性撞进同一个键(如虾皮 1355 的 6 个白色),显著放大 #288 的问题,甚至可能覆盖现有正确映射。必须先有塌缩检测。 - 虾皮新增颜色时,SYB 送来档案里没有的值,标记仍在会导致被跳过。需在同步遇到未知规格时使标记失效或补拉。 - 匹配由 AI 自动确认且无置信度门槛(#200 已取消),范围扩大意味着更多规格无人复核。补偿控制是既有的 `image_search_linked` 标记。 ## 验收 - [ ] 商品首次准备好后,其全部颜色尺码写入档案并完成匹配。 - [ ] 同一虾皮商品的其它颜色 SYB 订单无需再采集、无需再点匹配即可创建采购。 - [ ] 重新关联到其它 PDD 商品后,标记自动失效。 - [ ] 已完整同步并匹配的商品在批量与单个创建图搜时被跳过,并有可读提示。 - [ ] 接口不可用或超时不影响采集结果提交。 - [ ] 凭据不出现在代码、日志、工单与文档中。 ## 验证 `go build ./...`;`go test ./app/goauto/task/... ./app/goauto/purchase/... ./app/goauto/shopeeproduct/...`;Web 构建。 ## 文档影响 新增外部接口依赖与规格同步流程,需更新 `docs/08-agent-api-contract.md` 与架构、业务规则页面。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#290