50 lines
3.7 KiB
SQL
50 lines
3.7 KiB
SQL
-- 每日菜谱预约订单过期自动退款扩展。
|
|
-- 只增加新快照和任务字段,不回填历史订单;执行前应确认目标字段/索引不存在。
|
|
|
|
ALTER TABLE `pjcloudx_wallet`.`mch_auto_refund_config`
|
|
ADD COLUMN `expired_reserve_refund_enabled` char(1) NOT NULL DEFAULT '0'
|
|
COMMENT '过期预约自动退款开关,0关闭,1开启' AFTER `pay_time_limit_hours`,
|
|
ADD COLUMN `expired_reserve_refund_delay_hours` int(11) NOT NULL DEFAULT 2
|
|
COMMENT '餐段结束后的过期退款延迟小时数,允许1至168' AFTER `expired_reserve_refund_enabled`,
|
|
ADD COLUMN `expired_reserve_refund_restore_inventory` char(1) NOT NULL DEFAULT '1'
|
|
COMMENT '过期预约退款是否恢复库存,0不恢复,1恢复' AFTER `expired_reserve_refund_delay_hours`;
|
|
|
|
ALTER TABLE `pjcloudx_hardware`.`hard_order`
|
|
ADD COLUMN `expired_refund_config_id` bigint(20) DEFAULT NULL
|
|
COMMENT '过期预约退款配置ID快照,仅新支付成功订单写入' AFTER `auto_refund_deadline`,
|
|
ADD COLUMN `expired_refund_usage_end_time` datetime DEFAULT NULL
|
|
COMMENT '支付成功时快照的实际餐段结束时间,无法解析时为空' AFTER `expired_refund_config_id`,
|
|
ADD COLUMN `expired_refund_deadline` datetime DEFAULT NULL
|
|
COMMENT '实际餐段结束时间加延迟后的过期退款触发时间' AFTER `expired_refund_usage_end_time`,
|
|
ADD COLUMN `expired_refund_restore_inventory` char(1) DEFAULT NULL
|
|
COMMENT '过期退款退库存快照,0不恢复,1恢复' AFTER `expired_refund_deadline`,
|
|
ADD KEY `idx_hard_order_expired_refund_scan`
|
|
(`tenant_id`, `expired_refund_deadline`, `order_status`, `del_flag`);
|
|
|
|
ALTER TABLE `pjcloudx_hardware`.`hard_auto_refund_task`
|
|
MODIFY COLUMN `after_sale_id` bigint(20) DEFAULT NULL COMMENT '售后单ID,过期预约任务首次执行前为空',
|
|
MODIFY COLUMN `rule_type` varchar(32) DEFAULT NULL COMMENT '普通售后任务规则快照,过期预约任务为空',
|
|
MODIFY COLUMN `eligibility_deadline` datetime DEFAULT NULL COMMENT '普通售后免审资格截止时间,过期预约任务为空',
|
|
ADD COLUMN `task_type` char(10) NOT NULL DEFAULT '10'
|
|
COMMENT '任务场景,10用户免审售后,20过期预约退款' AFTER `after_sale_id`,
|
|
ADD COLUMN `trigger_time` datetime DEFAULT NULL
|
|
COMMENT '过期预约任务按订单快照触发时间,旧售后任务为空' AFTER `eligibility_deadline`,
|
|
ADD COLUMN `restore_inventory` char(1) DEFAULT NULL
|
|
COMMENT '任务退库存快照,0不恢复,1恢复' AFTER `trigger_time`;
|
|
|
|
-- MySQL 5.7 不支持函数索引,使用可索引的存储生成列承载场景业务主键:
|
|
-- 普通售后取 after_sale_id,允许同一订单存在多个售后任务;过期预约取 order_id,保证一单一任务。
|
|
ALTER TABLE `pjcloudx_hardware`.`hard_auto_refund_task`
|
|
ADD COLUMN `scene_biz_id` bigint(20)
|
|
GENERATED ALWAYS AS (CASE WHEN `task_type` = '20' THEN `order_id` ELSE `after_sale_id` END) STORED
|
|
COMMENT '任务场景业务唯一值,系统生成,禁止业务代码写入' AFTER `restore_inventory`,
|
|
DROP INDEX `uk_hard_auto_refund_task_after_sale`,
|
|
ADD UNIQUE KEY `uk_hard_auto_refund_task_scene_biz`
|
|
(`tenant_id`, `task_type`, `scene_biz_id`, `del_flag`),
|
|
ADD KEY `idx_hard_auto_refund_task_scan_type`
|
|
(`tenant_id`, `task_type`, `status`, `next_retry_time`, `del_flag`);
|
|
|
|
ALTER TABLE `pjcloudx_hardware`.`hard_auto_refund_attempt_log`
|
|
MODIFY COLUMN `after_sale_id` bigint(20) DEFAULT NULL COMMENT '售后单ID,过期任务创建售后前为空',
|
|
MODIFY COLUMN `refund_code` varchar(128) NOT NULL COMMENT '稳定钱包退款业务号,过期任务按订单生成';
|