migration_20260408_biz_order_three_status.sql 2.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. -- 订单三状态字段(阶段A:兼容期)
  2. -- 新增字段:order_status / delivery_status / pay_status
  3. -- 注意:历史表 biz_order_his 同步新增同名字段
  4. ALTER TABLE `biz_order`
  5. ADD COLUMN `order_status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '订单主状态: pending/completed/cancelled' AFTER `status`,
  6. ADD COLUMN `delivery_status` varchar(20) NOT NULL DEFAULT 'pending_delivery' COMMENT '配送状态: pending_delivery/delivering/delivered/partial_delivered' AFTER `order_status`,
  7. ADD COLUMN `pay_status` varchar(20) NOT NULL DEFAULT 'pending_payment' COMMENT '支付状态: pending_payment/paid/refunding/refunded' AFTER `delivery_status`;
  8. ALTER TABLE `biz_order_his`
  9. ADD COLUMN `order_status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '订单主状态: pending/completed/cancelled' AFTER `status`,
  10. ADD COLUMN `delivery_status` varchar(20) NOT NULL DEFAULT 'pending_delivery' COMMENT '配送状态: pending_delivery/delivering/delivered/partial_delivered' AFTER `order_status`,
  11. ADD COLUMN `pay_status` varchar(20) NOT NULL DEFAULT 'pending_payment' COMMENT '支付状态: pending_payment/paid/refunding/refunded' AFTER `delivery_status`;
  12. -- 可选:一次性回填(建议在执行前先确认线上/测试库的实际旧 status 分布)
  13. -- UPDATE `biz_order`
  14. -- SET
  15. -- `order_status` = CASE
  16. -- WHEN `status` = 'cancelled' THEN 'cancelled'
  17. -- WHEN `status` = 'completed' THEN 'completed'
  18. -- ELSE 'pending'
  19. -- END,
  20. -- `delivery_status` = CASE
  21. -- WHEN `status` IN ('pending_payment', 'pending_delivery', 'pending_review_cancel') THEN 'pending_delivery'
  22. -- WHEN `status` IN ('delivering') THEN 'delivering'
  23. -- WHEN `status` IN ('partial_delivered') THEN 'partial_delivered'
  24. -- WHEN `status` IN ('pending_confirm', 'completed') THEN 'delivered'
  25. -- ELSE 'pending_delivery'
  26. -- END,
  27. -- `pay_status` = CASE
  28. -- WHEN `status` = 'refunding' THEN 'refunding'
  29. -- WHEN IFNULL(`paid_amount`, 0) > 0 THEN 'paid'
  30. -- ELSE 'pending_payment'
  31. -- END;