From 9ac29e6ad75a439fead2236c17fc4d2c49706f51 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Tue, 18 Aug 2026 15:11:44 +0800 Subject: [PATCH] feat: add production task set schema and menu SQL Co-authored-by: Cursor --- docs/sql/alter_biz_production_task_set.sql | 344 +++++++++++++++++++++ 待同步到生产的sql脚本 | 1 + 2 files changed, 345 insertions(+) create mode 100644 docs/sql/alter_biz_production_task_set.sql diff --git a/docs/sql/alter_biz_production_task_set.sql b/docs/sql/alter_biz_production_task_set.sql new file mode 100644 index 00000000..6a2d4a68 --- /dev/null +++ b/docs/sql/alter_biz_production_task_set.sql @@ -0,0 +1,344 @@ +-- 生产任务集合:头表 + 条目 + 菜单授权(幂等) +-- 授权:已有【生产基础信息】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; diff --git a/待同步到生产的sql脚本 b/待同步到生产的sql脚本 index b660eff3..24cfa6bf 100644 --- a/待同步到生产的sql脚本 +++ b/待同步到生产的sql脚本 @@ -779,3 +779,4 @@ 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