dy-dashboard/vault/知识库/工作指南/训练记录/2026-08-24-下单备份回退订单未回到待下单.md
2026-10-28 11:14:17 +08:00

1.6 KiB
Raw Permalink Blame History

1. 下单备份管理回退订单后未回到待下单管理

旭东 → OpenClaw:

发现一个异常,从下单备份管理里面回退订单的时候,订单没有回退到待下单管理中

OpenClaw 响应: 已定位并修复。

根因: pending_orders 表存在唯一索引 uk_product_code (product_code),但回退订单的设计是「保留原下单行为历史备份(rolled_back)+ 复制一条新 pending 记录」,需要同一商品存在多行。唯一索引导致回退时 INSERT 新 pending 行触发唯一约束冲突,订单已删除但待下单记录未生成。

错误日志铁证:

pymysql.err.IntegrityError: (1062, "Duplicate entry '【SEDATE】FSS7482' for key 'pending_orders.uk_product_code'")
pymysql.err.IntegrityError: (1062, "Duplicate entry 'JWTBS-RY-5575-ALJK' for key 'pending_orders.uk_product_code'")

修复内容:

  1. pending_orders 移除 uk_product_code 唯一索引,改为普通索引 idx_product_code,支持同一商品多次下单历史
  2. migrate_db.py 增加自动迁移:检测并移除唯一索引、补建普通索引
  3. add_pending 更新逻辑改为按 status='pending' 行的 id 更新,不再依赖唯一索引的 ON DUPLICATE KEY UPDATE
  4. 修复被卡住的两条 rolled_back 记录(JWTBS-RY-5575-ALJK、【SEDATE】FSS7482),补建 pending 待下单行

验证:

  • 迁移执行成功(移除唯一索引、新增普通索引)
  • 两条记录已补建 pending 行(id 899、900)
  • 测试服务重启 HTTP 200
  • Git 提交 8e88989(routes/purchase.py + migrate_db.py)