/*
 审批流程权限增量更新SQL（基于现有sys_role_menu表）
 
 Date: 2025-09-06
 Author: simon lin
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- 1. 首先添加审批流程相关菜单（如果不存在）
INSERT IGNORE INTO `sys_menu` VALUES (2120, '审批流程', 0, 4, 'approval', NULL, NULL, '', 1, 0, 'M', '0', '0', NULL, 'validCode', 'admin', NOW(), '', NULL, '审批流程管理目录');

-- 添加二级菜单
INSERT IGNORE INTO `sys_menu` VALUES (2121, '我的待办', 2120, 1, 'pending', 'system/approval/pending/index', NULL, '', 1, 0, 'C', '0', '0', 'system:approval:pending:list', 'time-range', 'admin', NOW(), '', NULL, '我的待办任务菜单');
INSERT IGNORE INTO `sys_menu` VALUES (2122, '我的已办', 2120, 2, 'completed', 'system/approval/completed/index', NULL, '', 1, 0, 'C', '0', '0', 'system:approval:completed:list', 'checkbox', 'admin', NOW(), '', NULL, '我的已办任务菜单');
INSERT IGNORE INTO `sys_menu` VALUES (2123, '我的申请', 2120, 3, 'submitted', 'system/approval/submitted/index', NULL, '', 1, 0, 'C', '0', '0', 'system:approval:submitted:list', 'documentation', 'admin', NOW(), '', NULL, '我的申请列表菜单');
INSERT IGNORE INTO `sys_menu` VALUES (2124, '发起申请', 2120, 4, 'submit', 'system/approval/submit/index', NULL, '', 1, 0, 'C', '0', '0', 'system:approval:submit', 'edit', 'admin', NOW(), '', NULL, '发起申请菜单');
INSERT IGNORE INTO `sys_menu` VALUES (2125, '流程管理', 2120, 5, 'workflow', 'system/approval/workflow/index', NULL, '', 1, 0, 'C', '0', '0', 'system:approval:workflow:list', 'tree-table', 'admin', NOW(), '', NULL, '流程管理菜单');

-- 添加审批功能权限按钮
INSERT IGNORE INTO `sys_menu` VALUES (2130, '查看待办任务', 2121, 1, '#', '', NULL, '', 1, 0, 'F', '0', '0', 'system:approval:query', '#', 'admin', NOW(), '', NULL, '');
INSERT IGNORE INTO `sys_menu` VALUES (2131, '审批任务', 2121, 2, '#', '', NULL, '', 1, 0, 'F', '0', '0', 'system:approval:approve', '#', 'admin', NOW(), '', NULL, '');
INSERT IGNORE INTO `sys_menu` VALUES (2132, '驳回任务', 2121, 3, '#', '', NULL, '', 1, 0, 'F', '0', '0', 'system:approval:reject', '#', 'admin', NOW(), '', NULL, '');
INSERT IGNORE INTO `sys_menu` VALUES (2133, '启动流程', 2124, 1, '#', '', NULL, '', 1, 0, 'F', '0', '0', 'system:approval:start', '#', 'admin', NOW(), '', NULL, '');
INSERT IGNORE INTO `sys_menu` VALUES (2134, '取消流程', 2123, 1, '#', '', NULL, '', 1, 0, 'F', '0', '0', 'system:approval:cancel', '#', 'admin', NOW(), '', NULL, '');

-- 添加流程管理功能权限按钮（管理员专用）
INSERT IGNORE INTO `sys_menu` VALUES (2135, '流程定义查询', 2125, 1, '#', '', NULL, '', 1, 0, 'F', '0', '0', 'system:approval:workflow:query', '#', 'admin', NOW(), '', NULL, '');
INSERT IGNORE INTO `sys_menu` VALUES (2136, '流程定义新增', 2125, 2, '#', '', NULL, '', 1, 0, 'F', '0', '0', 'system:approval:workflow:add', '#', 'admin', NOW(), '', NULL, '');
INSERT IGNORE INTO `sys_menu` VALUES (2137, '流程定义修改', 2125, 3, '#', '', NULL, '', 1, 0, 'F', '0', '0', 'system:approval:workflow:edit', '#', 'admin', NOW(), '', NULL, '');
INSERT IGNORE INTO `sys_menu` VALUES (2138, '流程定义删除', 2125, 4, '#', '', NULL, '', 1, 0, 'F', '0', '0', 'system:approval:workflow:remove', '#', 'admin', NOW(), '', NULL, '');

-- 2. 删除可能存在的审批流程相关权限（防止重复）
DELETE FROM `sys_role_menu` WHERE menu_id BETWEEN 2120 AND 2138;

-- 3. 为各角色分配审批流程权限

-- 超级管理员(role_id=1)：拥有所有权限
INSERT INTO `sys_role_menu` (role_id, menu_id) VALUES 
(1, 2120), (1, 2121), (1, 2122), (1, 2123), (1, 2124), (1, 2125),
(1, 2130), (1, 2131), (1, 2132), (1, 2133), (1, 2134), 
(1, 2135), (1, 2136), (1, 2137), (1, 2138);

-- 普通角色(role_id=2)：基本查看和申请权限
INSERT INTO `sys_role_menu` (role_id, menu_id) VALUES 
(2, 2120), -- 审批流程目录
(2, 2121), -- 我的待办
(2, 2122), -- 我的已办
(2, 2123), -- 我的申请
(2, 2124), -- 发起申请
(2, 2130), -- 查看待办任务
(2, 2133), -- 启动流程
(2, 2134); -- 取消流程

-- 站长(role_id=100)：拥有业务功能权限，不能管理流程定义
INSERT INTO `sys_role_menu` (role_id, menu_id) VALUES 
(100, 2120), -- 审批流程目录
(100, 2121), -- 我的待办
(100, 2122), -- 我的已办
(100, 2123), -- 我的申请
(100, 2124), -- 发起申请
(100, 2130), -- 查看待办任务
(100, 2131), -- 审批任务
(100, 2132), -- 驳回任务
(100, 2133), -- 启动流程
(100, 2134); -- 取消流程

-- 安检员(role_id=101)：基本业务权限，重点是发起申请
INSERT INTO `sys_role_menu` (role_id, menu_id) VALUES 
(101, 2120), -- 审批流程目录
(101, 2121), -- 我的待办
(101, 2122), -- 我的已办
(101, 2123), -- 我的申请
(101, 2124), -- 发起申请
(101, 2130), -- 查看待办任务
(101, 2131), -- 审批任务（个人级别确认）
(101, 2133), -- 启动流程
(101, 2134); -- 取消流程

-- 班组长(role_id=102)：拥有完整业务审批权限
INSERT INTO `sys_role_menu` (role_id, menu_id) VALUES 
(102, 2120), -- 审批流程目录
(102, 2121), -- 我的待办
(102, 2122), -- 我的已办
(102, 2123), -- 我的申请
(102, 2124), -- 发起申请
(102, 2130), -- 查看待办任务
(102, 2131), -- 审批任务
(102, 2132), -- 驳回任务
(102, 2133), -- 启动流程
(102, 2134); -- 取消流程

-- 科长(role_id=103)：拥有完整业务审批权限
INSERT INTO `sys_role_menu` (role_id, menu_id) VALUES 
(103, 2120), -- 审批流程目录
(103, 2121), -- 我的待办
(103, 2122), -- 我的已办
(103, 2123), -- 我的申请
(103, 2124), -- 发起申请
(103, 2130), -- 查看待办任务
(103, 2131), -- 审批任务
(103, 2132), -- 驳回任务
(103, 2133), -- 启动流程
(103, 2134); -- 取消流程

SET FOREIGN_KEY_CHECKS = 1;

-- 验证权限分配结果
SELECT 
    '权限分配完成，以下是各角色的审批流程权限分配情况：' as info;

SELECT 
    r.role_name AS '角色名称',
    r.role_key AS '角色标识',
    COUNT(rm.menu_id) AS '审批权限数量'
FROM sys_role r
LEFT JOIN sys_role_menu rm ON r.role_id = rm.role_id AND rm.menu_id BETWEEN 2120 AND 2138
WHERE r.role_id IN (1, 2, 100, 101, 102, 103)
GROUP BY r.role_id, r.role_name, r.role_key
ORDER BY r.role_id;




  -- 添加批量更新抄送已读状态权限
    INSERT IGNORE INTO `sys_menu` VALUES (2156, '批量更新抄送状态', 2121, 4, '#', '', NULL, '', 1, 0, 'F', '0', '0', 'system:approval:update', '#', 'admin', NOW(), '', NULL, '批量更新抄送已读状态权限');

    -- 为各角色分配这个权限
    -- 超级管理员
    INSERT IGNORE INTO `sys_role_menu` (role_id, menu_id) VALUES (1, 2156);

    -- 普通角色
    INSERT IGNORE INTO `sys_role_menu` (role_id, menu_id) VALUES (2, 2156);

    -- 站长
    INSERT IGNORE INTO `sys_role_menu` (role_id, menu_id) VALUES (100, 2156);

    -- 安检员
    INSERT IGNORE INTO `sys_role_menu` (role_id, menu_id) VALUES (101, 2156);

    -- 班组长
    INSERT IGNORE INTO `sys_role_menu` (role_id, menu_id) VALUES (102, 2156);

    -- 科长
    INSERT IGNORE INTO `sys_role_menu` (role_id, menu_id) VALUES (103, 2156);