feat: 新增多角色系统(派单/分润/推广/区域)
- 后端:RlzDispatch/Profit/Promotion/Region 控制器、服务、Mapper、领域模型 - 权限:MethodSecurityConfig + PermissionInterceptor - 管理后台:派单/分润/推广/区域 页面与 API - Android 陪护端:派单/运营/退款 Fragment 及布局 - 小程序:推广员子包、派单/运营/退款/检索子包、自定义 tabBar - 文档:多角色系统方案、角色权限矩阵、用户操作手册等 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
166
docs/DDL迁移脚本.sql
Normal file
166
docs/DDL迁移脚本.sql
Normal file
@@ -0,0 +1,166 @@
|
||||
-- ============================================
|
||||
-- 瑞来健康 多角色系统 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;
|
||||
Reference in New Issue
Block a user