顺运宝订单 2608100A0SHGN5 在顺运宝页面显示“PDD 采集中”,但采集采购模块按顺运宝订单号、顺运宝明细 ID 和 PDD 商品 ID 均找不到对应任务。已确认该 PDD 商品的 collect_status=collecting 已超过 15 分钟,且数据库中不存在任何关联采集任务。
2608100A0SHGN5
collect_status=collecting
复现路径:
根因是任务删除和 PDD 采集状态没有一起回收;顺运宝阶段只读取 PDD 商品状态,不核对有效采集任务和超时时间;从顺运宝批量去重创建任务时没有保存一个任务对应一个或多个顺运宝明细的来源关系。
collecting
pending
admin/repository/mysql_db.go
task_syb_sources(task_id, syb_id, created_at)
(task_id, syb_id)
admin/repository/task.go
admin/service/shopee_pdd.go
admin/service/task.go
admin/repository/syb.go
admin/service/syb.go
collect_status
从 admin/ 执行:
admin/
$env:GOTOOLCHAIN="go1.23.0" go test ./... -count=1 go build ./... go vet ./... Remove-Item Env:GOTOOLCHAIN
使用库名以 _test 结尾的 MySQL 8.4 隔离测试库执行:
_test
$env:CMAUTOBUY_MYSQL_TEST="1" go test ./repository -run "TestMySQLMigrate" -count=1 Remove-Item Env:CMAUTOBUY_MYSQL_TEST
浏览器验证:用两个映射到同一 PDD 商品的顺运宝明细批量建任务,分别按两个订单号搜索;删除最后一条任务后返回顺运宝页面,确认出现可恢复状态并可重新创建。
pending/assigned/claimed
已按确认方案完成:
task_syb_sources
验证:固定 Go 1.23.0 下 go test ./... -count=1、go build ./...、go vet ./... 和 git diff --check 全部通过。
go test ./... -count=1
go build ./...
go vet ./...
git diff --check
未验证:真实 MySQL 8.4 _test 测试未执行。已尝试 autobuy_test,线上 buy 账号按安全规则仅有生产 autobuy 权限;本机只有 MySQL 5.7。未使用、清理或迁移生产 schema。v12 的首次建库、v11 升级、重放和错误形状用例已编写,部署前仍需提供独立 MySQL 8.4 测试库执行。
autobuy_test
buy
autobuy
提交:
9e32898
fix: 修复顺运宝采集任务孤儿状态 (#165)
f5d91cd
docs: 归档任务 #165
归档:docs/task/165-修复顺运宝采集任务孤儿状态.md
docs/task/165-修复顺运宝采集任务孤儿状态.md
/opt/cmautobuy/releases/9e32898/
078723d246cf578104bfe79dcd2fd43eaee6123f33fe46487b636fbb39f8fd88
/opt/cmautobuy/backups/autobuy-before-165-20260811T172735.sql.gz
600
127.0.0.1:18080
https://buy.833729.com/login
部署前已发现生产 schema 被另一处 Admin 提前推进到 v12,而服务器仍运行只支持 v11 的旧二进制。本次切换消除了旧二进制重启后无法启动的兼容风险。
订单 2608100A0SHGN5 在部署后收到 Client 的实际采集失败上报,当前 PDD 状态为 failed 且没有有效任务;它已不再是孤儿 collecting,页面应显示采集失败并允许重新创建。
failed
仍未执行独立 MySQL 8.4 _test 清库型测试,原因和边界见上一条实施记录;没有拿生产 schema 代替测试库。
部署归档更新提交:b97b108。
b97b108
用户于 2026-08-12 明确验收通过。已确认本地归档 docs/task/165-修复顺运宝采集任务孤儿状态.md 存在,现关闭工单。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
顺运宝订单
2608100A0SHGN5在顺运宝页面显示“PDD 采集中”,但采集采购模块按顺运宝订单号、顺运宝明细 ID 和 PDD 商品 ID 均找不到对应任务。已确认该 PDD 商品的collect_status=collecting已超过 15 分钟,且数据库中不存在任何关联采集任务。复现路径:
根因是任务删除和 PDD 采集状态没有一起回收;顺运宝阶段只读取 PDD 商品状态,不核对有效采集任务和超时时间;从顺运宝批量去重创建任务时没有保存一个任务对应一个或多个顺运宝明细的来源关系。
做什么 / 不做什么
collecting回收到pending。collecting明确显示为“PDD 采集中(超时)”,并允许重新创建采集任务。怎么做
admin/repository/mysql_db.go追加可重放并带形状自检的 MySQL 迁移,创建task_syb_sources(task_id, syb_id, created_at),以(task_id, syb_id)为主键并建立顺运宝明细反查索引;迁移只回收没有有效采集任务的孤儿collecting商品。admin/repository/task.go增加来源批量写入、按顺运宝订单号/明细 ID 搜索、删除前查询相关 PDD 商品及删除后有效任务检查、条件回收状态的仓储方法。admin/service/shopee_pdd.go保留批量按 PDD 商品去重,但同时聚合同一商品的全部顺运宝明细,在建任务事务内写入来源关系。admin/service/task.go将任务删除和孤立采集状态回收放在同一事务中。admin/repository/syb.go/admin/service/syb.go在顺运宝上下文中核对有效采集任务及更新时间,增加显式超时阶段和恢复动作;错误状态靠文字与动作表达,不只依赖颜色。验收标准
collect_status从collecting原子回收到pending;仍有其他有效任务时不回收。collecting但无有效任务或已超过 15 分钟时,显示“PDD 采集中(超时)”并提供重新创建采集任务入口。怎么验证
从
admin/执行:使用库名以
_test结尾的 MySQL 8.4 隔离测试库执行:浏览器验证:用两个映射到同一 PDD 商品的顺运宝明细批量建任务,分别按两个订单号搜索;删除最后一条任务后返回顺运宝页面,确认出现可恢复状态并可重新创建。
风险和回退
pending/assigned/claimed的同商品采集任务,避免覆盖仍在执行的状态。collecting改为pending,允许重新采集,不删除已采集详情。实施完成,状态:待验收
已按确认方案完成:
task_syb_sources,保存一条采集任务的多个顺运宝明细来源;迁移包含孤儿collecting回收和字段、索引、外键、级联规则自检。pending。验证:固定 Go 1.23.0 下
go test ./... -count=1、go build ./...、go vet ./...和git diff --check全部通过。未验证:真实 MySQL 8.4
_test测试未执行。已尝试autobuy_test,线上buy账号按安全规则仅有生产autobuy权限;本机只有 MySQL 5.7。未使用、清理或迁移生产 schema。v12 的首次建库、v11 升级、重放和错误形状用例已编写,部署前仍需提供独立 MySQL 8.4 测试库执行。提交:
9e32898fix: 修复顺运宝采集任务孤儿状态 (#165)f5d91cddocs: 归档任务 #165归档:
docs/task/165-修复顺运宝采集任务孤儿状态.md生产部署完成
9e32898/opt/cmautobuy/releases/9e32898/078723d246cf578104bfe79dcd2fd43eaee6123f33fe46487b636fbb39f8fd88/opt/cmautobuy/backups/autobuy-before-165-20260811T172735.sql.gz,权限600,gzip 校验通过127.0.0.1:18080https://buy.833729.com/login返回 200task_syb_sources存在,启动迁移/自检错误为 0collecting但没有有效采集任务”的记录数为 0部署前已发现生产 schema 被另一处 Admin 提前推进到 v12,而服务器仍运行只支持 v11 的旧二进制。本次切换消除了旧二进制重启后无法启动的兼容风险。
订单
2608100A0SHGN5在部署后收到 Client 的实际采集失败上报,当前 PDD 状态为failed且没有有效任务;它已不再是孤儿collecting,页面应显示采集失败并允许重新创建。仍未执行独立 MySQL 8.4
_test清库型测试,原因和边界见上一条实施记录;没有拿生产 schema 代替测试库。部署归档更新提交:
b97b108。用户于 2026-08-12 明确验收通过。已确认本地归档
docs/task/165-修复顺运宝采集任务孤儿状态.md存在,现关闭工单。