323 lines
10 KiB
SQL
323 lines
10 KiB
SQL
-- 质检:检测项目模版(建表 + C 菜单 + 4 F 按钮 + 角色授权)
|
||
-- 幂等:可重复执行
|
||
-- 授权:已有【质检基础信息】QCB 下任一有效子菜单,或已有质检工单菜单的角色
|
||
-- → 授予 TOP + QCB + 本 C/F
|
||
|
||
SET @tenant_no = CONVERT('zkxw' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
|
||
SET @top_id = CONVERT('TOP00000000000000000000000000003' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
|
||
SET @qcb_id = CONVERT('QCB00000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
|
||
SET @wo_menu = CONVERT('70000000000000000000000000000007' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
|
||
SET @menu_c = CONVERT('95300000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
|
||
SET @menu_f_list = CONVERT('95300000000000000000000000000002' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
|
||
SET @menu_f_add = CONVERT('95300000000000000000000000000003' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
|
||
SET @menu_f_edit = CONVERT('95300000000000000000000000000004' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
|
||
SET @menu_f_remove = CONVERT('95300000000000000000000000000005' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
|
||
|
||
-- 0) 建表
|
||
CREATE TABLE IF NOT EXISTS `biz_qc_inspection_item_template` (
|
||
`id` varchar(64) NOT NULL COMMENT '主键ID',
|
||
`template_name` varchar(200) NOT NULL COMMENT '模版名称',
|
||
`lab_item_ids` varchar(2000) NOT NULL DEFAULT '' COMMENT '实验室项目ID逗号分隔',
|
||
`third_party_item_ids` varchar(2000) NOT NULL DEFAULT '' COMMENT '第三方项目ID逗号分隔',
|
||
`status` char(1) NOT NULL DEFAULT '1' COMMENT '1启用 0停用',
|
||
`tenant_no` varchar(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
|
||
`order_num` int(11) DEFAULT NULL COMMENT '排序号',
|
||
`remark` varchar(512) DEFAULT NULL COMMENT '备注',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
|
||
`create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
|
||
`create_time` datetime NOT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
|
||
`update_time` datetime NOT NULL COMMENT '更新时间',
|
||
`del_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记',
|
||
PRIMARY KEY (`id`) USING BTREE,
|
||
KEY `idx_qc_iit_tenant_status` (`tenant_no`,`del_flag`,`status`) USING BTREE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='质检检测项目模版';
|
||
|
||
-- 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,
|
||
'检测项目模版',
|
||
@qcb_id,
|
||
'C',
|
||
'inspection-item-template',
|
||
'/quality-inspection/inspection-item-template/index',
|
||
'biz:qcInspectionItemTemplate:list',
|
||
1, '1', '1', @tenant_no, 5,
|
||
'质检基础信息:检测项目模版主数据',
|
||
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 = @qcb_id,
|
||
menu_type = 'C',
|
||
path = 'inspection-item-template',
|
||
component = '/quality-inspection/inspection-item-template/index',
|
||
perms = 'biz:qcInspectionItemTemplate:list',
|
||
visible = '1',
|
||
status = '1',
|
||
order_num = 5,
|
||
remark = '质检基础信息:检测项目模版主数据',
|
||
del_flag = 0,
|
||
update_time = NOW()
|
||
WHERE id COLLATE utf8mb4_unicode_ci = @menu_c;
|
||
|
||
-- 2) F 按钮:list
|
||
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_list,
|
||
'检测项目模版查询',
|
||
@menu_c,
|
||
'F',
|
||
'',
|
||
'',
|
||
'biz:qcInspectionItemTemplate: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_list
|
||
);
|
||
|
||
UPDATE sys_menu
|
||
SET
|
||
menu_name = '检测项目模版查询',
|
||
parent_id = @menu_c,
|
||
menu_type = 'F',
|
||
path = '',
|
||
component = '',
|
||
perms = 'biz:qcInspectionItemTemplate:list',
|
||
visible = '0',
|
||
status = '1',
|
||
order_num = 1,
|
||
remark = '检测项目模版列表查询',
|
||
del_flag = 0,
|
||
update_time = NOW()
|
||
WHERE id COLLATE utf8mb4_unicode_ci = @menu_f_list;
|
||
|
||
-- 2b) F 按钮:add
|
||
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_add,
|
||
'检测项目模版新增',
|
||
@menu_c,
|
||
'F',
|
||
'',
|
||
'',
|
||
'biz:qcInspectionItemTemplate:add',
|
||
1, '0', '1', @tenant_no, 2,
|
||
'检测项目模版新增',
|
||
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_add
|
||
);
|
||
|
||
UPDATE sys_menu
|
||
SET
|
||
menu_name = '检测项目模版新增',
|
||
parent_id = @menu_c,
|
||
menu_type = 'F',
|
||
path = '',
|
||
component = '',
|
||
perms = 'biz:qcInspectionItemTemplate:add',
|
||
visible = '0',
|
||
status = '1',
|
||
order_num = 2,
|
||
remark = '检测项目模版新增',
|
||
del_flag = 0,
|
||
update_time = NOW()
|
||
WHERE id COLLATE utf8mb4_unicode_ci = @menu_f_add;
|
||
|
||
-- 2c) F 按钮:edit
|
||
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_edit,
|
||
'检测项目模版修改',
|
||
@menu_c,
|
||
'F',
|
||
'',
|
||
'',
|
||
'biz:qcInspectionItemTemplate:edit',
|
||
1, '0', '1', @tenant_no, 3,
|
||
'检测项目模版修改(含启停)',
|
||
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_edit
|
||
);
|
||
|
||
UPDATE sys_menu
|
||
SET
|
||
menu_name = '检测项目模版修改',
|
||
parent_id = @menu_c,
|
||
menu_type = 'F',
|
||
path = '',
|
||
component = '',
|
||
perms = 'biz:qcInspectionItemTemplate:edit',
|
||
visible = '0',
|
||
status = '1',
|
||
order_num = 3,
|
||
remark = '检测项目模版修改(含启停)',
|
||
del_flag = 0,
|
||
update_time = NOW()
|
||
WHERE id COLLATE utf8mb4_unicode_ci = @menu_f_edit;
|
||
|
||
-- 2d) F 按钮:remove
|
||
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_remove,
|
||
'检测项目模版删除',
|
||
@menu_c,
|
||
'F',
|
||
'',
|
||
'',
|
||
'biz:qcInspectionItemTemplate:remove',
|
||
1, '0', '1', @tenant_no, 4,
|
||
'检测项目模版删除',
|
||
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_remove
|
||
);
|
||
|
||
UPDATE sys_menu
|
||
SET
|
||
menu_name = '检测项目模版删除',
|
||
parent_id = @menu_c,
|
||
menu_type = 'F',
|
||
path = '',
|
||
component = '',
|
||
perms = 'biz:qcInspectionItemTemplate:remove',
|
||
visible = '0',
|
||
status = '1',
|
||
order_num = 4,
|
||
remark = '检测项目模版删除',
|
||
del_flag = 0,
|
||
update_time = NOW()
|
||
WHERE id COLLATE utf8mb4_unicode_ci = @menu_f_remove;
|
||
|
||
-- 3) 目标角色:已有 QCB 下任一有效子菜单,或已有质检工单菜单
|
||
-- MySQL 5.7:UPDATE 目标表不可在同句 FROM/EXISTS 中直接引用自身,须用派生表
|
||
|
||
-- 3a) 恢复软删的 TOP / QCB / 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 = @qcb_id
|
||
OR m2.id COLLATE utf8mb4_unicode_ci = @wo_menu
|
||
)
|
||
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 qc inspection item template to QCB/WO 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 (
|
||
@top_id, @qcb_id, @menu_c,
|
||
@menu_f_list, @menu_f_add, @menu_f_edit, @menu_f_remove
|
||
);
|
||
|
||
-- 3b) 插入缺失授权(TOP + QCB + C + 4 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 qc inspection item template to QCB/WO 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 @top_id AS menu_id
|
||
UNION ALL SELECT @qcb_id
|
||
UNION ALL SELECT @menu_c
|
||
UNION ALL SELECT @menu_f_list
|
||
UNION ALL SELECT @menu_f_add
|
||
UNION ALL SELECT @menu_f_edit
|
||
UNION ALL SELECT @menu_f_remove
|
||
) 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 = @qcb_id
|
||
OR m2.id COLLATE utf8mb4_unicode_ci = @wo_menu
|
||
)
|
||
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;
|