admin/sql/migrate_marketing_module.sql
zzh 89233bc3da feat: add customer marketing module (M1-M6 backend)
Implement referral, points, coupons, commission, member levels, and order integration with migration SQL and background jobs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-23 16:42:08 +08:00

337 lines
19 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 客户营销模块:裂变 / 会员等级 / 优惠券 / 推荐分成
-- 前置约定(见 docs/客户裂变与营销体系设计方案.md §2、§24):
-- 1. 子账号不参与营销,一律归主客户
-- 2. MemberLevel 替换 CustomerGroup
-- 3. CommissionBalance 独立字段,可提现或转余额
-- 4. 默认分成:实付每 1000 元 → 2 元(0.2%)
-- 表结构遵循 docs/oms系统设计-050801.md §3.1.2(ConcurrencyStamp 固定默认值,禁止 UUID())
-- ---------------------------------------------------------------------------
-- 1. t_customer 扩展
-- ---------------------------------------------------------------------------
SET @col_exists := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_customer' AND COLUMN_NAME = 'ReferrerCustomerId'
);
SET @sql := IF(@col_exists = 0,
'ALTER TABLE `t_customer`
ADD COLUMN `ReferrerCustomerId` INT NULL COMMENT ''引荐人主客户Id → t_customer.Id'' AFTER `ParentCustomerId`,
ADD COLUMN `ReferralBindTime` DATETIME NULL COMMENT ''引荐绑定时间'' AFTER `ReferrerCustomerId`,
ADD COLUMN `ReferralChannel` VARCHAR(32) NULL COMMENT ''引荐渠道 link/qrcode/manual'' AFTER `ReferralBindTime`,
ADD COLUMN `MemberLevelId` INT NULL COMMENT ''会员等级Id → t_member_level.Id'' AFTER `CustomerGroup`,
ADD COLUMN `CommissionBalance` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT ''可提现佣金余额'' AFTER `Balance`,
ADD KEY `idx_cus_referrer` (`ReferrerCustomerId`),
ADD KEY `idx_cus_member_level` (`MemberLevelId`)',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------------------
-- 2. 引荐码
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `t_customer_referral_code` (
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
`CustomerId` INT NOT NULL COMMENT '主客户Id → t_customer.Id',
`InviteCode` VARCHAR(16) NOT NULL COMMENT '邀请短码,全局唯一',
`Status` TINYINT NOT NULL DEFAULT 1 COMMENT 'ReferralCodeStatus:0=Disabled,1=Enabled',
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0,
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdateUserId` INT NULL,
`UpdateTime` DATETIME NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `uk_referral_invite_code` (`InviteCode`),
UNIQUE KEY `uk_referral_customer` (`CustomerId`)
) COMMENT='客户引荐码(主客户)';
-- ---------------------------------------------------------------------------
-- 3. 会员等级
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `t_member_level` (
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
`LevelCode` VARCHAR(32) NOT NULL COMMENT '等级编码,唯一',
`LevelName` VARCHAR(64) NOT NULL COMMENT '等级名称',
`MinPoints` INT NOT NULL DEFAULT 0 COMMENT '升级所需累计积分',
`PriceTierKey` VARCHAR(32) NOT NULL COMMENT '价区键,对应卖价 CustomerGroupValues JSON 键',
`ExtraDiscountRate` DECIMAL(8,4) NOT NULL DEFAULT 0.0000 COMMENT '额外折扣率,如 0.03=97折',
`Sort` INT NOT NULL DEFAULT 0 COMMENT '排序,越小越低',
`IconUrl` VARCHAR(255) NULL COMMENT '等级图标',
`BenefitDesc` VARCHAR(512) NULL COMMENT '权益说明',
`Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None,1=Disabled,2=Enabled',
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0,
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdateUserId` INT NULL,
`UpdateTime` DATETIME NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `uk_member_level_code` (`LevelCode`),
KEY `idx_member_level_sort` (`Sort`, `Status`)
) COMMENT='会员等级配置';
CREATE TABLE IF NOT EXISTS `t_customer_points_account` (
`Id` INT NOT NULL AUTO_INCREMENT,
`CustomerId` INT NOT NULL COMMENT '主客户Id',
`TotalPoints` INT NOT NULL DEFAULT 0 COMMENT '累计积分(含已消耗,用于定级)',
`AvailablePoints` INT NOT NULL DEFAULT 0 COMMENT '可用积分',
`Version` INT NOT NULL DEFAULT 0 COMMENT '乐观锁',
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0,
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdateUserId` INT NULL,
`UpdateTime` DATETIME NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `uk_points_customer` (`CustomerId`)
) COMMENT='客户积分账户(主客户)';
CREATE TABLE IF NOT EXISTS `t_customer_points_flow` (
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
`CustomerId` INT NOT NULL COMMENT '主客户Id',
`ChangeType` TINYINT NOT NULL COMMENT 'PointsChangeType:1=Earn,2=Consume,3=Adjust,4=RefundClawback',
`Points` INT NOT NULL COMMENT '变动积分,正增负减',
`BizType` VARCHAR(32) NOT NULL COMMENT 'orderPay/refund/adminAdjust 等',
`BizId` INT NULL,
`BizNo` VARCHAR(64) NULL,
`Remark` VARCHAR(512) NULL,
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`UpdateUserId` INT NULL COMMENT '更新人',
`UpdateTime` DATETIME NULL COMMENT '更新时间',
PRIMARY KEY (`Id`),
KEY `idx_points_flow_customer_time` (`CustomerId`, `CreateTime`),
KEY `idx_points_flow_biz` (`BizType`, `BizId`)
) COMMENT='积分流水';
CREATE TABLE IF NOT EXISTS `t_member_points_rule` (
`Id` INT NOT NULL AUTO_INCREMENT,
`RuleName` VARCHAR(64) NOT NULL COMMENT '规则名称',
`PointsPerYuan` DECIMAL(10,4) NOT NULL DEFAULT 1.0000 COMMENT '实付每1元得积分',
`FirstOrderMultiplier` DECIMAL(6,2) NOT NULL DEFAULT 1.00 COMMENT '首单积分倍数',
`MaxPointsPerOrder` INT NOT NULL DEFAULT 10000 COMMENT '单笔积分上限',
`Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None,1=Disabled,2=Enabled',
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0,
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdateUserId` INT NULL,
`UpdateTime` DATETIME NULL,
PRIMARY KEY (`Id`)
) COMMENT='积分获取规则(全局单条有效)';
-- ---------------------------------------------------------------------------
-- 4. 优惠券
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `t_coupon_template` (
`Id` INT NOT NULL AUTO_INCREMENT,
`TemplateCode` VARCHAR(32) NOT NULL COMMENT '券模板编码',
`TemplateName` VARCHAR(128) NOT NULL COMMENT '券名称',
`CouponType` VARCHAR(32) NOT NULL COMMENT 'fixed_off/percent_off/direct_off/shipping_off',
`FaceValue` DECIMAL(18,2) NULL COMMENT '面额(满减/立减)',
`DiscountRate` DECIMAL(8,4) NULL COMMENT '折扣率,如0.95',
`MaxDiscountAmount` DECIMAL(18,2) NULL COMMENT '折扣券封顶',
`MinOrderAmount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '使用门槛',
`TotalQuantity` INT NOT NULL DEFAULT 0 COMMENT '发放总量,0=不限',
`IssuedQuantity` INT NOT NULL DEFAULT 0 COMMENT '已发放数量',
`PerCustomerLimit` INT NOT NULL DEFAULT 1 COMMENT '每客户领取上限',
`ValidType` TINYINT NOT NULL DEFAULT 1 COMMENT '1=固定日期,2=领取后N天',
`ValidStartTime` DATETIME NULL,
`ValidEndTime` DATETIME NULL,
`ValidDaysAfterReceive` INT NULL COMMENT '领取后有效天数',
`ApplyScopeJson` JSON NULL COMMENT '适用产品/国家等 JSON',
`GrantChannel` VARCHAR(32) NOT NULL DEFAULT 'manual' COMMENT 'manual/register/referral/level/activity',
`Status` TINYINT NOT NULL DEFAULT 1 COMMENT 'CouponTemplateStatus:0=Draft,1=Active,2=Ended',
`Remark` VARCHAR(512) NULL,
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0,
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdateUserId` INT NULL,
`UpdateTime` DATETIME NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `uk_coupon_template_code` (`TemplateCode`),
KEY `idx_coupon_template_status` (`Status`, `ValidEndTime`)
) COMMENT='优惠券模板';
CREATE TABLE IF NOT EXISTS `t_coupon_instance` (
`Id` INT NOT NULL AUTO_INCREMENT,
`TemplateId` INT NOT NULL COMMENT '→ t_coupon_template.Id',
`CustomerId` INT NOT NULL COMMENT '主客户Id',
`CouponCode` VARCHAR(32) NOT NULL COMMENT '券实例码',
`Status` TINYINT NOT NULL DEFAULT 1 COMMENT 'CouponInstanceStatus:1=Available,2=Locked,3=Used,4=Expired',
`ReceiveTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ValidStartTime` DATETIME NOT NULL,
`ValidEndTime` DATETIME NOT NULL,
`UseTime` DATETIME NULL,
`OrderId` INT NULL COMMENT '核销订单Id',
`LockExpireTime` DATETIME NULL COMMENT '下单预占过期',
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0,
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdateUserId` INT NULL,
`UpdateTime` DATETIME NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `uk_coupon_instance_code` (`CouponCode`),
KEY `idx_coupon_instance_customer_status` (`CustomerId`, `Status`),
KEY `idx_coupon_instance_order` (`OrderId`)
) COMMENT='客户优惠券实例';
-- ---------------------------------------------------------------------------
-- 5. 推荐分成
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `t_referral_commission_rule` (
`Id` INT NOT NULL AUTO_INCREMENT,
`RuleName` VARCHAR(64) NOT NULL DEFAULT '默认分成规则',
`CommissionMode` VARCHAR(32) NOT NULL DEFAULT 'per_amount' COMMENT 'per_amount=每满X元得Y元',
`BaseAmount` DECIMAL(18,2) NOT NULL DEFAULT 1000.00 COMMENT '基数金额',
`CommissionAmount` DECIMAL(18,2) NOT NULL DEFAULT 2.00 COMMENT '每基数分成金额',
`FreezeDays` INT NOT NULL DEFAULT 7 COMMENT '派送成功后的结算冻结天数',
`SettleTriggerOrderStatus` VARCHAR(32) NOT NULL DEFAULT 'deliverySuccess' COMMENT '允许结算的订单状态,固定 deliverySuccess',
`MonthlyCap` DECIMAL(18,2) NULL COMMENT '引荐人单月分成封顶,NULL=不限',
`Status` TINYINT NOT NULL DEFAULT 2 COMMENT 'EnableStatus:0=None,1=Disabled,2=Enabled',
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0,
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdateUserId` INT NULL,
`UpdateTime` DATETIME NULL,
PRIMARY KEY (`Id`)
) COMMENT='引荐分成规则';
CREATE TABLE IF NOT EXISTS `t_referral_commission_detail` (
`Id` INT NOT NULL AUTO_INCREMENT,
`ReferrerCustomerId` INT NOT NULL COMMENT '引荐人主客户Id',
`RefereeCustomerId` INT NOT NULL COMMENT '被引荐主客户Id',
`OrderId` INT NOT NULL COMMENT '订单Id',
`OrderNo` VARCHAR(64) NOT NULL COMMENT '运单号快照',
`BasePayableAmount` DECIMAL(18,2) NOT NULL COMMENT '分成基数(实付)',
`CommissionAmount` DECIMAL(18,2) NOT NULL COMMENT '分成金额',
`Status` TINYINT NOT NULL DEFAULT 1 COMMENT 'CommissionStatus:1=Pending,2=Settled,3=Cancelled',
`EligibleTime` DATETIME NULL COMMENT '订单达到派送成功时间,分成计算触发点',
`SettleTime` DATETIME NULL COMMENT '入账 CommissionBalance 时间',
`RuleSnapshotJson` JSON NULL COMMENT '分成规则快照:BaseAmount/CommissionAmount/FreezeDays/MonthlyCap 等',
`CancelReason` VARCHAR(256) NULL,
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0,
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdateUserId` INT NULL,
`UpdateTime` DATETIME NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `uk_commission_order_referrer` (`OrderId`, `ReferrerCustomerId`),
KEY `idx_commission_referrer_status` (`ReferrerCustomerId`, `Status`, `CreateTime`),
KEY `idx_commission_referee` (`RefereeCustomerId`)
) COMMENT='引荐分成明细';
CREATE TABLE IF NOT EXISTS `t_commission_withdraw_request` (
`Id` INT NOT NULL AUTO_INCREMENT,
`CustomerId` INT NOT NULL COMMENT '主客户Id',
`SerialNumber` VARCHAR(64) NOT NULL COMMENT '提现单号',
`Amount` DECIMAL(18,2) NOT NULL COMMENT '申请金额',
`WithdrawType` TINYINT NOT NULL COMMENT '1=提现到外部,2=转入余额',
`Status` TINYINT NOT NULL DEFAULT 1 COMMENT 'WithdrawStatus:1=Pending,2=Approved,3=Rejected,4=Paid',
`Remark` VARCHAR(512) NULL COMMENT '客户备注',
`AuditRemark` VARCHAR(512) NULL COMMENT '审核备注',
`AuditBy` VARCHAR(32) NULL,
`AuditTime` DATETIME NULL,
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0,
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdateUserId` INT NULL,
`UpdateTime` DATETIME NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `uk_commission_withdraw_serial` (`SerialNumber`),
KEY `idx_commission_withdraw_customer` (`CustomerId`, `Status`, `CreateTime`)
) COMMENT='佣金提现/转余额申请';
-- ---------------------------------------------------------------------------
-- 5.1 营销审计日志
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `t_marketing_audit_log` (
`Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
`Action` VARCHAR(64) NOT NULL COMMENT 'grantCoupon/adjustPoints/rebindReferral 等',
`OperatorId` INT NOT NULL DEFAULT 0 COMMENT '操作人 mapId',
`TargetType` VARCHAR(32) NOT NULL COMMENT 'customer/template/order 等',
`TargetId` INT NULL COMMENT '目标主键',
`BeforeJson` JSON NULL COMMENT '变更前快照',
`AfterJson` JSON NULL COMMENT '变更后快照',
`Remark` VARCHAR(512) NULL COMMENT '原因/备注',
`IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是',
`ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000' COMMENT '并发戳',
`CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人',
`CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`UpdateUserId` INT NULL COMMENT '更新人',
`UpdateTime` DATETIME NULL COMMENT '更新时间',
PRIMARY KEY (`Id`),
KEY `idx_marketing_audit_action_time` (`Action`, `CreateTime`),
KEY `idx_marketing_audit_target` (`TargetType`, `TargetId`)
) COMMENT='营销高危操作审计';
-- ---------------------------------------------------------------------------
-- 6. 订单营销快照
-- ---------------------------------------------------------------------------
SET @col_exists := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_order' AND COLUMN_NAME = 'MemberLevelId'
);
SET @sql := IF(@col_exists = 0,
'ALTER TABLE `t_order`
ADD COLUMN `MemberLevelId` INT NULL COMMENT ''下单时会员等级快照'' AFTER `CustomerId`,
ADD COLUMN `PriceTierKey` VARCHAR(32) NULL COMMENT ''下单时价区键快照'' AFTER `MemberLevelId`,
ADD COLUMN `ReceivableSubtotal` DECIMAL(18,2) NULL COMMENT ''等级价后小计'' AFTER `PriceTierKey`,
ADD COLUMN `LevelDiscountAmount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT ''等级额外折扣额'' AFTER `ReceivableSubtotal`,
ADD COLUMN `CouponInstanceId` INT NULL COMMENT ''核销券实例Id'' AFTER `LevelDiscountAmount`,
ADD COLUMN `CouponDiscountAmount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT ''优惠券抵扣额'' AFTER `CouponInstanceId`,
ADD COLUMN `PayableAmount` DECIMAL(18,2) NULL COMMENT ''应付实付'' AFTER `CouponDiscountAmount`,
ADD KEY `idx_ord_coupon` (`CouponInstanceId`)',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------------------
-- 7. 种子:默认会员等级(映射原 CustomerGroup 价区)
-- ---------------------------------------------------------------------------
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`);
-- 主客户 MemberLevelId 迁移(按原 CustomerGroup)
UPDATE `t_customer` c
LEFT JOIN `t_member_level` ml ON (
(c.CustomerGroup IS NULL OR c.CustomerGroup = 0 OR c.CustomerGroup = 1) AND ml.LevelCode = 'normal'
OR (c.CustomerGroup = 2 AND ml.LevelCode = 'silver')
OR (c.CustomerGroup = 3 AND ml.LevelCode = 'gold')
OR (c.CustomerGroup = 4 AND ml.LevelCode = 'diamond')
OR (c.CustomerGroup >= 5 AND ml.LevelCode = 'diamond')
)
SET c.MemberLevelId = ml.Id
WHERE c.ParentCustomerId IS NULL AND c.MemberLevelId IS NULL AND ml.Id IS NOT NULL;
-- 默认积分规则
INSERT INTO `t_member_points_rule`
(`RuleName`, `PointsPerYuan`, `FirstOrderMultiplier`, `MaxPointsPerOrder`, `Status`, `CreateUserId`)
SELECT '默认积分规则', 1.0000, 1.00, 10000, 2, 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `t_member_points_rule` WHERE `IsDeleted` = 0 LIMIT 1);
-- 默认分成规则:每 1000 元 → 2 元
INSERT INTO `t_referral_commission_rule`
(`RuleName`, `CommissionMode`, `BaseAmount`, `CommissionAmount`, `FreezeDays`, `Status`, `CreateUserId`)
SELECT '默认分成', 'per_amount', 1000.00, 2.00, 7, 2, 0
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `t_referral_commission_rule` WHERE `IsDeleted` = 0 LIMIT 1);