所属 MVP:#275 | 来源:用户 2026-09-14 需求讨论(原话摘要见 #275)
采购员可以在 SYB 商品页多选商品,一次性发起图搜任务。
#278。
shopee_product
不新增菜单、不新增页面。发起入口就在采购员已经在用的 SYB 商品页。
现有页面新增多选与一个批量操作按钮。需提供标注截图或明确复用现有批量操作规范后再实施。
Go 单元测试 + Web 构建 + .\scriptserify.ps1 -Component all。
.\scriptserify.ps1 -Component all
批量创建会长时间占用设备。依赖 #277 的调度垫底保证采购任务可插队。
新增用户操作入口,需更新对应 Wiki 的业务规则或操作说明页面。
release/283
c80d0c9
main
c14f5f5
go build ./...
go test ./...
npm run build:prod
POST /api/admin/v1/collection-tasks/image-search/batch
task/image_search.go
ShopeeProductID
groups
IMAGE_SEARCH_ALREADY_LINKED
批次上限(方案第 3 条 / 验收第 2 条)。 代码中只有单张参考图 imageSearchMaxBytes = 10MB 的大小限制,没有任何"一次最多 N 个任务"的拦截,也没有预计耗时提示。
imageSearchMaxBytes = 10MB
该项的风险在当前状态下未被任何机制缓解:#277 的调度垫底(采购 > 采集 > 图搜)同样未实现,因此一次大批量创建会无限制占用设备,且采购任务无法插队。
本工单要求"需提供标注截图或明确复用现有批量操作规范后再实施",未见相关记录。
状态维持待实施。
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"}
{"code":401,...}
最后两行是关键对照:图搜接口返回 401 而非 404,证明新路由已注册。
回退方式:把 current 软链切回 20260914-be03972-r2 后重启。两条迁移均为加列与放宽约束,不阻碍回退到旧二进制。
current
20260914-be03972-r2
提交:be491c7、c80d0c9、56706a0、ba7d2a6、b7babfb。
be491c7
56706a0
ba7d2a6
b7babfb
imageSearchMaxBatchTasks = 50,作用于去重后的任务数,在 groups 构建之后、创建任何任务之前判定,超限整批拒绝(IMAGE_SEARCH_BATCH_TOO_LARGE),不部分创建。按单次图搜 20~40 秒估算,50 个任务约占用设备 17~33 分钟。Web 确认对话框显示去重后任务数与预计耗时区间,超限时按钮禁用。
imageSearchMaxBatchTasks = 50
IMAGE_SEARCH_BATCH_TOO_LARGE
新增三个测试,其中关键一条是「入参 55 条明细全部指向同一个蝦皮商品,去重后 1 个任务,应当成功」,证明上限确实作用于去重后条数。
[必须] 上限实现为普通常量,不可由环境变量覆盖。确认对话框必须在提交前禁用按钮,前端持有同一个数字;env 覆盖只会让服务端与前端静默不一致。改动时两侧必须同改。(实施中一度做成可 env 覆盖,审核时已移除。)
[必须]
go test ./app/goauto/task/... 通过;npm run build:prod 通过。
go test ./app/goauto/task/...
已上线,保持待验收。界面变化的标注截图或复用规范说明仍未提供(工单设计证据要求),验收时需补。
No dependencies set.
The note is not visible to the blocked user.
目标
采购员可以在 SYB 商品页多选商品,一次性发起图搜任务。
前置依赖
#278。
方案
shopee_product去重:一个虾皮商品有几十条 SYB 明细共用同一张图,必须合并为一个任务,不能搜几十遍。明确不做
不新增菜单、不新增页面。发起入口就在采购员已经在用的 SYB 商品页。
设计证据
现有页面新增多选与一个批量操作按钮。需提供标注截图或明确复用现有批量操作规范后再实施。
验收
验证
Go 单元测试 + Web 构建 +
.\scriptserify.ps1 -Component all。风险
批量创建会长时间占用设备。依赖 #277 的调度垫底保证采购任务可插队。
文档影响
新增用户操作入口,需更新对应 Wiki 的业务规则或操作说明页面。
核对范围与方法(2026-09-15)
release/283@c80d0c9;基线main@c14f5f5。go build ./...、go test ./...(server)、npm run build:prod(web)、逐条对照工单验收项读取 diff。结论:部分完成,不达标
已完成
POST /api/admin/v1/collection-tasks/image-search/batch+ SYB 商品页「图搜采集」按钮与两步对话框(确认 / 结果)。shopee_product去重已实现(task/image_search.go中以ShopeeProductID为键的groups归并,多条 SYB 明细合并为一个任务)。验收第 1 条满足。IMAGE_SEARCH_ALREADY_LINKED) / 失败。验收第 3、4 条满足。npm run build:prod通过。未完成的验收项
批次上限(方案第 3 条 / 验收第 2 条)。 代码中只有单张参考图
imageSearchMaxBytes = 10MB的大小限制,没有任何"一次最多 N 个任务"的拦截,也没有预计耗时提示。该项的风险在当前状态下未被任何机制缓解:#277 的调度垫底(采购 > 采集 > 图搜)同样未实现,因此一次大批量创建会无限制占用设备,且采购任务无法插队。
设计证据
本工单要求"需提供标注截图或明确复用现有批量操作规范后再实施",未见相关记录。
状态维持待实施。
上线信息(共用)
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后重启。两条迁移均为加列与放宽约束,不阻碍回退到旧二进制。实施
提交:
be491c7、c80d0c9、56706a0、ba7d2a6、b7babfb。POST /api/admin/v1/collection-tasks/image-search/batch,SYB 商品页「图搜采集」按钮与两步对话框。shopee_product去重(以ShopeeProductID为键的groups归并)。上一轮评论提出的缺口已补:批次上限
imageSearchMaxBatchTasks = 50,作用于去重后的任务数,在groups构建之后、创建任何任务之前判定,超限整批拒绝(IMAGE_SEARCH_BATCH_TOO_LARGE),不部分创建。按单次图搜 20~40 秒估算,50 个任务约占用设备 17~33 分钟。Web 确认对话框显示去重后任务数与预计耗时区间,超限时按钮禁用。新增三个测试,其中关键一条是「入参 55 条明细全部指向同一个蝦皮商品,去重后 1 个任务,应当成功」,证明上限确实作用于去重后条数。
[必须]上限实现为普通常量,不可由环境变量覆盖。确认对话框必须在提交前禁用按钮,前端持有同一个数字;env 覆盖只会让服务端与前端静默不一致。改动时两侧必须同改。(实施中一度做成可 env 覆盖,审核时已移除。)验证
go test ./app/goauto/task/...通过;npm run build:prod通过。状态
已上线,保持待验收。界面变化的标注截图或复用规范说明仍未提供(工单设计证据要求),验收时需补。