所属 MVP:#275 | 来源:用户 2026-09-14 需求讨论(原话摘要见 #275)
图搜自动建立的 shopee↔PDD 关联带「图搜」标注;采购员手动改过关联后标注自动消失;可按标注筛选待核关联。
shopee_product.pdd_product_id
web/src/views/goauto/syb-products/index.vue
shopee-products/index.vue
#278。
shopee_product
现有链路里,AI 规格匹配发生在采购时(purchase/lifecycle.go、purchase/batch.go),采集完成不触发任何匹配——图搜任务与现有临时任务在这一点行为一致,本 MVP 不改变。
purchase/lifecycle.go
purchase/batch.go
但由此产生一条无声路径:
图搜取第一个结果(可能错) -> 建立关联(带标注) -> 采购时 AI 在这个商品上匹配规格 -> 匹配成功 -> 创建 PDD 订单
商品若搜错,AI 依然会匹配成功(同款商品的颜色尺码当然对得上)。标注只显示在虾皮/SYB 商品页,采购流程里看不见,于是一个没人核过的关联会一路走到创建订单——而创建订单是不可逆操作。
标注的意义本就是"提醒人这个没核过",不送到该看见的人眼前等于没有提醒。
purchase.BatchPreviewItem 已经携带 PDDProductID / PDDGoodsID / PDDTitle,在此追加一个布尔字段即可把标注带到批量采购预览与确认视图;采购任务列表同样显示。
purchase.BatchPreviewItem
PDDProductID
PDDGoodsID
PDDTitle
现有界面的小范围调整(一个标记 + 一个筛选)。需提供标注截图或明确复用现有规范后再实施。
Go 单元测试 + Web 构建 + .\scriptserify.ps1 -Component all。
.\scriptserify.ps1 -Component all
本工单跨 server / web / android 三个交付单元,且现在还覆盖采购侧的只读显示,偏胖。若实施时验收困难,可把 Agent 列表标记拆到 #277,或把采购侧显示单独拆一单。
数据结构与业务规则变化,需更新对应 Wiki 页面。
release/283
c80d0c9
main
c14f5f5
go build ./...
go test ./...
npm run build:prod
shopee_product.image_search_linked
1789400100000_image_search_link_marker.go
task/image_search_link.go
Where("id = ? AND pdd_product_id IS NULL AND image_search_linked = ?", product.ID, false)
Agent 执行期间发生的人工改动会因该 CAS 谓词而胜出,不会被覆盖。
shopeeproduct.LinkPDD
"image_search_linked": false
app/goauto/shopeeproduct
app/goauto/purchase
采购侧可见(方案第 5 条 / 2026-09-14 追加)。 purchase.BatchPreviewItem 中没有任何图搜相关字段,批量采购预览与确认视图看不到该关联是机器建立、未经人工核对。
对应验收第 5、6 条未满足。本条的存在理由已写在工单正文:标注只显示在商品页而不显示在采购页,等于提醒没有送到该看见的人眼前,一个没人核过的关联会无声走到创建订单。
Agent 采集任务列表行显示来源标记(方案第 4 条)。Android 侧本分支无相关改动。
release/283 中 purchase/batch.go 的 8 行改动(改写 ReasonCode / Reason / NextAction 为 CodeMappingRequired)属于 #283,不属于本工单。不应被认作方案第 5 条已完成;且本工单明确要求只读地触及采购视图、不改变采购门禁,该改动与本工单无关。
ReasonCode
Reason
NextAction
CodeMappingRequired
状态维持待实施。
1d01186
be03972..1d01186
/home/goauto/releases/20260915-1d01186
65e404c4721d592a
systemctl is-active goauto.service
active
127.0.0.1:8010
collection_task
外部入口验证:
GET /
GET /api/admin/v1/collection-tasks
{"code":401,"msg":"cookie token is empty"}
POST /api/admin/v1/collection-tasks/image-search/batch
{"code":401,...}
最后两行是关键对照:图搜接口返回 401 而非 404,证明新路由已注册。
回退方式:把 current 软链切回 20260914-be03972-r2 后重启。两条迁移均为加列与放宽约束,不阻碍回退到旧二进制。
current
20260914-be03972-r2
提交:b4dc7fc、1c99891、36d1f82、5a7e219、804448e、90c1668、a3cf989、c2c0bae。
b4dc7fc
1c99891
36d1f82
5a7e219
804448e
90c1668
a3cf989
c2c0bae
1789400100000
WHERE id = ? AND pdd_product_id IS NULL AND image_search_linked = false
image_search_linked: false
purchase.BatchPreviewItem 新增 ImageSearchLinked,从 loadBatchPreviewDataset 已加载的 ShopeeProduct 行读取,无新增查询;purchase.AdminTaskItem 新增同名字段,loadImageSearchLinked 批量查询接入 AdminList 与 AdminDetail。Web 侧在批量采购确认对话框与采购任务列表显示「图搜未核」标记,并给出「其中 N 条为图搜自动关联,尚未人工核对」汇总。
ImageSearchLinked
loadBatchPreviewDataset
ShopeeProduct
purchase.AdminTaskItem
loadImageSearchLinked
AdminList
AdminDetail
[必须] 该字段只读展示,未修改 Eligible / ReasonCode / Reason / NextAction 的任何现有赋值。新增三个测试,其中一个是反向回归:已不合格的行在 ImageSearchLinked=true 时结论逐字不变。
[必须]
Eligible
ImageSearchLinked=true
另澄清:release/283 中 purchase/batch.go 改写 ReasonCode 的那段属于 #283,不属于本工单。
go test ./app/goauto/purchase/... ./app/goauto/shopeeproduct/... ./app/goauto/task/... 通过;npm run build:prod 通过。
go test ./app/goauto/purchase/... ./app/goauto/shopeeproduct/... ./app/goauto/task/...
已上线,保持待验收。界面变化的标注截图或复用规范说明仍未提供(工单设计证据要求),验收时需补。
No dependencies set.
The note is not visible to the blocked user.
目标
图搜自动建立的 shopee↔PDD 关联带「图搜」标注;采购员手动改过关联后标注自动消失;可按标注筛选待核关联。
当前事实
shopee_product.pdd_product_id(可空、非唯一)。web/src/views/goauto/syb-products/index.vue与shopee-products/index.vue。前置依赖
#278。
方案
shopee_product新增标注字段(布尔),默认 false。为什么采购侧也要显示
现有链路里,AI 规格匹配发生在采购时(
purchase/lifecycle.go、purchase/batch.go),采集完成不触发任何匹配——图搜任务与现有临时任务在这一点行为一致,本 MVP 不改变。但由此产生一条无声路径:
商品若搜错,AI 依然会匹配成功(同款商品的颜色尺码当然对得上)。标注只显示在虾皮/SYB 商品页,采购流程里看不见,于是一个没人核过的关联会一路走到创建订单——而创建订单是不可逆操作。
标注的意义本就是"提醒人这个没核过",不送到该看见的人眼前等于没有提醒。
实现位置
purchase.BatchPreviewItem已经携带PDDProductID/PDDGoodsID/PDDTitle,在此追加一个布尔字段即可把标注带到批量采购预览与确认视图;采购任务列表同样显示。明确不做
设计证据
现有界面的小范围调整(一个标记 + 一个筛选)。需提供标注截图或明确复用现有规范后再实施。
验收
验证
Go 单元测试 + Web 构建 +
.\scriptserify.ps1 -Component all。风险
可能的调整
本工单跨 server / web / android 三个交付单元,且现在还覆盖采购侧的只读显示,偏胖。若实施时验收困难,可把 Agent 列表标记拆到 #277,或把采购侧显示单独拆一单。
文档影响
数据结构与业务规则变化,需更新对应 Wiki 页面。
核对范围与方法(2026-09-15)
release/283@c80d0c9;基线main@c14f5f5。go build ./...、go test ./...(server)、npm run build:prod(web)、逐条对照工单验收项读取 diff。结论:部分完成,不达标
已完成
shopee_product.image_search_linked字段 + 迁移1789400100000_image_search_link_marker.go。task/image_search_link.go自动关联的并发保护写得正确:Agent 执行期间发生的人工改动会因该 CAS 谓词而胜出,不会被覆盖。
shopeeproduct.LinkPDD手动关联时写入"image_search_linked": false,清除逻辑正确。npm run build:prod通过;app/goauto/shopeeproduct、app/goauto/purchase包测试通过。未完成的验收项
采购侧可见(方案第 5 条 / 2026-09-14 追加)。
purchase.BatchPreviewItem中没有任何图搜相关字段,批量采购预览与确认视图看不到该关联是机器建立、未经人工核对。对应验收第 5、6 条未满足。本条的存在理由已写在工单正文:标注只显示在商品页而不显示在采购页,等于提醒没有送到该看见的人眼前,一个没人核过的关联会无声走到创建订单。
Agent 采集任务列表行显示来源标记(方案第 4 条)。Android 侧本分支无相关改动。
需要澄清的一处
release/283中purchase/batch.go的 8 行改动(改写ReasonCode/Reason/NextAction为CodeMappingRequired)属于 #283,不属于本工单。不应被认作方案第 5 条已完成;且本工单明确要求只读地触及采购视图、不改变采购门禁,该改动与本工单无关。状态维持待实施。
上线信息(共用)
1d01186,已推送be03972..1d01186到main。/home/goauto/releases/20260915-1d01186,二进制 SHA-256 前缀65e404c4721d592a(本地与服务器一致)。systemctl is-active goauto.service=active,监听127.0.0.1:8010。collection_task222 行、shopee_product26901 行,逐一相符。外部入口验证:
GET /GET /api/admin/v1/collection-tasks{"code":401,"msg":"cookie token is empty"}POST /api/admin/v1/collection-tasks/image-search/batch{"code":401,...}最后两行是关键对照:图搜接口返回 401 而非 404,证明新路由已注册。
回退方式:把
current软链切回20260914-be03972-r2后重启。两条迁移均为加列与放宽约束,不阻碍回退到旧二进制。实施
提交:
b4dc7fc、1c99891、36d1f82、5a7e219、804448e、90c1668、a3cf989、c2c0bae。shopee_product.image_search_linked字段与迁移1789400100000。task/image_search_link.go自动关联,CAS 谓词保证 Agent 执行期间的人工改动胜出:WHERE id = ? AND pdd_product_id IS NULL AND image_search_linked = false。shopeeproduct.LinkPDD手动关联时写入image_search_linked: false。上一轮评论提出的缺口已补:采购侧可见
purchase.BatchPreviewItem新增ImageSearchLinked,从loadBatchPreviewDataset已加载的ShopeeProduct行读取,无新增查询;purchase.AdminTaskItem新增同名字段,loadImageSearchLinked批量查询接入AdminList与AdminDetail。Web 侧在批量采购确认对话框与采购任务列表显示「图搜未核」标记,并给出「其中 N 条为图搜自动关联,尚未人工核对」汇总。[必须]该字段只读展示,未修改Eligible/ReasonCode/Reason/NextAction的任何现有赋值。新增三个测试,其中一个是反向回归:已不合格的行在ImageSearchLinked=true时结论逐字不变。另澄清:
release/283中purchase/batch.go改写ReasonCode的那段属于 #283,不属于本工单。验证
go test ./app/goauto/purchase/... ./app/goauto/shopeeproduct/... ./app/goauto/task/...通过;npm run build:prod通过。状态
已上线,保持待验收。界面变化的标注截图或复用规范说明仍未提供(工单设计证据要求),验收时需补。