Files
zkxw/待同步到生产的sql脚本
T
2026-08-18 11:28:59 +08:00

168 lines
5.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ===== 废弃物管理菜单 =====
-- 生产管理:废弃物管理(独立页面 + 独立权限码)
-- 幂等:可重复执行
-- 授权:已有【生产管理】PRM 下任一有效子菜单的角色 → 授予本 C/F,并补授 PRM 祖先
SET @tenant_no = CONVERT('zkxw' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @prm_id = CONVERT('PRM00000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @menu_c = CONVERT('95300000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @menu_f = CONVERT('95300000000000000000000000000002' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
-- 1) C 菜单
INSERT INTO sys_menu (
id, menu_name, parent_id, menu_type, path, component, perms,
is_frame, visible, status, tenant_no, order_num, remark,
create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
@menu_c,
'废弃物管理',
@prm_id,
'C',
'waste-output',
'/production/waste-output/index',
'production:waste-output:list',
1, '1', '1', @tenant_no, 8,
'生产看板:任务步骤废弃物产出只读汇总',
NULL, '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu m
WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_c
);
UPDATE sys_menu
SET
menu_name = '废弃物管理',
parent_id = @prm_id,
menu_type = 'C',
path = 'waste-output',
component = '/production/waste-output/index',
perms = 'production:waste-output:list',
visible = '1',
status = '1',
order_num = 8,
remark = '生产看板:任务步骤废弃物产出只读汇总',
del_flag = 0,
update_time = NOW()
WHERE id COLLATE utf8mb4_unicode_ci = @menu_c;
-- 2) F 按钮
INSERT INTO sys_menu (
id, menu_name, parent_id, menu_type, path, component, perms,
is_frame, visible, status, tenant_no, order_num, remark,
create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
@menu_f,
'废弃物查询',
@menu_c,
'F',
'',
'',
'production:waste-output:list',
1, '0', '1', @tenant_no, 1,
'生产侧废弃物列表查询',
NULL, '', NOW(), NULL, NOW(), 0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu m
WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_f
);
UPDATE sys_menu
SET
menu_name = '废弃物查询',
parent_id = @menu_c,
menu_type = 'F',
path = '',
component = '',
perms = 'production:waste-output:list',
visible = '0',
status = '1',
order_num = 1,
remark = '生产侧废弃物列表查询',
del_flag = 0,
update_time = NOW()
WHERE id COLLATE utf8mb4_unicode_ci = @menu_f;
-- 3) 目标角色:已有 PRM 下任一有效子菜单授权
-- MySQL 5.7:UPDATE 目标表不可在同句 FROM/EXISTS 中直接引用自身,须用派生表
-- 3a) 恢复软删的 PRM / C / F 授权
UPDATE sys_role_menu rm
INNER JOIN sys_role r
ON r.id COLLATE utf8mb4_unicode_ci = rm.role_id COLLATE utf8mb4_unicode_ci
AND r.del_flag = 0
AND r.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
INNER JOIN (
SELECT DISTINCT rm2.role_id AS role_id
FROM sys_role_menu rm2
INNER JOIN sys_menu m2
ON m2.id COLLATE utf8mb4_unicode_ci = rm2.menu_id COLLATE utf8mb4_unicode_ci
AND m2.del_flag = 0
AND m2.parent_id COLLATE utf8mb4_unicode_ci = @prm_id
WHERE rm2.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND rm2.del_flag = 0
) eligible
ON eligible.role_id COLLATE utf8mb4_unicode_ci = r.id COLLATE utf8mb4_unicode_ci
SET
rm.del_flag = 0,
rm.update_time = NOW(),
rm.remark = 'grant production waste-output to PRM roles'
WHERE rm.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND rm.del_flag = 1
AND rm.menu_id COLLATE utf8mb4_unicode_ci IN (@prm_id, @menu_c, @menu_f);
-- 3b) 插入缺失授权(PRM + C + F)
INSERT INTO sys_role_menu (
id, role_id, menu_id, tenant_no, order_num, remark,
create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
UPPER(MD5(CONCAT(src.role_id, '|', src.menu_id))),
src.role_id,
src.menu_id,
@tenant_no,
0,
'grant production waste-output to PRM roles',
'admin',
'',
NOW(),
NULL,
NOW(),
0
FROM (
SELECT
r.id AS role_id,
x.menu_id AS menu_id
FROM sys_role r
INNER JOIN (
SELECT @prm_id AS menu_id
UNION ALL SELECT @menu_c
UNION ALL SELECT @menu_f
) x
INNER JOIN (
SELECT DISTINCT rm2.role_id AS role_id
FROM sys_role_menu rm2
INNER JOIN sys_menu m2
ON m2.id COLLATE utf8mb4_unicode_ci = rm2.menu_id COLLATE utf8mb4_unicode_ci
AND m2.del_flag = 0
AND m2.parent_id COLLATE utf8mb4_unicode_ci = @prm_id
WHERE rm2.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND rm2.del_flag = 0
) eligible
ON eligible.role_id COLLATE utf8mb4_unicode_ci = r.id COLLATE utf8mb4_unicode_ci
INNER JOIN sys_menu m
ON m.id COLLATE utf8mb4_unicode_ci = x.menu_id
AND m.del_flag = 0
WHERE r.del_flag = 0
AND r.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
) src
LEFT JOIN sys_role_menu existing
ON existing.role_id COLLATE utf8mb4_unicode_ci = src.role_id COLLATE utf8mb4_unicode_ci
AND existing.menu_id COLLATE utf8mb4_unicode_ci = src.menu_id COLLATE utf8mb4_unicode_ci
AND existing.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND existing.del_flag = 0
WHERE existing.id IS NULL;