-- ============================================ -- 瑞来健康 多角色系统 DDL 迁移脚本 -- 版本: v2.0 -- 日期: 2026-06-08 -- 执行方式: 在 rlz 生产库依次执行以下语句 -- ============================================ -- ============================================ -- 第一部分: 新建表 (4张) -- ============================================ -- 1. 推广关系表 DROP TABLE IF EXISTS `rlz_promotion_relation`; CREATE TABLE `rlz_promotion_relation` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `promoter_id` bigint(20) NOT NULL COMMENT '推广员用户ID', `invited_user_id` bigint(20) NOT NULL COMMENT '被邀请用户ID', `level` tinyint(4) NOT NULL COMMENT '推广层级: 1=一级 2=二级 3=三级', `parent_promoter_id` bigint(20) DEFAULT NULL COMMENT '上级推广员ID(二级/三级时指向直接上级)', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '绑定时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_invited` (`invited_user_id`), KEY `idx_promoter` (`promoter_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广关系表'; -- 2. 分润记录表 DROP TABLE IF EXISTS `rlz_profit_record`; CREATE TABLE `rlz_profit_record` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `order_id` bigint(20) NOT NULL COMMENT '关联订单ID', `user_id` bigint(20) NOT NULL COMMENT '受益人用户ID', `role_type` varchar(10) NOT NULL COMMENT '角色类型: caregiver/dispatcher/promoter/operations', `profit_type` varchar(10) NOT NULL COMMENT '分润类型: service/dispatch/promotion/regional', `amount` decimal(10,2) NOT NULL COMMENT '分润金额', `rate` decimal(5,2) DEFAULT NULL COMMENT '分润比例(%)', `status` char(1) DEFAULT '0' COMMENT '0=待结算 1=已结算', `settle_time` datetime DEFAULT NULL COMMENT '结算时间', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_order` (`order_id`), KEY `idx_user` (`user_id`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分润记录表'; -- 3. 推广佣金配置表 DROP TABLE IF EXISTS `rlz_promoter_config`; CREATE TABLE `rlz_promoter_config` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `config_key` varchar(50) NOT NULL COMMENT '配置键', `config_value` varchar(50) NOT NULL COMMENT '配置值', `description` varchar(200) DEFAULT NULL COMMENT '说明', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `config_key` (`config_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推广佣金配置表'; -- 默认配置数据 INSERT INTO `rlz_promoter_config` (`config_key`, `config_value`, `description`) VALUES ('level1_rate', '5', '一级推广佣金比例(%)'), ('level2_rate', '3', '二级推广佣金比例(%)'), ('level3_rate', '2', '三级推广佣金比例(%)'), ('caregiver_rate', '80', '陪诊师服务费比例(%)'), ('dispatcher_rate', '2', '调度员分润比例(%)'), ('operations_rate', '1', '运营经理区域分润比例(%)'); -- 4. 运营区域表 DROP TABLE IF EXISTS `rlz_region`; CREATE TABLE `rlz_region` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL COMMENT '区域名称', `parent_id` bigint(20) DEFAULT '0' COMMENT '上级区域ID(0=根)', `level` tinyint(4) DEFAULT NULL COMMENT '层级: 1=省 2=市 3=区', `manager_id` bigint(20) DEFAULT NULL COMMENT '运营经理用户ID', `status` char(1) DEFAULT '0' COMMENT '0=正常 1=停用', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运营区域表'; -- ============================================ -- 第二部分: 现有表扩展 (4张) -- ============================================ -- 1. 系统用户表扩展 ALTER TABLE `sys_user` ADD COLUMN IF NOT EXISTS `user_type` varchar(10) DEFAULT '00' COMMENT '用户类型: 00=患者 01=陪诊师 03=运营经理 04=客服 05=调度 06=推广员 0B=机构 0C=管理员', ADD COLUMN IF NOT EXISTS `promotion_code` varchar(20) DEFAULT NULL COMMENT '邀请码', ADD COLUMN IF NOT EXISTS `parent_promoter_id` bigint(20) DEFAULT NULL COMMENT '上级推广员ID', ADD COLUMN IF NOT EXISTS `region_id` bigint(20) DEFAULT NULL COMMENT '所属区域ID'; -- (如果数据库版本不支持 IF NOT EXISTS, 请单独执行以下语句): -- ALTER TABLE `sys_user` ADD COLUMN `user_type` varchar(10) DEFAULT '00' COMMENT '用户类型'; -- ALTER TABLE `sys_user` ADD COLUMN `promotion_code` varchar(20) DEFAULT NULL COMMENT '邀请码'; -- ALTER TABLE `sys_user` ADD COLUMN `parent_promoter_id` bigint(20) DEFAULT NULL COMMENT '上级推广员ID'; -- ALTER TABLE `sys_user` ADD COLUMN `region_id` bigint(20) DEFAULT NULL COMMENT '所属区域ID'; -- 2. 订单表扩展 ALTER TABLE `rlz_order` ADD COLUMN IF NOT EXISTS `promoter_id` bigint(20) DEFAULT NULL COMMENT '推广员ID(谁推广的此单)', ADD COLUMN IF NOT EXISTS `dispatch_type` varchar(10) DEFAULT 'auto' COMMENT '派单方式: auto=自动 manual=手动', ADD COLUMN IF NOT EXISTS `dispatcher_id` bigint(20) DEFAULT NULL COMMENT '调度员ID(手动派单时记录)'; -- 3. 系统角色新增 (如果已存在请跳过) INSERT IGNORE INTO `sys_role` (`role_id`, `role_name`, `role_key`, `role_sort`, `status`, `create_time`) VALUES (103, '运营经理', 'operations', 1, '0', NOW()), (104, '客服专员', 'service', 2, '0', NOW()), (105, '调度员', 'dispatcher', 2, '0', NOW()), (106, '推广员', 'promoter', 3, '0', NOW()); -- 4. 系统菜单新增 (如果已存在请跳过) -- 一级菜单: 财务管理 INSERT IGNORE INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_time`) VALUES (3000, '财务管理', 0, 9, 'finance', NULL, 'M', '0', '0', NULL, 'money', NOW()); -- 二级菜单: 财务子模块 INSERT IGNORE INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_time`) VALUES (3001, '退款审核', 3000, 1, 'refund', 'finance/refund/index', 'C', '0', '0', 'system:order:list', 'build', NOW()), (3010, '结算管理', 3000, 2, 'settlement', 'finance/settlement/index', 'C', '0', '0', 'system:order:list', 'build', NOW()), (3040, '平台配置', 3000, 3, 'platformConfig', 'finance/platformConfig/index', 'C', '0', '0', 'system:platformConfig:list', 'build', NOW()), (3054, '分润记录', 2010, 1, 'profit', 'finance/profit/index', 'C', '0', '0', 'system:profit:list', 'build', NOW()); -- 二级菜单: 调度管理 INSERT IGNORE INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_time`) VALUES (3052, '调度管理', 3000, 4, 'dispatch', 'system/dispatch/index', 'C', '0', '0', 'system:dispatch:list', 'build', NOW()); -- 一级菜单下的新模块 INSERT IGNORE INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_time`) VALUES (3042, '推广管理', 1, 6, 'promotion', 'system/promotion/index', 'C', '0', '0', 'system:promotion:list', 'peoples', NOW()), (3047, '区域管理', 1, 7, 'region', 'system/region/index', 'C', '0', '0', 'system:region:list', 'tree', NOW()); -- ============================================ -- 第三部分: 权限分配 (sys_role_menu) -- 将新菜单分配给对应角色 -- ============================================ -- 运营经理(103) 权限 INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (103, 3000), -- 财务管理 (103, 3001), -- 退款审核 (103, 3010), -- 结算管理 (103, 3054), -- 分润记录 (103, 3047); -- 区域管理 -- 客服专员(104) 权限 INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (104, 3000), -- 财务管理 (104, 3001), -- 退款审核 (104, 3054); -- 分润记录 -- 调度员(105) 权限 INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (105, 3000), -- 财务管理 (105, 3052), -- 调度管理 (105, 3054); -- 分润记录 -- 推广员(106) 权限 INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (106, 3000), -- 财务管理 (106, 3042), -- 推广管理 (106, 3054); -- 分润记录 -- ============================================ -- 验证脚本 -- ============================================ -- SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='rlz' AND TABLE_NAME LIKE 'rlz_%'; -- SELECT role_id, role_name FROM sys_role WHERE role_id >= 100; -- SELECT user_id, user_name, user_type FROM sys_user;