-- ============================================================
-- 盘古用户平台 - 角色与权限初始化脚本
-- 根据需求规格说明书 3.2 角色权限矩阵配置
-- 作者：pangu
-- 创建时间：2026-02-01
-- ============================================================

-- 1. 创建角色
-- -----------------------------------------------------------
-- 删除旧的非必要角色（保留超级管理员）
DELETE FROM sys_role WHERE role_id > 1;

-- 插入三个角色
INSERT INTO sys_role (role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_by, create_time, remark) VALUES
(1, '超级管理员', 'admin', 1, '1', 1, 1, '0', '0', 'admin', NOW(), '系统最高权限，管理全部数据'),
(2, '分公司用户', 'branch', 2, '4', 1, 1, '0', '0', 'admin', NOW(), '管理所属区域数据（本部门及以下）'),
(3, '学校用户', 'school', 3, '5', 1, 1, '0', '0', 'admin', NOW(), '管理本校数据（仅本人数据权限）')
ON DUPLICATE KEY UPDATE 
    role_name = VALUES(role_name),
    role_key = VALUES(role_key),
    data_scope = VALUES(data_scope),
    remark = VALUES(remark);

-- 2. 配置部门结构（按需求调整为分公司-学校结构）
-- -----------------------------------------------------------
-- 清空旧部门数据
DELETE FROM sys_dept WHERE dept_id > 100;

-- 重新配置部门结构
UPDATE sys_dept SET dept_name = '湖北新华书店', ancestors = '0', order_num = 0 WHERE dept_id = 100;

-- 插入分公司和学校
INSERT INTO sys_dept (dept_id, parent_id, ancestors, dept_name, order_num, leader, phone, email, status, del_flag, create_by, create_time) VALUES
-- 武汉分公司
(101, 100, '0,100', '武汉分公司', 1, '', '', '', '0', '0', 'admin', NOW()),
  -- 武汉分公司下的学校
  (1011, 101, '0,100,101', '武昌实验小学', 1, '', '', '', '0', '0', 'admin', NOW()),
  (1012, 101, '0,100,101', '武汉市第一中学', 2, '', '', '', '0', '0', 'admin', NOW()),
  (1013, 101, '0,100,101', '水果湖小学', 3, '', '', '', '0', '0', 'admin', NOW()),
-- 黄冈分公司
(102, 100, '0,100', '黄冈分公司', 2, '', '', '', '0', '0', 'admin', NOW()),
  -- 黄冈分公司下的学校
  (1021, 102, '0,100,102', '黄冈中学', 1, '', '', '', '0', '0', 'admin', NOW()),
  (1022, 102, '0,100,102', '红安一中', 2, '', '', '', '0', '0', 'admin', NOW())
ON DUPLICATE KEY UPDATE dept_name = VALUES(dept_name), ancestors = VALUES(ancestors);

-- 3. 配置角色菜单权限
-- -----------------------------------------------------------
-- 先清空角色菜单关联
DELETE FROM sys_role_menu WHERE role_id IN (2, 3);

-- 超级管理员拥有所有权限（已在之前配置）

-- 分公司用户权限（根据需求3.2权限矩阵）
-- 可访问：学校管理、会员管理、学生管理、基础数据（年级/班级/学科）
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 2, menu_id FROM sys_menu WHERE 
    menu_name IN ('学校管理', '会员管理', '学生管理', '基础数据', '年级管理', '班级管理', '学科管理')
    OR path IN ('/school', '/member', '/student', '/base', '/base/grade', '/base/class', '/base/subject')
    OR parent_id IN (
        SELECT menu_id FROM sys_menu WHERE menu_name IN ('学校管理', '会员管理', '学生管理', '基础数据')
    );

-- 学校用户权限（根据需求3.2权限矩阵）
-- 可访问：学生管理（本校）、教师管理（本校）
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 3, menu_id FROM sys_menu WHERE 
    menu_name IN ('学生管理')
    OR path IN ('/student')
    OR parent_id IN (
        SELECT menu_id FROM sys_menu WHERE menu_name = '学生管理'
    );

-- 4. 创建示例用户
-- -----------------------------------------------------------
-- 确保admin用户存在并关联超级管理员角色
UPDATE sys_user SET dept_id = 100 WHERE user_id = 1;

-- 创建分公司用户示例
INSERT INTO sys_user (user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, remark) VALUES
(3, 101, 'wuhan_admin', '武汉分公司管理员', '00', 'wuhan@xinhua.com', '13800000001', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '', NULL, 'admin', NOW(), '武汉分公司管理员账号'),
(4, 102, 'huanggang_admin', '黄冈分公司管理员', '00', 'huanggang@xinhua.com', '13800000002', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '', NULL, 'admin', NOW(), '黄冈分公司管理员账号'),
(5, 1011, 'school_wuchang', '武昌实验小学管理员', '00', 'wuchang@school.com', '13800000003', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '', NULL, 'admin', NOW(), '学校用户账号')
ON DUPLICATE KEY UPDATE nick_name = VALUES(nick_name), dept_id = VALUES(dept_id);

-- 5. 配置用户角色关联
-- -----------------------------------------------------------
DELETE FROM sys_user_role WHERE user_id IN (3, 4, 5);

INSERT INTO sys_user_role (user_id, role_id) VALUES
(1, 1),  -- admin -> 超级管理员
(3, 2),  -- wuhan_admin -> 分公司用户
(4, 2),  -- huanggang_admin -> 分公司用户
(5, 3)   -- school_wuchang -> 学校用户
ON DUPLICATE KEY UPDATE role_id = VALUES(role_id);

-- 6. 验证配置
-- -----------------------------------------------------------
SELECT '=== 角色配置 ===' AS info;
SELECT role_id, role_name, role_key, data_scope, remark FROM sys_role ORDER BY role_id;

SELECT '=== 部门结构 ===' AS info;
SELECT dept_id, parent_id, dept_name, 
    CASE 
        WHEN parent_id = 0 THEN '总部'
        WHEN parent_id = 100 THEN '分公司'
        ELSE '学校'
    END as dept_type
FROM sys_dept WHERE del_flag = '0' ORDER BY parent_id, order_num;

SELECT '=== 用户角色 ===' AS info;
SELECT u.user_name, u.nick_name, d.dept_name, r.role_name
FROM sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
LEFT JOIN sys_user_role ur ON u.user_id = ur.user_id
LEFT JOIN sys_role r ON ur.role_id = r.role_id
WHERE u.del_flag = '0'
ORDER BY u.user_id;

SELECT '=== 角色权限数量 ===' AS info;
SELECT r.role_name, COUNT(rm.menu_id) as menu_count 
FROM sys_role r 
LEFT JOIN sys_role_menu rm ON r.role_id = rm.role_id 
GROUP BY r.role_id, r.role_name;
