Bladeren bron

fix: paste production task set SQL into the production sync script

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu 2 maanden geleden
bovenliggende
commit
d850fd0027
2 gewijzigde bestanden met toevoegingen van 358 en 1 verwijderingen
  1. 6 0
      docs/sql/alter_biz_production_task_set.sql
  2. 352 1
      待同步到生产的sql脚本

+ 6 - 0
docs/sql/alter_biz_production_task_set.sql

@@ -264,6 +264,9 @@ INNER JOIN (
     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
@@ -324,6 +327,9 @@ FROM (
       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

+ 352 - 1
待同步到生产的sql脚本

@@ -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;