Files
biz-api-cloud-zax/db/20260822_add_expired_reserve_refund.sql
T
dzc e1cf5d5b90 feat:商品预约导出
feat:个人菜谱预约统计
feat:预定扣库存
feat:过期订单自动退款
2026-08-23 10:59:54 +08:00

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 '稳定钱包退款业务号,过期任务按订单生成';