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