Files
zkxw/docs/sql/alter_biz_qc_inspection_item_template.sql
T

323 lines
10 KiB
SQL
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.
-- 质检:检测项目模版(建表 + 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;