|
|
@@ -149,15 +149,26 @@ WHERE NOT EXISTS (SELECT 1 FROM `t_permission` WHERE `value` = 'rechargeConfig.r
|
|
|
CREATE TABLE IF NOT EXISTS `t_recharge_config_group` (
|
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
|
`name` VARCHAR(64) DEFAULT NULL COMMENT '分组名称',
|
|
|
- `station_id` VARCHAR(64) DEFAULT NULL COMMENT '站点ID,NULL表示平台默认配置',
|
|
|
+ `is_default` TINYINT(1) DEFAULT 0 COMMENT '是否默认分组(未分配站点的自动使用)',
|
|
|
`company_id` BIGINT DEFAULT NULL COMMENT '公司(租户)ID',
|
|
|
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
- PRIMARY KEY (`id`),
|
|
|
- UNIQUE KEY `uk_station_id` (`station_id`)
|
|
|
+ PRIMARY KEY (`id`)
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='充值配置分组表';
|
|
|
|
|
|
--- 9b. 确保 t_recharge_config 有 station_id 列(兼容 V2.1 未执行的情况)
|
|
|
+-- 9b. 创建分组-站点关联表
|
|
|
+CREATE TABLE IF NOT EXISTS `t_recharge_config_station_group` (
|
|
|
+ `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
|
+ `group_id` BIGINT NOT NULL COMMENT '分组ID',
|
|
|
+ `station_id` VARCHAR(64) NOT NULL COMMENT '站点ID',
|
|
|
+ `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
+ `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ UNIQUE KEY `uk_station_id` (`station_id`),
|
|
|
+ KEY `idx_group_id` (`group_id`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='充值配置分组-站点关联表';
|
|
|
+
|
|
|
+-- 9c. 确保 t_recharge_config 有 station_id 列(兼容 V2.1 未执行的情况)
|
|
|
DROP PROCEDURE IF EXISTS add_station_id_if_missing;
|
|
|
DELIMITER //
|
|
|
CREATE PROCEDURE add_station_id_if_missing()
|
|
|
@@ -177,43 +188,64 @@ DELIMITER ;
|
|
|
CALL add_station_id_if_missing();
|
|
|
DROP PROCEDURE IF EXISTS add_station_id_if_missing;
|
|
|
|
|
|
--- 9c. 为已有的 station_id(含NULL默认值)创建分组
|
|
|
-INSERT INTO `t_recharge_config_group` (`station_id`, `name`, `create_time`, `update_time`)
|
|
|
-SELECT DISTINCT `station_id`, NULL, NOW(), NOW()
|
|
|
+-- 9d. 为已有的 station_id 创建分组(每个唯一 station_id 一个分组)
|
|
|
+INSERT INTO `t_recharge_config_group` (`name`, `is_default`, `create_time`, `update_time`)
|
|
|
+SELECT DISTINCT NULL, IF(`station_id` IS NULL, 1, 0), NOW(), NOW()
|
|
|
FROM `t_recharge_config`
|
|
|
WHERE NOT EXISTS (
|
|
|
- SELECT 1 FROM `t_recharge_config_group` g
|
|
|
- WHERE (g.`station_id` <=> `t_recharge_config`.`station_id`)
|
|
|
+ SELECT 1 FROM `t_recharge_config_group`
|
|
|
+);
|
|
|
+
|
|
|
+-- 9e. 确保平台默认分组存在并标记为默认
|
|
|
+INSERT INTO `t_recharge_config_group` (`name`, `is_default`, `create_time`, `update_time`)
|
|
|
+SELECT NULL, 1, NOW(), NOW()
|
|
|
+WHERE NOT EXISTS (
|
|
|
+ SELECT 1 FROM `t_recharge_config_group` WHERE `is_default` = 1
|
|
|
);
|
|
|
|
|
|
--- 9d. 确保平台默认分组存在(station_id IS NULL)
|
|
|
-INSERT INTO `t_recharge_config_group` (`station_id`, `name`, `create_time`, `update_time`)
|
|
|
-SELECT NULL, NULL, NOW(), NOW()
|
|
|
+-- 9f. 将旧 station_id 数据迁入关联表(非NULL的station_id)
|
|
|
+INSERT INTO `t_recharge_config_station_group` (`group_id`, `station_id`, `create_time`, `update_time`)
|
|
|
+SELECT g.id, c.`station_id`, NOW(), NOW()
|
|
|
+FROM (SELECT DISTINCT `station_id` FROM `t_recharge_config` WHERE `station_id` IS NOT NULL) c
|
|
|
+INNER JOIN `t_recharge_config_group` g ON IFNULL(g.name, '') = '' AND g.`is_default` = 0
|
|
|
WHERE NOT EXISTS (
|
|
|
- SELECT 1 FROM `t_recharge_config_group` WHERE `station_id` IS NULL
|
|
|
+ SELECT 1 FROM `t_recharge_config_station_group` sg WHERE sg.`station_id` = c.`station_id`
|
|
|
);
|
|
|
|
|
|
--- 9e. t_recharge_config 新增 group_id 列
|
|
|
+-- 如果上面的 INSERT 未分配成功(group 匹配不上),则为每个非NULL station_id 各自创建分组并关联
|
|
|
+INSERT INTO `t_recharge_config_group` (`name`, `is_default`, `create_time`, `update_time`)
|
|
|
+SELECT DISTINCT c.`station_id`, 0, NOW(), NOW()
|
|
|
+FROM `t_recharge_config` c
|
|
|
+WHERE c.`station_id` IS NOT NULL
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM `t_recharge_config_station_group` sg WHERE sg.`station_id` = c.`station_id`)
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM `t_recharge_config_group` g WHERE g.`name` = c.`station_id`);
|
|
|
+
|
|
|
+INSERT INTO `t_recharge_config_station_group` (`group_id`, `station_id`, `create_time`, `update_time`)
|
|
|
+SELECT g.id, g.`name`, NOW(), NOW()
|
|
|
+FROM `t_recharge_config_group` g
|
|
|
+WHERE g.`is_default` = 0
|
|
|
+ AND NOT EXISTS (SELECT 1 FROM `t_recharge_config_station_group` sg WHERE sg.`group_id` = g.id);
|
|
|
+
|
|
|
+-- 9g. t_recharge_config 新增 group_id 列
|
|
|
ALTER TABLE `t_recharge_config`
|
|
|
ADD COLUMN `group_id` BIGINT DEFAULT NULL COMMENT '所属分组ID'
|
|
|
AFTER `id`;
|
|
|
|
|
|
--- 9f. 回填 group_id
|
|
|
+-- 9h. 回填 group_id:通过旧 station_id 匹配到关联表的 group_id
|
|
|
UPDATE `t_recharge_config` c
|
|
|
- INNER JOIN `t_recharge_config_group` g
|
|
|
- ON (c.`station_id` <=> g.`station_id`)
|
|
|
-SET c.`group_id` = g.`id`;
|
|
|
+ INNER JOIN `t_recharge_config_station_group` sg ON c.`station_id` = sg.`station_id`
|
|
|
+SET c.`group_id` = sg.`group_id`;
|
|
|
|
|
|
--- 9g. 未关联到任何分组的行归入默认分组
|
|
|
+-- 9i. station_id 为 NULL 的行归入默认分组
|
|
|
UPDATE `t_recharge_config`
|
|
|
-SET `group_id` = (SELECT id FROM `t_recharge_config_group` WHERE `station_id` IS NULL LIMIT 1)
|
|
|
+SET `group_id` = (SELECT id FROM `t_recharge_config_group` WHERE `is_default` = 1 LIMIT 1)
|
|
|
WHERE `group_id` IS NULL;
|
|
|
|
|
|
--- 9h. group_id 设为 NOT NULL
|
|
|
+-- 9j. group_id 设为 NOT NULL
|
|
|
ALTER TABLE `t_recharge_config`
|
|
|
MODIFY COLUMN `group_id` BIGINT NOT NULL COMMENT '所属分组ID';
|
|
|
|
|
|
--- 9i. 删除旧 station_id 列
|
|
|
+-- 9k. 删除旧 station_id 列
|
|
|
DROP PROCEDURE IF EXISTS drop_station_id;
|
|
|
DELIMITER //
|
|
|
CREATE PROCEDURE drop_station_id()
|
|
|
@@ -231,7 +263,7 @@ DELIMITER ;
|
|
|
CALL drop_station_id();
|
|
|
DROP PROCEDURE IF EXISTS drop_station_id;
|
|
|
|
|
|
--- 9j. 组内金额唯一约束
|
|
|
+-- 9l. 组内金额唯一约束
|
|
|
ALTER TABLE `t_recharge_config`
|
|
|
ADD INDEX `idx_group_id` (`group_id`),
|
|
|
ADD UNIQUE INDEX `uk_group_recharge_amount` (`group_id`, `recharge_amount`);
|