-- 旧会员体系 → 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';