|
|
@@ -779,4 +779,355 @@ LEFT JOIN sys_role_menu existing
|
|
|
AND existing.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
|
|
|
AND existing.del_flag = 0
|
|
|
WHERE existing.id IS NULL;
|
|
|
-docs/sql/alter_biz_production_task_set.sql
|
|
|
+
|
|
|
+-- 生产任务集合:docs/sql/alter_biz_production_task_set.sql
|
|
|
+-- 生产任务集合:头表 + 条目 + 菜单授权(幂等)
|
|
|
+-- 授权:已有【生产基础信息】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;
|