Files
zkxw/docs/sql/alter_biz_production_task_set.sql
T
2026-08-18 15:11:44 +08:00

345 lines
11 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.
-- 生产任务集合:头表 + 条目 + 菜单授权(幂等)
-- 授权:已有【生产基础信息】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
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
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;