admin/sql/migrate_member_level_rolling_points.sql
zzh f972a28d79
All checks were successful
Build and Deploy / deploy (push) Successful in 3m50s
feat: 落地滚动会员、券发放与邀请分成奖励
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 17:40:24 +08:00

217 lines
7.9 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.

-- 旧会员体系 → V0~V5(可重复执行)
-- old: normal/silver/gold/diamond
-- new: V0 普通 / V1 铜卡(新增) / V2 银卡 / V3 金卡 / V4 钻石 / V5 皇冠(新增)
SET @db := DATABASE();
SET @col := (
SELECT COUNT(1)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db
AND TABLE_NAME = 't_member_level'
AND COLUMN_NAME = 'CanDowngrade'
);
SET @sql := IF(
@col = 0,
'ALTER TABLE `t_member_level`
ADD COLUMN `CanDowngrade` TINYINT(1) NOT NULL DEFAULT 0 COMMENT ''V4/V5 允许逐级降级'' AFTER `ExtraDiscountRate`',
'SELECT ''CanDowngrade already exists'' AS info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- ---------- 把旧行升级成新编码(仅当目标 V* 还不存在)----------
UPDATE `t_member_level`
SET
`LevelCode` = 'V0',
`LevelName` = '普通会员',
`MinPoints` = 0,
`ExtraDiscountRate` = 0.00,
`CanDowngrade` = 0,
`Sort` = 0,
`BenefitDesc` = '新注册 / 小单试单卖家',
`Status` = 2,
`UpdateTime` = NOW()
WHERE `IsDeleted` = 0
AND LOWER(`LevelCode`) = 'normal'
AND NOT EXISTS (SELECT 1 FROM (SELECT 1 FROM `t_member_level` x WHERE x.`IsDeleted` = 0 AND x.`LevelCode` = 'V0') t);
UPDATE `t_member_level`
SET
`LevelCode` = 'V2',
`LevelName` = '银卡会员',
`MinPoints` = 60000,
`ExtraDiscountRate` = 0.02,
`CanDowngrade` = 0,
`Sort` = 2,
`BenefitDesc` = '主力中小卖家,基础运费 98 折',
`Status` = 2,
`UpdateTime` = NOW()
WHERE `IsDeleted` = 0
AND LOWER(`LevelCode`) = 'silver'
AND NOT EXISTS (SELECT 1 FROM (SELECT 1 FROM `t_member_level` x WHERE x.`IsDeleted` = 0 AND x.`LevelCode` = 'V2') t);
UPDATE `t_member_level`
SET
`LevelCode` = 'V3',
`LevelName` = '金卡会员',
`MinPoints` = 120000,
`ExtraDiscountRate` = 0.03,
`CanDowngrade` = 0,
`Sort` = 3,
`BenefitDesc` = '优质中型卖家,基础运费 97 折;此级及以下只升不降',
`Status` = 2,
`UpdateTime` = NOW()
WHERE `IsDeleted` = 0
AND LOWER(`LevelCode`) = 'gold'
AND NOT EXISTS (SELECT 1 FROM (SELECT 1 FROM `t_member_level` x WHERE x.`IsDeleted` = 0 AND x.`LevelCode` = 'V3') t);
UPDATE `t_member_level`
SET
`LevelCode` = 'V4',
`LevelName` = '钻石会员',
`MinPoints` = 240000,
`ExtraDiscountRate` = 0.04,
`CanDowngrade` = 1,
`Sort` = 4,
`BenefitDesc` = '中大卖家,基础运费 96 折;滚动积分不足可降到金卡',
`Status` = 2,
`UpdateTime` = NOW()
WHERE `IsDeleted` = 0
AND LOWER(`LevelCode`) = 'diamond'
AND NOT EXISTS (SELECT 1 FROM (SELECT 1 FROM `t_member_level` x WHERE x.`IsDeleted` = 0 AND x.`LevelCode` = 'V4') t);
-- ---------- 缺档则插入(铜卡、皇冠,以及未被旧行带过来的档)----------
INSERT INTO `t_member_level`
(`LevelCode`, `LevelName`, `MinPoints`, `ExtraDiscountRate`, `CanDowngrade`, `Sort`, `BenefitDesc`, `Status`, `IsDeleted`, `CreateTime`)
SELECT 'V0', '普通会员', 0, 0.00, 0, 0, '新注册 / 小单试单卖家', 2, 0, NOW()
WHERE NOT EXISTS (SELECT 1 FROM `t_member_level` WHERE `LevelCode` = 'V0' AND `IsDeleted` = 0);
INSERT INTO `t_member_level`
(`LevelCode`, `LevelName`, `MinPoints`, `ExtraDiscountRate`, `CanDowngrade`, `Sort`, `BenefitDesc`, `Status`, `IsDeleted`, `CreateTime`)
SELECT 'V1', '铜卡会员', 24000, 0.01, 0, 1, '起步稳定发货卖家,基础运费 99 折', 2, 0, NOW()
WHERE NOT EXISTS (SELECT 1 FROM `t_member_level` WHERE `LevelCode` = 'V1' AND `IsDeleted` = 0);
INSERT INTO `t_member_level`
(`LevelCode`, `LevelName`, `MinPoints`, `ExtraDiscountRate`, `CanDowngrade`, `Sort`, `BenefitDesc`, `Status`, `IsDeleted`, `CreateTime`)
SELECT 'V2', '银卡会员', 60000, 0.02, 0, 2, '主力中小卖家,基础运费 98 折', 2, 0, NOW()
WHERE NOT EXISTS (SELECT 1 FROM `t_member_level` WHERE `LevelCode` = 'V2' AND `IsDeleted` = 0);
INSERT INTO `t_member_level`
(`LevelCode`, `LevelName`, `MinPoints`, `ExtraDiscountRate`, `CanDowngrade`, `Sort`, `BenefitDesc`, `Status`, `IsDeleted`, `CreateTime`)
SELECT 'V3', '金卡会员', 120000, 0.03, 0, 3, '优质中型卖家,基础运费 97 折;此级及以下只升不降', 2, 0, NOW()
WHERE NOT EXISTS (SELECT 1 FROM `t_member_level` WHERE `LevelCode` = 'V3' AND `IsDeleted` = 0);
INSERT INTO `t_member_level`
(`LevelCode`, `LevelName`, `MinPoints`, `ExtraDiscountRate`, `CanDowngrade`, `Sort`, `BenefitDesc`, `Status`, `IsDeleted`, `CreateTime`)
SELECT 'V4', '钻石会员', 240000, 0.04, 1, 4, '中大卖家,基础运费 96 折;滚动积分不足可降到金卡', 2, 0, NOW()
WHERE NOT EXISTS (SELECT 1 FROM `t_member_level` WHERE `LevelCode` = 'V4' AND `IsDeleted` = 0);
INSERT INTO `t_member_level`
(`LevelCode`, `LevelName`, `MinPoints`, `ExtraDiscountRate`, `CanDowngrade`, `Sort`, `BenefitDesc`, `Status`, `IsDeleted`, `CreateTime`)
SELECT 'V5', '皇冠会员', 600000, 0.05, 1, 5, '顶级头部卖家,基础运费 95 折封顶;滚动积分不足可降到钻石', 2, 0, NOW()
WHERE NOT EXISTS (SELECT 1 FROM `t_member_level` WHERE `LevelCode` = 'V5' AND `IsDeleted` = 0);
-- ---------- 旧编码与新档并存时:客户挂到新档,旧行停用 ----------
UPDATE `t_customer` c
INNER JOIN `t_member_level` old ON old.`Id` = c.`MemberLevelId` AND old.`IsDeleted` = 0
INNER JOIN `t_member_level` canon ON canon.`IsDeleted` = 0 AND canon.`LevelCode` = CASE LOWER(old.`LevelCode`)
WHEN 'normal' THEN 'V0'
WHEN 'silver' THEN 'V2'
WHEN 'gold' THEN 'V3'
WHEN 'diamond' THEN 'V4'
ELSE NULL
END
SET c.`MemberLevelId` = canon.`Id`, c.`UpdateTime` = NOW()
WHERE LOWER(old.`LevelCode`) IN ('normal', 'silver', 'gold', 'diamond')
AND old.`Id` <> canon.`Id`;
UPDATE `t_member_level` old
INNER JOIN `t_member_level` canon ON canon.`IsDeleted` = 0 AND canon.`LevelCode` = CASE LOWER(old.`LevelCode`)
WHEN 'normal' THEN 'V0'
WHEN 'silver' THEN 'V2'
WHEN 'gold' THEN 'V3'
WHEN 'diamond' THEN 'V4'
ELSE NULL
END
SET
old.`IsDeleted` = 1,
old.`Status` = 1,
old.`UpdateTime` = NOW()
WHERE old.`IsDeleted` = 0
AND LOWER(old.`LevelCode`) IN ('normal', 'silver', 'gold', 'diamond')
AND old.`Id` <> canon.`Id`;
-- ---------- 校正 V0~V5 门槛/折扣(已占用客户的行 Id 不变)----------
UPDATE `t_member_level`
SET
`LevelName` = '普通会员',
`MinPoints` = 0,
`ExtraDiscountRate` = 0.00,
`CanDowngrade` = 0,
`Sort` = 0,
`BenefitDesc` = '新注册 / 小单试单卖家',
`Status` = 2,
`UpdateTime` = NOW()
WHERE `IsDeleted` = 0 AND `LevelCode` = 'V0';
UPDATE `t_member_level`
SET
`LevelName` = '铜卡会员',
`MinPoints` = 24000,
`ExtraDiscountRate` = 0.01,
`CanDowngrade` = 0,
`Sort` = 1,
`BenefitDesc` = '起步稳定发货卖家,基础运费 99 折',
`Status` = 2,
`UpdateTime` = NOW()
WHERE `IsDeleted` = 0 AND `LevelCode` = 'V1';
UPDATE `t_member_level`
SET
`LevelName` = '银卡会员',
`MinPoints` = 60000,
`ExtraDiscountRate` = 0.02,
`CanDowngrade` = 0,
`Sort` = 2,
`BenefitDesc` = '主力中小卖家,基础运费 98 折',
`Status` = 2,
`UpdateTime` = NOW()
WHERE `IsDeleted` = 0 AND `LevelCode` = 'V2';
UPDATE `t_member_level`
SET
`LevelName` = '金卡会员',
`MinPoints` = 120000,
`ExtraDiscountRate` = 0.03,
`CanDowngrade` = 0,
`Sort` = 3,
`BenefitDesc` = '优质中型卖家,基础运费 97 折;此级及以下只升不降',
`Status` = 2,
`UpdateTime` = NOW()
WHERE `IsDeleted` = 0 AND `LevelCode` = 'V3';
UPDATE `t_member_level`
SET
`LevelName` = '钻石会员',
`MinPoints` = 240000,
`ExtraDiscountRate` = 0.04,
`CanDowngrade` = 1,
`Sort` = 4,
`BenefitDesc` = '中大卖家,基础运费 96 折;滚动积分不足可降到金卡',
`Status` = 2,
`UpdateTime` = NOW()
WHERE `IsDeleted` = 0 AND `LevelCode` = 'V4';
UPDATE `t_member_level`
SET
`LevelName` = '皇冠会员',
`MinPoints` = 600000,
`ExtraDiscountRate` = 0.05,
`CanDowngrade` = 1,
`Sort` = 5,
`BenefitDesc` = '顶级头部卖家,基础运费 95 折封顶;滚动积分不足可降到钻石',
`Status` = 2,
`UpdateTime` = NOW()
WHERE `IsDeleted` = 0 AND `LevelCode` = 'V5';