积分订单状态重构_数据库变更.sql 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. -- =====================================================
  2. -- 积分订单状态字典重构 + 售后时效支持
  3. -- 创建时间:2026-07-22
  4. -- 更新时间:2026-07-24
  5. -- 说明:
  6. -- 1. fs_integral_order 表新增 finish_time 字段(完成时间),用于售后时效校验
  7. -- 2. 调整 sys_integral_order_status 字典:
  8. -- - 1待发货 / 2待收货 / 3已完成 / 4待支付 / 5已取消(原有)
  9. -- - -1售后中(用户提交售后申请)/ -2已退款(退款成功)
  10. -- (取消原 -3 已取消,与 5 已取消合并;原 -1 退款中 改名为 售后中)
  11. -- 3. 状态与代码逻辑对齐:markAfterSalesStatus(-1售后中)、refundOrder(-2已退款)、cancelOrder(5已取消)
  12. -- =====================================================
  13. -- 1. fs_integral_order 新增 finish_time 字段
  14. ALTER TABLE `fs_integral_order`
  15. ADD COLUMN `finish_time` DATETIME DEFAULT NULL COMMENT '完成时间(确认收货时间)'
  16. AFTER `delivery_time`;
  17. -- 2. 积分订单状态字典(-1/-2)
  18. -- 注意:执行前先查询 SELECT dict_code FROM sys_dict_data WHERE dict_type='sys_integral_order_status' AND dict_value='-1';
  19. -- 若已存在记录,改为 UPDATE 而非 INSERT
  20. INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
  21. VALUES
  22. (-1, '售后中', '-1', 'sys_integral_order_status', '', 'warning', 'N', '0', 'admin', NOW(), '售后申请已提交,等待处理'),
  23. (-2, '已退款', '-2', 'sys_integral_order_status', '', 'danger', 'N', '0', 'admin', NOW(), '退款成功');
  24. -- 3. 删除原 -3 已取消 字典(与 5 已取消 合并)
  25. DELETE FROM sys_dict_data WHERE dict_type = 'sys_integral_order_status' AND dict_value = '-3';
  26. -- 4. 老数据清洗
  27. -- 4.1 原 status=-1 的订单(原"已取消"语义)应更新为 status=5(已取消)
  28. -- 4.2 原 status=-3 的订单应更新为 status=5(已取消)
  29. -- 注意:此清洗需要根据业务实际情况执行,以下为参考脚本(请先备份再执行)
  30. -- UPDATE fs_integral_order SET status = 5 WHERE status = -3;
  31. -- UPDATE fs_integral_order SET status = 5 WHERE status = -1 AND order_id NOT IN (
  32. -- SELECT order_id FROM fs_user_integral_logs WHERE log_type = 27
  33. -- );
  34. -- 5. 已完成订单回填 finish_time(用 update_time 近似)
  35. -- UPDATE fs_integral_order SET finish_time = update_time WHERE status = 3 AND finish_time IS NULL;