-- 营销模块种子(CustomerId=9 引荐人主客户,CustomerId=8 被引荐下级) -- 可重复执行:已存在则跳过 / 幂等更新 -- -- 用法: -- 1) mysql -u root -p oms < sql/migrate_marketing_module.sql -- 2) mysql -u root -p oms < sql/seed_marketing_customer9.sql -- -- 覆盖页面: -- 管理端:会员等级 / 积分规则 / 积分流水 / 优惠券模板 / 发券实例 / -- 分成规则 / 分成明细 / 提现审核 / 引荐关系 -- 门户端:邀请好友 / 我的等级 / 我的优惠券 / 推荐收益 -- -- 约定:此处「子」= 引荐下级(ReferrerCustomerId),非 ParentCustomerId 子账号。 -- 8、9 均须为主客户(ParentCustomerId IS NULL),营销权益才挂得上。 SET NAMES utf8mb4; SET @referrerId := 9; SET @refereeId := 8; -- --------------------------------------------------------------------------- -- 0. 前置校验 -- --------------------------------------------------------------------------- SET @seed_err := ( SELECT CASE WHEN NOT EXISTS (SELECT 1 FROM `t_customer` WHERE `Id` = @referrerId AND `IsDeleted` = 0) THEN CONCAT('缺少客户 Id=', @referrerId) WHEN NOT EXISTS (SELECT 1 FROM `t_customer` WHERE `Id` = @refereeId AND `IsDeleted` = 0) THEN CONCAT('缺少客户 Id=', @refereeId) WHEN EXISTS ( SELECT 1 FROM `t_customer` WHERE `Id` = @referrerId AND `ParentCustomerId` IS NOT NULL AND `IsDeleted` = 0 ) THEN CONCAT('客户 Id=', @referrerId, ' 不是主客户(存在 ParentCustomerId)') WHEN EXISTS ( SELECT 1 FROM `t_customer` WHERE `Id` = @refereeId AND `ParentCustomerId` IS NOT NULL AND `IsDeleted` = 0 ) THEN CONCAT('客户 Id=', @refereeId, ' 不是主客户(存在 ParentCustomerId);请先改为主客户再跑种子') ELSE NULL END ); SELECT IFNULL(@seed_err, 'OK') AS seed_precheck; -- 校验失败则中止,避免写脏数据 SET @__abort := IF(@seed_err IS NULL, 'SELECT 1', CONCAT('SIGNAL SQLSTATE ''45000'' SET MESSAGE_TEXT = ''', REPLACE(@seed_err, '''', ''), '''')); PREPARE abort_stmt FROM @__abort; EXECUTE abort_stmt; DEALLOCATE PREPARE abort_stmt; -- --------------------------------------------------------------------------- -- 1. 会员等级(migrate 已种子;此处确保存在并取 Id) -- --------------------------------------------------------------------------- INSERT INTO `t_member_level` (`LevelCode`, `LevelName`, `MinPoints`, `PriceTierKey`, `ExtraDiscountRate`, `Sort`, `BenefitDesc`, `Status`, `CreateUserId`) VALUES ('normal', '普通会员', 0, '普通客户', 0.0000, 10, '标准运价', 2, 0), ('silver', '银卡会员', 5000, 'VIP1', 0.0000, 20, 'VIP1 价区', 2, 0), ('gold', '金卡会员', 20000, 'VIP2', 0.0100, 30, 'VIP2 价区 + 额外 1% 折', 2, 0), ('diamond', '钻石会员', 100000, 'VIP3', 0.0200, 40, 'VIP3 价区 + 额外 2% 折', 2, 0) ON DUPLICATE KEY UPDATE `LevelName` = VALUES(`LevelName`), `MinPoints` = VALUES(`MinPoints`), `PriceTierKey` = VALUES(`PriceTierKey`), `ExtraDiscountRate` = VALUES(`ExtraDiscountRate`), `Sort` = VALUES(`Sort`), `BenefitDesc` = VALUES(`BenefitDesc`), `Status` = 2, `IsDeleted` = 0; SET @levelNormal := (SELECT `Id` FROM `t_member_level` WHERE `LevelCode` = 'normal' AND `IsDeleted` = 0 LIMIT 1); SET @levelSilver := (SELECT `Id` FROM `t_member_level` WHERE `LevelCode` = 'silver' AND `IsDeleted` = 0 LIMIT 1); SET @levelGold := (SELECT `Id` FROM `t_member_level` WHERE `LevelCode` = 'gold' AND `IsDeleted` = 0 LIMIT 1); -- --------------------------------------------------------------------------- -- 2. 积分规则 / 分成规则(全局,缺则补) -- --------------------------------------------------------------------------- INSERT INTO `t_member_points_rule` (`RuleName`, `PointsPerYuan`, `FirstOrderMultiplier`, `MaxPointsPerOrder`, `Status`, `CreateUserId`) SELECT '默认积分规则', 1.0000, 1.50, 10000, 2, 0 FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `t_member_points_rule` WHERE `IsDeleted` = 0 LIMIT 1); UPDATE `t_member_points_rule` SET `RuleName` = '默认积分规则', `PointsPerYuan` = 1.0000, `FirstOrderMultiplier` = 1.50, `MaxPointsPerOrder` = 10000, `Status` = 2, `UpdateTime` = NOW() WHERE `Id` = ( SELECT `Id` FROM ( SELECT `Id` FROM `t_member_points_rule` WHERE `IsDeleted` = 0 ORDER BY `Id` LIMIT 1 ) AS t ); INSERT INTO `t_referral_commission_rule` (`RuleName`, `CommissionMode`, `BaseAmount`, `CommissionAmount`, `FreezeDays`, `SettleTriggerOrderStatus`, `MonthlyCap`, `Status`, `CreateUserId`) SELECT '默认分成', 'per_amount', 1000.00, 2.00, 7, 'deliverySuccess', NULL, 2, 0 FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `t_referral_commission_rule` WHERE `IsDeleted` = 0 LIMIT 1); UPDATE `t_referral_commission_rule` SET `RuleName` = '默认分成', `CommissionMode` = 'per_amount', `BaseAmount` = 1000.00, `CommissionAmount` = 2.00, `FreezeDays` = 7, `SettleTriggerOrderStatus` = 'deliverySuccess', `Status` = 2, `UpdateTime` = NOW() WHERE `Id` = ( SELECT `Id` FROM ( SELECT `Id` FROM `t_referral_commission_rule` WHERE `IsDeleted` = 0 ORDER BY `Id` LIMIT 1 ) AS t ); -- --------------------------------------------------------------------------- -- 3. 客户:引荐关系 + 等级 + 佣金余额(9 引荐 8) -- --------------------------------------------------------------------------- UPDATE `t_customer` SET `ReferrerCustomerId` = NULL, `ReferralBindTime` = NULL, `ReferralChannel` = NULL, `MemberLevelId` = @levelGold, `CommissionBalance` = 128.60, `UpdateTime` = NOW() WHERE `Id` = @referrerId AND `IsDeleted` = 0 AND `ParentCustomerId` IS NULL; UPDATE `t_customer` SET `ReferrerCustomerId` = @referrerId, `ReferralBindTime` = DATE_SUB(NOW(), INTERVAL 45 DAY), `ReferralChannel` = 'link', `MemberLevelId` = @levelSilver, `CommissionBalance` = 0.00, `UpdateTime` = NOW() WHERE `Id` = @refereeId AND `IsDeleted` = 0 AND `ParentCustomerId` IS NULL; -- --------------------------------------------------------------------------- -- 4. 引荐码(邀请好友页) -- --------------------------------------------------------------------------- INSERT INTO `t_customer_referral_code` (`CustomerId`, `InviteCode`, `Status`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`) SELECT @referrerId, 'SEED9INV', 1, 0, UUID(), 0, NOW() FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_customer_referral_code` WHERE `CustomerId` = @referrerId AND `IsDeleted` = 0 ); INSERT INTO `t_customer_referral_code` (`CustomerId`, `InviteCode`, `Status`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`) SELECT @refereeId, 'SEED8INV', 1, 0, UUID(), 0, NOW() FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_customer_referral_code` WHERE `CustomerId` = @refereeId AND `IsDeleted` = 0 ); UPDATE `t_customer_referral_code` SET `InviteCode` = 'SEED9INV', `Status` = 1, `IsDeleted` = 0, `UpdateTime` = NOW() WHERE `CustomerId` = @referrerId AND `IsDeleted` = 0; UPDATE `t_customer_referral_code` SET `InviteCode` = 'SEED8INV', `Status` = 1, `IsDeleted` = 0, `UpdateTime` = NOW() WHERE `CustomerId` = @refereeId AND `IsDeleted` = 0; -- --------------------------------------------------------------------------- -- 5. 积分账户 + 流水(积分流水 / 我的等级) -- --------------------------------------------------------------------------- INSERT INTO `t_customer_points_account` (`CustomerId`, `TotalPoints`, `AvailablePoints`, `Version`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`) SELECT @referrerId, 26800, 24500, 0, 0, UUID(), 0, NOW() FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_customer_points_account` WHERE `CustomerId` = @referrerId AND `IsDeleted` = 0 ); UPDATE `t_customer_points_account` SET `TotalPoints` = 26800, `AvailablePoints` = 24500, `UpdateTime` = NOW() WHERE `CustomerId` = @referrerId AND `IsDeleted` = 0; INSERT INTO `t_customer_points_account` (`CustomerId`, `TotalPoints`, `AvailablePoints`, `Version`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`) SELECT @refereeId, 6200, 5800, 0, 0, UUID(), 0, NOW() FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_customer_points_account` WHERE `CustomerId` = @refereeId AND `IsDeleted` = 0 ); UPDATE `t_customer_points_account` SET `TotalPoints` = 6200, `AvailablePoints` = 5800, `UpdateTime` = NOW() WHERE `CustomerId` = @refereeId AND `IsDeleted` = 0; -- 9:赚取 / 消耗 / 调账 INSERT INTO `t_customer_points_flow` (`CustomerId`, `ChangeType`, `Points`, `BizType`, `BizId`, `BizNo`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`) SELECT @referrerId, 1, 1200, 'orderPay', 9009001, 'SEED-MKT-ORD-9001', '种子:支付赚取积分', 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 20 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_customer_points_flow` WHERE `CustomerId` = @referrerId AND `BizNo` = 'SEED-MKT-ORD-9001' AND `IsDeleted` = 0 ); INSERT INTO `t_customer_points_flow` (`CustomerId`, `ChangeType`, `Points`, `BizType`, `BizId`, `BizNo`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`) SELECT @referrerId, 1, 800, 'orderPay', 9009002, 'SEED-MKT-ORD-9002', '种子:支付赚取积分', 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 12 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_customer_points_flow` WHERE `CustomerId` = @referrerId AND `BizNo` = 'SEED-MKT-ORD-9002' AND `IsDeleted` = 0 ); INSERT INTO `t_customer_points_flow` (`CustomerId`, `ChangeType`, `Points`, `BizType`, `BizId`, `BizNo`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`) SELECT @referrerId, 2, -300, 'orderPay', 9009003, 'SEED-MKT-ORD-9003', '种子:下单抵扣积分', 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 8 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_customer_points_flow` WHERE `CustomerId` = @referrerId AND `BizNo` = 'SEED-MKT-ORD-9003' AND `IsDeleted` = 0 ); INSERT INTO `t_customer_points_flow` (`CustomerId`, `ChangeType`, `Points`, `BizType`, `BizId`, `BizNo`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`) SELECT @referrerId, 3, 500, 'adminAdjust', NULL, 'SEED-MKT-ADJ-9001', '种子:人工调账加分(演示用不少于十字原因)', 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 3 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_customer_points_flow` WHERE `CustomerId` = @referrerId AND `BizNo` = 'SEED-MKT-ADJ-9001' AND `IsDeleted` = 0 ); -- 8:赚取 / 退款追回 INSERT INTO `t_customer_points_flow` (`CustomerId`, `ChangeType`, `Points`, `BizType`, `BizId`, `BizNo`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`) SELECT @refereeId, 1, 1500, 'orderPay', 9008001, 'SEED-MKT-ORD-8001', '种子:被引荐人支付赚取', 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 30 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_customer_points_flow` WHERE `CustomerId` = @refereeId AND `BizNo` = 'SEED-MKT-ORD-8001' AND `IsDeleted` = 0 ); INSERT INTO `t_customer_points_flow` (`CustomerId`, `ChangeType`, `Points`, `BizType`, `BizId`, `BizNo`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime`) SELECT @refereeId, 4, -200, 'refund', 9008001, 'SEED-MKT-RF-8001', '种子:退款积分追回', 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 25 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_customer_points_flow` WHERE `CustomerId` = @refereeId AND `BizNo` = 'SEED-MKT-RF-8001' AND `IsDeleted` = 0 ); -- --------------------------------------------------------------------------- -- 6. 优惠券模板(模板页) -- --------------------------------------------------------------------------- INSERT INTO `t_coupon_template` ( `TemplateCode`, `TemplateName`, `CouponType`, `FaceValue`, `DiscountRate`, `MaxDiscountAmount`, `MinOrderAmount`, `TotalQuantity`, `IssuedQuantity`, `PerCustomerLimit`, `ValidType`, `ValidStartTime`, `ValidEndTime`, `ValidDaysAfterReceive`, `ApplyScopeJson`, `GrantChannel`, `Status`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT 'SEED-FIXED-20', '种子满减券20元', 'fixed_off', 20.00, NULL, NULL, 100.00, 1000, 0, 2, 1, DATE_SUB(NOW(), INTERVAL 7 DAY), DATE_ADD(NOW(), INTERVAL 180 DAY), NULL, NULL, 'manual', 1, '种子:满100减20', 0, UUID(), 0, NOW() FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_coupon_template` WHERE `TemplateCode` = 'SEED-FIXED-20' AND `IsDeleted` = 0 ); INSERT INTO `t_coupon_template` ( `TemplateCode`, `TemplateName`, `CouponType`, `FaceValue`, `DiscountRate`, `MaxDiscountAmount`, `MinOrderAmount`, `TotalQuantity`, `IssuedQuantity`, `PerCustomerLimit`, `ValidType`, `ValidStartTime`, `ValidEndTime`, `ValidDaysAfterReceive`, `ApplyScopeJson`, `GrantChannel`, `Status`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT 'SEED-PCT-95', '种子95折券', 'percent_off', NULL, 0.9500, 50.00, 50.00, 500, 0, 1, 2, NULL, NULL, 30, NULL, 'referral', 1, '种子:领取后30天有效,封顶50', 0, UUID(), 0, NOW() FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_coupon_template` WHERE `TemplateCode` = 'SEED-PCT-95' AND `IsDeleted` = 0 ); INSERT INTO `t_coupon_template` ( `TemplateCode`, `TemplateName`, `CouponType`, `FaceValue`, `DiscountRate`, `MaxDiscountAmount`, `MinOrderAmount`, `TotalQuantity`, `IssuedQuantity`, `PerCustomerLimit`, `ValidType`, `ValidStartTime`, `ValidEndTime`, `ValidDaysAfterReceive`, `ApplyScopeJson`, `GrantChannel`, `Status`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT 'SEED-SHIP-10', '种子运费抵扣10元', 'shipping_off', 10.00, NULL, NULL, 0.00, 200, 0, 3, 1, DATE_SUB(NOW(), INTERVAL 3 DAY), DATE_ADD(NOW(), INTERVAL 90 DAY), NULL, NULL, 'activity', 1, '种子:运费抵扣', 0, UUID(), 0, NOW() FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_coupon_template` WHERE `TemplateCode` = 'SEED-SHIP-10' AND `IsDeleted` = 0 ); INSERT INTO `t_coupon_template` ( `TemplateCode`, `TemplateName`, `CouponType`, `FaceValue`, `DiscountRate`, `MaxDiscountAmount`, `MinOrderAmount`, `TotalQuantity`, `IssuedQuantity`, `PerCustomerLimit`, `ValidType`, `ValidStartTime`, `ValidEndTime`, `ValidDaysAfterReceive`, `ApplyScopeJson`, `GrantChannel`, `Status`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT 'SEED-DRAFT-OFF', '种子草稿立减券', 'direct_off', 5.00, NULL, NULL, 0.00, 0, 0, 1, 1, NOW(), DATE_ADD(NOW(), INTERVAL 30 DAY), NULL, NULL, 'manual', 0, '种子:草稿态模板', 0, UUID(), 0, NOW() FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_coupon_template` WHERE `TemplateCode` = 'SEED-DRAFT-OFF' AND `IsDeleted` = 0 ); SET @tplFixed := (SELECT `Id` FROM `t_coupon_template` WHERE `TemplateCode` = 'SEED-FIXED-20' AND `IsDeleted` = 0 LIMIT 1); SET @tplPct := (SELECT `Id` FROM `t_coupon_template` WHERE `TemplateCode` = 'SEED-PCT-95' AND `IsDeleted` = 0 LIMIT 1); SET @tplShip := (SELECT `Id` FROM `t_coupon_template` WHERE `TemplateCode` = 'SEED-SHIP-10' AND `IsDeleted` = 0 LIMIT 1); -- --------------------------------------------------------------------------- -- 7. 优惠券实例(发券列表 / 我的优惠券) -- --------------------------------------------------------------------------- -- 9:可用 / 已用 / 过期 INSERT INTO `t_coupon_instance` ( `TemplateId`, `CustomerId`, `CouponCode`, `Status`, `ReceiveTime`, `ValidStartTime`, `ValidEndTime`, `UseTime`, `OrderId`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @tplFixed, @referrerId, 'SEED9-FIXED-AVAIL-01', 1, DATE_SUB(NOW(), INTERVAL 5 DAY), DATE_SUB(NOW(), INTERVAL 7 DAY), DATE_ADD(NOW(), INTERVAL 180 DAY), NULL, NULL, 0, UUID(), 0, NOW() FROM DUAL WHERE @tplFixed IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM `t_coupon_instance` WHERE `CouponCode` = 'SEED9-FIXED-AVAIL-01' AND `IsDeleted` = 0 ); INSERT INTO `t_coupon_instance` ( `TemplateId`, `CustomerId`, `CouponCode`, `Status`, `ReceiveTime`, `ValidStartTime`, `ValidEndTime`, `UseTime`, `OrderId`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @tplPct, @referrerId, 'SEED9-PCT-USED-01', 3, DATE_SUB(NOW(), INTERVAL 40 DAY), DATE_SUB(NOW(), INTERVAL 40 DAY), DATE_SUB(NOW(), INTERVAL 10 DAY), DATE_SUB(NOW(), INTERVAL 15 DAY), 9009002, 0, UUID(), 0, NOW() FROM DUAL WHERE @tplPct IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM `t_coupon_instance` WHERE `CouponCode` = 'SEED9-PCT-USED-01' AND `IsDeleted` = 0 ); INSERT INTO `t_coupon_instance` ( `TemplateId`, `CustomerId`, `CouponCode`, `Status`, `ReceiveTime`, `ValidStartTime`, `ValidEndTime`, `UseTime`, `OrderId`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @tplShip, @referrerId, 'SEED9-SHIP-EXP-01', 4, DATE_SUB(NOW(), INTERVAL 60 DAY), DATE_SUB(NOW(), INTERVAL 60 DAY), DATE_SUB(NOW(), INTERVAL 1 DAY), NULL, NULL, 0, UUID(), 0, NOW() FROM DUAL WHERE @tplShip IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM `t_coupon_instance` WHERE `CouponCode` = 'SEED9-SHIP-EXP-01' AND `IsDeleted` = 0 ); -- 8:可用 / 锁定 INSERT INTO `t_coupon_instance` ( `TemplateId`, `CustomerId`, `CouponCode`, `Status`, `ReceiveTime`, `ValidStartTime`, `ValidEndTime`, `UseTime`, `OrderId`, `LockExpireTime`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @tplFixed, @refereeId, 'SEED8-FIXED-AVAIL-01', 1, DATE_SUB(NOW(), INTERVAL 2 DAY), DATE_SUB(NOW(), INTERVAL 7 DAY), DATE_ADD(NOW(), INTERVAL 180 DAY), NULL, NULL, NULL, 0, UUID(), 0, NOW() FROM DUAL WHERE @tplFixed IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM `t_coupon_instance` WHERE `CouponCode` = 'SEED8-FIXED-AVAIL-01' AND `IsDeleted` = 0 ); INSERT INTO `t_coupon_instance` ( `TemplateId`, `CustomerId`, `CouponCode`, `Status`, `ReceiveTime`, `ValidStartTime`, `ValidEndTime`, `UseTime`, `OrderId`, `LockExpireTime`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @tplShip, @refereeId, 'SEED8-SHIP-LOCK-01', 2, DATE_SUB(NOW(), INTERVAL 1 DAY), DATE_SUB(NOW(), INTERVAL 3 DAY), DATE_ADD(NOW(), INTERVAL 90 DAY), NULL, 9008002, DATE_ADD(NOW(), INTERVAL 30 MINUTE), 0, UUID(), 0, NOW() FROM DUAL WHERE @tplShip IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM `t_coupon_instance` WHERE `CouponCode` = 'SEED8-SHIP-LOCK-01' AND `IsDeleted` = 0 ); -- 回写模板已发数量 UPDATE `t_coupon_template` t SET t.`IssuedQuantity` = ( SELECT COUNT(*) FROM `t_coupon_instance` i WHERE i.`TemplateId` = t.`Id` AND i.`IsDeleted` = 0 ) WHERE t.`TemplateCode` IN ('SEED-FIXED-20', 'SEED-PCT-95', 'SEED-SHIP-10', 'SEED-DRAFT-OFF') AND t.`IsDeleted` = 0; -- --------------------------------------------------------------------------- -- 8. 分成明细(分成明细 / 推荐收益):引荐人=9,被引荐人=8 -- --------------------------------------------------------------------------- SET @ruleSnap := JSON_OBJECT( 'RuleName', '默认分成', 'CommissionMode', 'per_amount', 'BaseAmount', 1000, 'CommissionAmount', 2, 'FreezeDays', 7 ); -- 待结算 INSERT INTO `t_referral_commission_detail` ( `ReferrerCustomerId`, `RefereeCustomerId`, `OrderId`, `OrderNo`, `BasePayableAmount`, `CommissionAmount`, `Status`, `EligibleTime`, `SettleTime`, `RuleSnapshotJson`, `CancelReason`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @referrerId, @refereeId, 9008001, 'SEED-MKT-ORD-8001', 3500.00, 6.00, 1, DATE_SUB(NOW(), INTERVAL 2 DAY), NULL, @ruleSnap, NULL, 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 2 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_referral_commission_detail` WHERE `OrderId` = 9008001 AND `ReferrerCustomerId` = @referrerId AND `IsDeleted` = 0 ); -- 已结算 INSERT INTO `t_referral_commission_detail` ( `ReferrerCustomerId`, `RefereeCustomerId`, `OrderId`, `OrderNo`, `BasePayableAmount`, `CommissionAmount`, `Status`, `EligibleTime`, `SettleTime`, `RuleSnapshotJson`, `CancelReason`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @referrerId, @refereeId, 9008002, 'SEED-MKT-ORD-8002', 5200.00, 10.00, 2, DATE_SUB(NOW(), INTERVAL 20 DAY), DATE_SUB(NOW(), INTERVAL 13 DAY), @ruleSnap, NULL, 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 20 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_referral_commission_detail` WHERE `OrderId` = 9008002 AND `ReferrerCustomerId` = @referrerId AND `IsDeleted` = 0 ); INSERT INTO `t_referral_commission_detail` ( `ReferrerCustomerId`, `RefereeCustomerId`, `OrderId`, `OrderNo`, `BasePayableAmount`, `CommissionAmount`, `Status`, `EligibleTime`, `SettleTime`, `RuleSnapshotJson`, `CancelReason`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @referrerId, @refereeId, 9008003, 'SEED-MKT-ORD-8003', 1800.00, 2.00, 2, DATE_SUB(NOW(), INTERVAL 35 DAY), DATE_SUB(NOW(), INTERVAL 28 DAY), @ruleSnap, NULL, 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 35 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_referral_commission_detail` WHERE `OrderId` = 9008003 AND `ReferrerCustomerId` = @referrerId AND `IsDeleted` = 0 ); -- 已取消(人工调整演示) INSERT INTO `t_referral_commission_detail` ( `ReferrerCustomerId`, `RefereeCustomerId`, `OrderId`, `OrderNo`, `BasePayableAmount`, `CommissionAmount`, `Status`, `EligibleTime`, `SettleTime`, `RuleSnapshotJson`, `CancelReason`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @referrerId, @refereeId, 9008004, 'SEED-MKT-ORD-8004', 1000.00, 2.00, 3, DATE_SUB(NOW(), INTERVAL 10 DAY), NULL, @ruleSnap, '种子:订单退款取消分成', 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 10 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_referral_commission_detail` WHERE `OrderId` = 9008004 AND `ReferrerCustomerId` = @referrerId AND `IsDeleted` = 0 ); -- --------------------------------------------------------------------------- -- 9. 提现申请(提现审核 / 推荐收益) -- --------------------------------------------------------------------------- INSERT INTO `t_commission_withdraw_request` ( `CustomerId`, `SerialNumber`, `Amount`, `WithdrawType`, `Status`, `Remark`, `AuditRemark`, `AuditBy`, `AuditTime`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @referrerId, 'SEED-WD-9-PENDING-01', 50.00, 1, 1, '种子:申请提现到外部账户', NULL, NULL, NULL, 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 1 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_commission_withdraw_request` WHERE `SerialNumber` = 'SEED-WD-9-PENDING-01' AND `IsDeleted` = 0 ); INSERT INTO `t_commission_withdraw_request` ( `CustomerId`, `SerialNumber`, `Amount`, `WithdrawType`, `Status`, `Remark`, `AuditRemark`, `AuditBy`, `AuditTime`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @referrerId, 'SEED-WD-9-APPROVED-01', 30.00, 2, 2, '种子:转入余额', '审核通过-种子数据', 'admin', DATE_SUB(NOW(), INTERVAL 5 DAY), 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 6 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_commission_withdraw_request` WHERE `SerialNumber` = 'SEED-WD-9-APPROVED-01' AND `IsDeleted` = 0 ); INSERT INTO `t_commission_withdraw_request` ( `CustomerId`, `SerialNumber`, `Amount`, `WithdrawType`, `Status`, `Remark`, `AuditRemark`, `AuditBy`, `AuditTime`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @referrerId, 'SEED-WD-9-REJECTED-01', 20.00, 1, 3, '种子:提现申请', '驳回原因:收款信息不完整(种子)', 'admin', DATE_SUB(NOW(), INTERVAL 8 DAY), 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 9 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_commission_withdraw_request` WHERE `SerialNumber` = 'SEED-WD-9-REJECTED-01' AND `IsDeleted` = 0 ); INSERT INTO `t_commission_withdraw_request` ( `CustomerId`, `SerialNumber`, `Amount`, `WithdrawType`, `Status`, `Remark`, `AuditRemark`, `AuditBy`, `AuditTime`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT @referrerId, 'SEED-WD-9-PAID-01', 40.00, 1, 4, '种子:已打款', '已打款-种子数据', 'admin', DATE_SUB(NOW(), INTERVAL 15 DAY), 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 16 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_commission_withdraw_request` WHERE `SerialNumber` = 'SEED-WD-9-PAID-01' AND `IsDeleted` = 0 ); -- --------------------------------------------------------------------------- -- 10. 审计日志(高危操作痕迹,便于联调) -- --------------------------------------------------------------------------- INSERT INTO `t_marketing_audit_log` ( `Action`, `OperatorId`, `TargetType`, `TargetId`, `BeforeJson`, `AfterJson`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT 'grantCoupon', 0, 'customer', @referrerId, NULL, JSON_OBJECT('templateCode', 'SEED-FIXED-20', 'couponCode', 'SEED9-FIXED-AVAIL-01'), '种子:批量发券演示', 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 5 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_marketing_audit_log` WHERE `Action` = 'grantCoupon' AND `Remark` = '种子:批量发券演示' AND `IsDeleted` = 0 ); INSERT INTO `t_marketing_audit_log` ( `Action`, `OperatorId`, `TargetType`, `TargetId`, `BeforeJson`, `AfterJson`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT 'adjustPoints', 0, 'customer', @referrerId, JSON_OBJECT('availablePoints', 24000), JSON_OBJECT('availablePoints', 24500, 'delta', 500), '种子:人工调账加分(演示用不少于十字原因)', 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 3 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_marketing_audit_log` WHERE `Action` = 'adjustPoints' AND `TargetId` = @referrerId AND `Remark` LIKE '种子:人工调账%' AND `IsDeleted` = 0 ); INSERT INTO `t_marketing_audit_log` ( `Action`, `OperatorId`, `TargetType`, `TargetId`, `BeforeJson`, `AfterJson`, `Remark`, `IsDeleted`, `ConcurrencyStamp`, `CreateUserId`, `CreateTime` ) SELECT 'bindReferral', 0, 'customer', @refereeId, JSON_OBJECT('referrerCustomerId', NULL), JSON_OBJECT('referrerCustomerId', @referrerId, 'channel', 'link'), '种子:绑定引荐关系 8←9', 0, UUID(), 0, DATE_SUB(NOW(), INTERVAL 45 DAY) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM `t_marketing_audit_log` WHERE `Action` = 'bindReferral' AND `TargetId` = @refereeId AND `IsDeleted` = 0 ); -- --------------------------------------------------------------------------- -- 11. 结果核对 -- --------------------------------------------------------------------------- SELECT 'precheck_customers' AS item, (SELECT COUNT(*) FROM `t_customer` WHERE `Id` IN (@referrerId, @refereeId) AND `IsDeleted` = 0) AS cnt UNION ALL SELECT 'referral_bind_8_to_9', (SELECT COUNT(*) FROM `t_customer` WHERE `Id` = @refereeId AND `ReferrerCustomerId` = @referrerId AND `ParentCustomerId` IS NULL AND `IsDeleted` = 0) UNION ALL SELECT 'referral_codes', (SELECT COUNT(*) FROM `t_customer_referral_code` WHERE `CustomerId` IN (@referrerId, @refereeId) AND `IsDeleted` = 0) UNION ALL SELECT 'points_accounts', (SELECT COUNT(*) FROM `t_customer_points_account` WHERE `CustomerId` IN (@referrerId, @refereeId) AND `IsDeleted` = 0) UNION ALL SELECT 'points_flows', (SELECT COUNT(*) FROM `t_customer_points_flow` WHERE `CustomerId` IN (@referrerId, @refereeId) AND `BizNo` LIKE 'SEED-MKT-%' AND `IsDeleted` = 0) UNION ALL SELECT 'coupon_templates', (SELECT COUNT(*) FROM `t_coupon_template` WHERE `TemplateCode` LIKE 'SEED-%' AND `IsDeleted` = 0) UNION ALL SELECT 'coupon_instances', (SELECT COUNT(*) FROM `t_coupon_instance` WHERE `CouponCode` LIKE 'SEED%' AND `IsDeleted` = 0) UNION ALL SELECT 'commission_details', (SELECT COUNT(*) FROM `t_referral_commission_detail` WHERE `ReferrerCustomerId` = @referrerId AND `RefereeCustomerId` = @refereeId AND `IsDeleted` = 0) UNION ALL SELECT 'withdraw_requests', (SELECT COUNT(*) FROM `t_commission_withdraw_request` WHERE `CustomerId` = @referrerId AND `SerialNumber` LIKE 'SEED-WD-9-%' AND `IsDeleted` = 0) UNION ALL SELECT 'audit_logs', (SELECT COUNT(*) FROM `t_marketing_audit_log` WHERE `Remark` LIKE '种子:%' AND `IsDeleted` = 0);