feat(web): 虾皮商品详情页提供全档案规格匹配入口,补救同步补入值的匹配遗漏 #296

Closed
opened 2026-09-16 14:56:13 +08:00 by ila · 1 comment
Owner

来源:2026-09-16 验收 #293 时发现的实现缺口。

问题

MatchArchiveSpecs(#293)只在图搜关联成功的钩子里被调用。档案里那些没有对应 SYB 订单的规格值——即 #290 从虾皮接口同步补进来的值——一旦第一次匹配失败,就再也没有入口重跑。

SYB 商品页的「AI 匹配」按钮走的是按明细的 BatchSpecMatch,遍历 SYB 明细,碰不到这些值。唯一的补救办法是重新走一遍图搜采集,代价过高且成功率不满。

实测:虾皮 1528 同步补进 黑色、薑黃色、橘色、湖藍色、墨綠色 五个颜色,其中 黑色 在 PDD 8514 里唯一对应,首次匹配抽风失败后无法重跑。

方案

在虾皮商品详情页提供一个手动入口,对该商品档案中所有未映射的规格值跑一轮 MatchArchiveSpecs,并回显 confirmed / skipped / failed 计数与代表性原因。

设计证据

复用现有规范,不新增组件形态:按钮样式、计数角标、结果回显沿用 SYB 商品页「AI 匹配」按钮与批量结果对话框的既有做法(web/src/views/goauto/syb-products/index.vue)。属于现有界面的小范围调整,按 AGENTS.md「明确复用的现有规范」一档。

非目标

  • [必须] 不自动创建采购。匹配只把明细推到「采购就绪」,创建采购仍由人点击。
  • 不改 MatchArchiveSpecs 的判据,不放宽候选校验与可售 SKU 校验。
  • 不改 SYB 商品页「AI 匹配」按钮的行为与候选集合。
  • 不做定时自动重跑。

依赖

与 #295(匹配重试)互补但不互相阻塞:#295 减少抽风导致的遗漏,本单提供遗漏之后的补救手段。

验收

  • 虾皮商品详情页能对该商品跑一轮全档案匹配。
  • 结果显示 confirmed / skipped / failed 计数与代表性原因。
  • 已确认的既有映射不被覆盖或破坏。
  • 商品未关联 PDD 或 PDD 未采集完成时,入口明确不可用并说明原因。
  • 不产生任何采购任务。

验证

go test ./app/goauto/purchase/...;Web 构建;本地以虾皮 1528 复验。

文档影响

新增采购员可见入口与接口,需更新 docs/08-agent-api-contract.md 与对应 Wiki 页面。

> 来源:2026-09-16 验收 #293 时发现的实现缺口。 ## 问题 `MatchArchiveSpecs`(#293)只在图搜关联成功的钩子里被调用。档案里那些**没有对应 SYB 订单**的规格值——即 #290 从虾皮接口同步补进来的值——一旦第一次匹配失败,就再也没有入口重跑。 SYB 商品页的「AI 匹配」按钮走的是按明细的 `BatchSpecMatch`,遍历 SYB 明细,碰不到这些值。唯一的补救办法是重新走一遍图搜采集,代价过高且成功率不满。 实测:虾皮 1528 同步补进 `黑色`、`薑黃色`、`橘色`、`湖藍色`、`墨綠色` 五个颜色,其中 `黑色` 在 PDD 8514 里唯一对应,首次匹配抽风失败后无法重跑。 ## 方案 在虾皮商品详情页提供一个手动入口,对该商品档案中所有未映射的规格值跑一轮 `MatchArchiveSpecs`,并回显 confirmed / skipped / failed 计数与代表性原因。 ## 设计证据 复用现有规范,不新增组件形态:按钮样式、计数角标、结果回显沿用 SYB 商品页「AI 匹配」按钮与批量结果对话框的既有做法(`web/src/views/goauto/syb-products/index.vue`)。属于现有界面的小范围调整,按 AGENTS.md「明确复用的现有规范」一档。 ## 非目标 - `[必须]` 不自动创建采购。匹配只把明细推到「采购就绪」,创建采购仍由人点击。 - 不改 `MatchArchiveSpecs` 的判据,不放宽候选校验与可售 SKU 校验。 - 不改 SYB 商品页「AI 匹配」按钮的行为与候选集合。 - 不做定时自动重跑。 ## 依赖 与 #295(匹配重试)互补但不互相阻塞:#295 减少抽风导致的遗漏,本单提供遗漏之后的补救手段。 ## 验收 - [ ] 虾皮商品详情页能对该商品跑一轮全档案匹配。 - [ ] 结果显示 confirmed / skipped / failed 计数与代表性原因。 - [ ] 已确认的既有映射不被覆盖或破坏。 - [ ] 商品未关联 PDD 或 PDD 未采集完成时,入口明确不可用并说明原因。 - [ ] 不产生任何采购任务。 ## 验证 `go test ./app/goauto/purchase/...`;Web 构建;本地以虾皮 1528 复验。 ## 文档影响 新增采购员可见入口与接口,需更新 `docs/08-agent-api-contract.md` 与对应 Wiki 页面。
Author
Owner

关闭:功能已存在

建单前未核查既有实现,这是我的疏漏。

虾皮商品详情页已经有「一键匹配颜色和尺码」按钮(ShopeeProductDetailDrawer.vue:26),调用 POST /api/admin/v1/shopee-products/:productId/specs/mapping/auto-match。其 autoMatchRefs 遍历的是档案里所有规格值,不受 SYB 明细限制:

func autoMatchRefs(specs []SpecDimension, role string) []autoMatchRef {
    for _, dimension := range specs {
        if dimension.Role != role { continue }
        for _, value := range dimension.Values {
            refs = append(refs, autoMatchRef{...})
        }
    }
}

本地实测(虾皮 1528):

状态分布  unmatched=13  preserved=8  confirmed=1
3XL  confirmed -> 3XL 建议126-135斤  「格式统一后唯一匹配」
黑色  unmatched -> 「AI 未给出可靠建议,请人工选择」

同步补入的值确实被覆盖到了,3XL 也补上了。所以本单描述的缺口并不成立——采购员已有补救手段,无需新增入口。

黑色 仍未匹上是 AI 抽风,属于 #295 的范围。该按钮走的是 shopeeproduct.suggestMappings 这条独立路径,#295 本次未接入重试,已在 #295 记为遗留。

状态

关闭,不实施。

## 关闭:功能已存在 建单前未核查既有实现,这是我的疏漏。 虾皮商品详情页**已经有**「一键匹配颜色和尺码」按钮(`ShopeeProductDetailDrawer.vue:26`),调用 `POST /api/admin/v1/shopee-products/:productId/specs/mapping/auto-match`。其 `autoMatchRefs` 遍历的是**档案里所有规格值**,不受 SYB 明细限制: ```go func autoMatchRefs(specs []SpecDimension, role string) []autoMatchRef { for _, dimension := range specs { if dimension.Role != role { continue } for _, value := range dimension.Values { refs = append(refs, autoMatchRef{...}) } } } ``` 本地实测(虾皮 1528): ``` 状态分布 unmatched=13 preserved=8 confirmed=1 3XL confirmed -> 3XL 建议126-135斤 「格式统一后唯一匹配」 黑色 unmatched -> 「AI 未给出可靠建议,请人工选择」 ``` 同步补入的值确实被覆盖到了,`3XL` 也补上了。所以本单描述的缺口并不成立——采购员已有补救手段,无需新增入口。 `黑色` 仍未匹上是 AI 抽风,属于 #295 的范围。该按钮走的是 `shopeeproduct.suggestMappings` 这条独立路径,#295 本次未接入重试,已在 #295 记为遗留。 ## 状态 关闭,不实施。
ila closed this issue 2026-09-16 14:59:44 +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#296