-- ============================================================
-- Task 5: 更新7个角色的权限分配
-- 删除旧权限，按Tab添加新权限
-- ============================================================

-- ============================================================
-- 预清理：删除所有旧 hidd:objhidd:* 分配（已替换为Tab级）
-- ============================================================
DELETE FROM sys_role_menu 
WHERE menu_id IN (2730,2731,2732,2733,2735,2736,2667,2668,2669)
  AND role_id IN (3,4,5,6,7,8);

-- ============================================================
-- 1. 已建工程管理单位 (role_id=3)
--    Tabs: selfEng + subEng
-- ============================================================
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 3, menu_id FROM sys_menu WHERE menu_id BETWEEN 2880 AND 2887;

-- ============================================================
-- 2. 中小型技术服务单位 (role_id=4)
--    Tabs: selfEng + subEng
-- ============================================================
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 4, menu_id FROM sys_menu WHERE menu_id BETWEEN 2880 AND 2887;

-- ============================================================
-- 3. 在建项目施工单位 (role_id=5)
--    Tab: bidEng
-- ============================================================
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 5, menu_id FROM sys_menu WHERE menu_id BETWEEN 2890 AND 2896;

-- ============================================================
-- 4. 在建项目监理单位 (role_id=6)
--    Tabs: bidEng + consEng
-- ============================================================
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 6, menu_id FROM sys_menu WHERE menu_id BETWEEN 2890 AND 2896;

INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 6, menu_id FROM sys_menu WHERE menu_id BETWEEN 2900 AND 2903;

-- ============================================================
-- 5. 在建项目法人单位 (role_id=7)
--    Tabs: bidEng + partEng
-- ============================================================
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 7, menu_id FROM sys_menu WHERE menu_id BETWEEN 2890 AND 2896;

INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 7, menu_id FROM sys_menu WHERE menu_id BETWEEN 2910 AND 2913;

-- ============================================================
-- 6. 水行政主管单位 (role_id=8)
--    Tab: subEng (只保留 subEng:export, 其他无需改)
-- ============================================================
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 8, 2887 WHERE NOT EXISTS (SELECT 1 FROM sys_role_menu WHERE role_id = 8 AND menu_id = 2887);

-- 水行政主管单位的隐患上报(2667)/退回(2668)/督办(2669) 保持不变
-- 它们直接挂在2000下，没有跨Tab问题

-- ============================================================
-- 7. 月报表权限拆分分配
--    hidd:month:supervise → hidd:month:agree, hidd:month:disagree
--    hidd:month:report → hidd:month:recall
-- ============================================================

-- 水行政主管(8) 和 水利部(9) 需要月报审批功能
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT r.role_id::bigint, m.menu_id
FROM (VALUES (8), (9)) AS r(role_id), sys_menu m
WHERE m.menu_id IN (2920, 2921, 2922)
  AND NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id);

-- ============================================================
-- 8. 事故月报权限拆分分配
--    acci:month:supervise → acci:month:approve, acci:month:unlock
--    acci:month:report → acci:month:revoke
-- ============================================================

-- 水行政主管(8) 和 水利部(9) 需要事故月报审批功能
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT r.role_id::bigint, m.menu_id
FROM (VALUES (8), (9)) AS r(role_id), sys_menu m
WHERE m.menu_id IN (2930, 2931)
  AND NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id);

-- ============================================================
-- 验证
-- ============================================================
SELECT rm.role_id, r.role_name, m.menu_id, m.menu_name, m.perms
FROM sys_role_menu rm
JOIN sys_menu m ON m.menu_id = rm.menu_id
LEFT JOIN sys_role r ON r.role_id::text = rm.role_id::text
WHERE m.menu_id >= 2880 OR m.perms IN ('hidd:selfEng:add','hidd:bidEng:add','hidd:consEng:add','hidd:partEng:add','hidd:month:agree','hidd:month:disagree','hidd:month:recall','acci:month:approve','acci:month:unlock')
ORDER BY rm.role_id, m.menu_id;
