-- 邀请奖励:按实付基础运费百分比、T+N 工作日入运费余额、退款标记(可重复执行) SET @db := DATABASE(); -- ---------- t_order.IsRefunded ---------- SET @col := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_order' AND COLUMN_NAME = 'IsRefunded' ); SET @sql := IF( @col = 0, 'ALTER TABLE `t_order` ADD COLUMN `IsRefunded` TINYINT(1) NOT NULL DEFAULT 0 COMMENT ''是否已退款(分成计次排除)'' AFTER `IsPaid`', 'SELECT ''t_order.IsRefunded already exists'' AS info' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- ---------- t_referral_commission_rule 新字段 ---------- SET @col := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_referral_commission_rule' AND COLUMN_NAME = 'MinInviteLevelCode' ); SET @sql := IF( @col = 0, 'ALTER TABLE `t_referral_commission_rule` ADD COLUMN `MinInviteLevelCode` VARCHAR(16) NOT NULL DEFAULT ''V1'' COMMENT ''邀请资格最低等级'' AFTER `MonthlyCap`, ADD COLUMN `MinPaidBaseFreight` DECIMAL(18,2) NOT NULL DEFAULT 50.00 COMMENT ''计奖最低实付基础运费'' AFTER `MinInviteLevelCode`, ADD COLUMN `FirstOrderRate` DECIMAL(8,4) NOT NULL DEFAULT 0.0500 COMMENT ''首单奖励比例'' AFTER `MinPaidBaseFreight`, ADD COLUMN `FirstOrderCap` DECIMAL(18,2) NOT NULL DEFAULT 50.00 COMMENT ''首单奖励封顶'' AFTER `FirstOrderRate`, ADD COLUMN `FollowOrderRate` DECIMAL(8,4) NOT NULL DEFAULT 0.0300 COMMENT ''后续单奖励比例'' AFTER `FirstOrderCap`, ADD COLUMN `FollowOrderCap` DECIMAL(18,2) NOT NULL DEFAULT 30.00 COMMENT ''后续单奖励封顶'' AFTER `FollowOrderRate`, ADD COLUMN `FollowWindowDays` INT NOT NULL DEFAULT 90 COMMENT ''后续单注册后天数窗口'' AFTER `FollowOrderCap`, ADD COLUMN `MaxRewardOrders` INT NOT NULL DEFAULT 6 COMMENT ''最多计奖订单数'' AFTER `FollowWindowDays`, ADD COLUMN `SettleBusinessDays` INT NOT NULL DEFAULT 3 COMMENT ''派送成功后结算工作日'' AFTER `MaxRewardOrders`', 'SELECT ''t_referral_commission_rule reward columns already exist'' AS info' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; UPDATE `t_referral_commission_rule` SET `CommissionMode` = 'percent_of_paid_base_freight', `SettleTriggerOrderStatus` = 'deliverySuccess', `SettleBusinessDays` = CASE WHEN `SettleBusinessDays` > 0 THEN `SettleBusinessDays` ELSE 3 END, `FreezeDays` = CASE WHEN `SettleBusinessDays` > 0 THEN `SettleBusinessDays` ELSE 3 END, `UpdateTime` = NOW() WHERE `IsDeleted` = 0; -- ---------- t_referral_commission_detail ---------- SET @col := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_referral_commission_detail' AND COLUMN_NAME = 'SettleDueTime' ); SET @sql := IF( @col = 0, 'ALTER TABLE `t_referral_commission_detail` ADD COLUMN `SettleDueTime` DATETIME NULL COMMENT ''计划结算时间'' AFTER `EligibleTime`', 'SELECT ''SettleDueTime already exists'' AS info' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @col := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 't_referral_commission_detail' AND COLUMN_NAME = 'RewardOrderIndex' ); SET @sql := IF( @col = 0, 'ALTER TABLE `t_referral_commission_detail` ADD COLUMN `RewardOrderIndex` INT NOT NULL DEFAULT 0 COMMENT ''被邀请人第几单'' AFTER `SettleDueTime`', 'SELECT ''RewardOrderIndex already exists'' AS info' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; UPDATE `t_coupon_template` SET `Remark` = '被邀请人注册即发 5 元券', `UpdateTime` = NOW() WHERE `IsDeleted` = 0 AND `TemplateCode` = 'REFERRAL_INVITEE';