This commit is contained in:
zlwu committed 2026-08-19 10:45:07 +08:00
1 parent 1618035e4b
commit cd8ab170ba
30 files changed
+13705 -11072

No files matched your search

-350
View File
@@ -1,350 +0,0 @@
-- 生产任务集合:头表 + 条目 + 菜单授权(幂等)
-- 授权:已有【生产基础信息】PRB 下任一有效子菜单 或 已有生产工单菜单 的角色 → 授予 PRB + C + 四个 F
SET @tenant_no = CONVERT('zkxw' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @prb_id = CONVERT('PRB00000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @wo_menu_id = CONVERT('90000000000000000000000000000011' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @menu_c = CONVERT('95400000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @menu_list = CONVERT('95400000000000000000000000000002' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @menu_add = CONVERT('95400000000000000000000000000003' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @menu_edit = CONVERT('95400000000000000000000000000004' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
SET @menu_remove = CONVERT('95400000000000000000000000000005' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `biz_production_task_set` (
`id` varchar(64) NOT NULL COMMENT '主键ID',
`set_name` varchar(200) NOT NULL COMMENT '集合名称',
`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_pts_tenant_status` (`tenant_no`,`del_flag`,`status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产任务集合';
CREATE TABLE IF NOT EXISTS `biz_production_task_set_item` (
`id` varchar(64) NOT NULL COMMENT '主键ID',
`set_id` varchar(64) NOT NULL COMMENT '集合ID',
`task_name` varchar(200) NOT NULL COMMENT '任务名称',
`route_id` varchar(64) DEFAULT NULL COMMENT '工艺路线ID',
`route_name` varchar(100) DEFAULT NULL COMMENT '路线名称快照',
`description` varchar(500) DEFAULT NULL COMMENT '描述',
`remark` varchar(512) DEFAULT NULL COMMENT '备注',
`tenant_no` varchar(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
`order_num` int(11) 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_ptsi_set` (`set_id`,`del_flag`,`order_num`) 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,
'生产任务组合模版',
@prb_id,
'C',
'production-task-set',
'/production/production-task-set/index',
'production:task-set:list',
1, '1', '1', @tenant_no, 12,
'生产基础信息:生产任务组合模版主数据',
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 = @prb_id,
menu_type = 'C',
path = 'production-task-set',
component = '/production/production-task-set/index',
perms = 'production:task-set:list',
visible = '1',
status = '1',
order_num = 12,
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_list,
'查询',
@menu_c,
'F',
'',
'',
'production:task-set: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_list
);
UPDATE sys_menu
SET
menu_name = '查询',
parent_id = @menu_c,
menu_type = 'F',
path = '',
component = '',
perms = 'production:task-set:list',
visible = '0',
status = '1',
order_num = 1,
remark = '生产任务集合列表查询',
del_flag = 0,
update_time = NOW()
WHERE id COLLATE utf8mb4_unicode_ci = @menu_list;
-- 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_add,
'新增',
@menu_c,
'F',
'',
'',
'production:task-set: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_add
);
UPDATE sys_menu
SET
menu_name = '新增',
parent_id = @menu_c,
menu_type = 'F',
path = '',
component = '',
perms = 'production:task-set:add',
visible = '0',
status = '1',
order_num = 2,
remark = '生产任务集合新增',
del_flag = 0,
update_time = NOW()
WHERE id COLLATE utf8mb4_unicode_ci = @menu_add;
-- 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_edit,
'编辑',
@menu_c,
'F',
'',
'',
'production:task-set: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_edit
);
UPDATE sys_menu
SET
menu_name = '编辑',
parent_id = @menu_c,
menu_type = 'F',
path = '',
component = '',
perms = 'production:task-set:edit',
visible = '0',
status = '1',
order_num = 3,
remark = '生产任务集合编辑',
del_flag = 0,
update_time = NOW()
WHERE id COLLATE utf8mb4_unicode_ci = @menu_edit;
-- 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_remove,
'删除',
@menu_c,
'F',
'',
'',
'production:task-set: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_remove
);
UPDATE sys_menu
SET
menu_name = '删除',
parent_id = @menu_c,
menu_type = 'F',
path = '',
component = '',
perms = 'production:task-set:remove',
visible = '0',
status = '1',
order_num = 4,
remark = '生产任务集合删除',
del_flag = 0,
update_time = NOW()
WHERE id COLLATE utf8mb4_unicode_ci = @menu_remove;
-- 3) 目标角色:PRB 下任一有效子菜单 或 已有生产工单菜单
-- MySQL 5.7:UPDATE 目标表不可在同句 FROM/EXISTS 中直接引用自身,须用派生表
-- 3a) 恢复软删的 PRB / 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 role_id FROM (
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 = @prb_id
WHERE rm2.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND rm2.del_flag = 0
UNION
SELECT DISTINCT rm3.role_id AS role_id
FROM sys_role_menu rm3
INNER JOIN sys_menu m3
ON m3.id COLLATE utf8mb4_unicode_ci = rm3.menu_id COLLATE utf8mb4_unicode_ci
AND m3.del_flag = 0
WHERE rm3.menu_id COLLATE utf8mb4_unicode_ci = @wo_menu_id
AND rm3.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND rm3.del_flag = 0
) eligible_roles
) 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 task-set to PRB/work-order 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 (
@prb_id, @menu_c, @menu_list, @menu_add, @menu_edit, @menu_remove
);
-- 3b) 插入缺失授权(PRB + 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 task-set to PRB/work-order 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 @prb_id AS menu_id
UNION ALL SELECT @menu_c
UNION ALL SELECT @menu_list
UNION ALL SELECT @menu_add
UNION ALL SELECT @menu_edit
UNION ALL SELECT @menu_remove
) x
INNER JOIN (
SELECT DISTINCT role_id FROM (
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 = @prb_id
WHERE rm2.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND rm2.del_flag = 0
UNION
SELECT DISTINCT rm3.role_id AS role_id
FROM sys_role_menu rm3
INNER JOIN sys_menu m3
ON m3.id COLLATE utf8mb4_unicode_ci = rm3.menu_id COLLATE utf8mb4_unicode_ci
AND m3.del_flag = 0
WHERE rm3.menu_id COLLATE utf8mb4_unicode_ci = @wo_menu_id
AND rm3.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
AND rm3.del_flag = 0
) eligible_roles
) 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;
@@ -1,322 +0,0 @@
-- 质检:检测项目模版(建表 + 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;
@@ -1,166 +0,0 @@
-- 生产管理:预产及在途样本(独立页面 + 独立权限码)
-- 幂等:可重复执行
-- 授权:已有【生产管理】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 下任一有效子菜单授权
-- 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 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);
-- 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 pre-transit 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;
@@ -1,166 +0,0 @@
-- 生产管理:废弃物管理(独立页面 + 独立权限码)
-- 幂等:可重复执行
-- 授权:已有【生产管理】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;
@@ -1,10 +0,0 @@
-- 侧栏菜单:生产任务集合 → 生产任务组合模版(幂等)
SET @menu_c = CONVERT('95400000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
UPDATE sys_menu
SET
menu_name = '生产任务组合模版',
remark = '生产基础信息:生产任务组合模版主数据',
update_time = NOW()
WHERE id COLLATE utf8mb4_unicode_ci = @menu_c
AND del_flag = 0;