All checks were successful
Build and Deploy / deploy (push) Successful in 3m50s
Co-authored-by: Cursor <cursoragent@cursor.com>
217 lines
7.9 KiB
SQL
217 lines
7.9 KiB
SQL
-- 旧会员体系 → 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';
|