docs(sql): add production pre-transit sample menu and grants.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-08-17 11:56:45 +08:00
1 parent 9a0f48fbfd
commit 781102f880
1 file changed
+162
@@ -0,0 +1,162 @@
-- 生产管理:预产及在途样本(独立页面 + 独立权限码)
-- 幂等:可重复执行
-- 授权:已有【生产管理】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('95200000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @menu_f = CONVERT('95200000000000000000000000000002' 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',
'pre-transit-sample',
'/production/pre-transit-sample/index',
'production:preTransitSample:list',
1, '1', '1', @tenant_no, 0,
'生产看板:在途样本与预产协议(协议单维度只读;与质检页代码独立)',
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 = 'pre-transit-sample',
component = '/production/pre-transit-sample/index',
perms = 'production:preTransitSample:list',
visible = '1',
status = '1',
order_num = 0,
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:preTransitSample: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:preTransitSample: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 下任一有效子菜单授权
-- 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
SET
rm.del_flag = 0,
rm.update_time = NOW(),
rm.remark = 'grant production pre-transit 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)
AND EXISTS (
SELECT 1
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.role_id COLLATE utf8mb4_unicode_ci = r.id COLLATE utf8mb4_unicode_ci
AND rm2.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND rm2.del_flag = 0
);
-- 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(r.id, '|', x.menu_id))),
r.id,
x.menu_id,
@tenant_no,
0,
'grant production pre-transit to PRM roles',
'admin',
'',
NOW(),
NULL,
NOW(),
0
FROM sys_role r
INNER JOIN (
SELECT @prm_id AS menu_id
UNION ALL SELECT @menu_c
UNION ALL SELECT @menu_f
) x
WHERE r.del_flag = 0
AND r.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND EXISTS (
SELECT 1
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.role_id COLLATE utf8mb4_unicode_ci = r.id COLLATE utf8mb4_unicode_ci
AND rm2.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND rm2.del_flag = 0
)
AND EXISTS (
SELECT 1 FROM sys_menu m
WHERE m.id COLLATE utf8mb4_unicode_ci = x.menu_id
AND m.del_flag = 0
)
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu rm
WHERE rm.role_id COLLATE utf8mb4_unicode_ci = r.id COLLATE utf8mb4_unicode_ci
AND rm.menu_id COLLATE utf8mb4_unicode_ci = x.menu_id
AND rm.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND rm.del_flag = 0
);