Files
cmautobuy/docs/task/165-修复顺运宝采集任务孤儿状态.md
T

5.2 KiB
Raw Blame History

165 Admin:修复顺运宝采集中孤儿状态并建立任务来源关联

  • 类型:缺陷
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / 当前 Admin 闭环
  • 状态:已完成
  • 日期:2026-08-11
  • Gitea 工单:#165

背景与目标

顺运宝订单 2608100A0SHGN5 显示“PDD 采集中”,但采集采购模块不存在对应任务。 生产数据确认 PDD 商品仍为 collecting、更新时间已超过 15 分钟,按顺运宝明细、 订单号和 PDD 商品 ID 均查不到任务。目标是消除删除任务后的孤儿状态,提供明确恢复 入口,并让从顺运宝创建的采集任务可以按全部来源订单反查。

最终方案

  • 新增 MySQL v12 task_syb_sources 多对多关联表。顺运宝批量创建仍按 PDD 商品去重, 但任务与全部来源明细在同一事务写入;历史任务不做不可靠的来源猜测回填。
  • 任务关键字搜索通过来源表匹配顺运宝订单号和明细 ID,列表与状态统计复用同一条件。
  • 删除采集任务前记录相关 PDD 商品;删除后若已无 pending/assigned/claimed 采集任务, 在同一事务把仍为 collecting 的商品回收到 pending。有其他有效任务时保持不变。
  • 顺运宝上下文同时读取有效采集任务事实。collecting 超过 15 分钟、没有有效任务或 更新时间损坏时显示“PDD 采集中(超时)”,允许重新创建;正常进行中继续禁止重复。
  • MarkCollecting 和 MarkRecollecting 的原子条件同步支持“无有效任务”恢复,避免页面 提供恢复按钮但服务端仍按更新时间拒绝。
  • v12 迁移创建来源表、自检字段/索引/外键及级联规则,并把未删除且没有有效任务的 存量孤儿 collecting 安全回收到 pending。生产数据库在服务器部署前已由另一处 Admin 连接提前迁移到 v12;本次发布将服务器旧的 v11 二进制切换为兼容 v12 的版本。

改了哪些

  • admin/repository/mysql_db.go:追加 MySQL v12、存量状态修复和完整形状自检。
  • admin/repository/task.go、pdd.go、syb.go:来源写入与搜索、删除状态回收、原子 重建条件和有效采集任务查询。
  • admin/service/pdd.go、shopee_pdd.go、task.go、syb.go:来源聚合、事务编排、 超时阶段和恢复能力。
  • admin/templates/syb/detail_modal.html:超时状态显示“重新创建采集任务”。
  • admin/**/*_test.go:覆盖来源去重与搜索、重复创建防护、孤儿恢复、删除回收和 v12 迁移。
  • docs/admin/01-requirements.md、03-data-model.md、05-ui-specification.md:同步稳定规则。

验收结果

验收标准 结果
同一 PDD 商品只建一条任务并保存全部顺运宝来源 通过(自动化用例已编写;真实 MySQL 执行环境未提供)
按任一来源订单号或明细 ID 可搜索任务,统计与列表一致 通过(自动化用例已编写;真实 MySQL 执行环境未提供)
删除最后有效采集任务回收状态,有其他任务时不回收 通过(自动化用例已编写;真实 MySQL 执行环境未提供)
无任务、超时或损坏时间显示明确恢复状态并可重建 通过(阶段单测通过;数据库链路用例已编写)
正常未超时且有有效任务时禁止重复创建 通过(自动化用例已编写;真实 MySQL 执行环境未提供)
MySQL v12 首次建库、v11 升级、重放和错误形状拒绝 生产 v12 自检与重启通过;独立 _test 用例未执行
Client 四接口和 Admin 固定 Go 1.23 回归 通过;未修改 Client 接口契约

测试

  • 执行的命令:在 admin/ 设置 GOTOOLCHAIN=go1.23.0 后执行 go test ./... -count=1、go build ./...、go vet ./...,并执行 git diff --check。
  • 结果:全部通过;未引入新依赖,模板可以正常解析,代码提交为 9e32898。
  • 生产部署:构建 Linux amd64 二进制,SHA-256 为 078723d246cf578104bfe79dcd2fd43eaee6123f33fe46487b636fbb39f8fd88;部署前备份为 /opt/cmautobuy/backups/autobuy-before-165-20260811T172735.sql.gz,权限 600 且 gzip 校验通过。服务切换到 /opt/cmautobuy/releases/9e32898/ 后保持 active/enabled, 仅监听 127.0.0.1:18080;本机根路径返回 303,公网登录页返回 200,近期启动错误为 0。 生产 schema 为 v12,task_syb_sources 存在,未删除商品中“采集中但无有效任务”的 数量为 0。订单 2608100A0SHGN5 在部署后收到 Client 采集失败上报,当前为 failed 且无有效任务,可从页面重新创建,不再是孤儿 collecting。
  • 没验证到的部分:未在独立 MySQL 8.4 _test 库执行数据库型测试。已尝试连接 autobuy_test,但线上 buy 按安全规则只拥有生产 autobuy 权限;本机监听实例为 MySQL 5.7,不符合项目要求。没有在生产 schema 执行清库型测试;尚未使用生产账号 登录浏览器人工核对超时筛选、订单号搜索和重新创建按钮。

相关提交

  • 9e32898 修复顺运宝采集任务孤儿状态