alter_biz_production_task_set.sql 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. -- 生产任务集合:头表 + 条目 + 菜单授权(幂等)
  2. -- 授权:已有【生产基础信息】PRB 下任一有效子菜单 或 已有生产工单菜单 的角色 → 授予 PRB + C + 四个 F
  3. SET @tenant_no = CONVERT('zkxw' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  4. SET @prb_id = CONVERT('PRB00000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  5. SET @wo_menu_id = CONVERT('90000000000000000000000000000011' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  6. SET @menu_c = CONVERT('95400000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  7. SET @menu_list = CONVERT('95400000000000000000000000000002' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  8. SET @menu_add = CONVERT('95400000000000000000000000000003' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  9. SET @menu_edit = CONVERT('95400000000000000000000000000004' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  10. SET @menu_remove = CONVERT('95400000000000000000000000000005' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  11. CREATE TABLE IF NOT EXISTS `biz_production_task_set` (
  12. `id` varchar(64) NOT NULL COMMENT '主键ID',
  13. `set_name` varchar(200) NOT NULL COMMENT '集合名称',
  14. `status` char(1) NOT NULL DEFAULT '1' COMMENT '1启用 0停用',
  15. `tenant_no` varchar(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
  16. `order_num` int(11) DEFAULT NULL COMMENT '排序号',
  17. `remark` varchar(512) DEFAULT NULL COMMENT '备注',
  18. `create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
  19. `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
  20. `create_time` datetime NOT NULL COMMENT '创建时间',
  21. `update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
  22. `update_time` datetime NOT NULL COMMENT '更新时间',
  23. `del_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记',
  24. PRIMARY KEY (`id`) USING BTREE,
  25. KEY `idx_pts_tenant_status` (`tenant_no`,`del_flag`,`status`) USING BTREE
  26. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产任务集合';
  27. CREATE TABLE IF NOT EXISTS `biz_production_task_set_item` (
  28. `id` varchar(64) NOT NULL COMMENT '主键ID',
  29. `set_id` varchar(64) NOT NULL COMMENT '集合ID',
  30. `task_name` varchar(200) NOT NULL COMMENT '任务名称',
  31. `route_id` varchar(64) DEFAULT NULL COMMENT '工艺路线ID',
  32. `route_name` varchar(100) DEFAULT NULL COMMENT '路线名称快照',
  33. `description` varchar(500) DEFAULT NULL COMMENT '描述',
  34. `remark` varchar(512) DEFAULT NULL COMMENT '备注',
  35. `tenant_no` varchar(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
  36. `order_num` int(11) DEFAULT NULL COMMENT '排序号',
  37. `create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
  38. `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
  39. `create_time` datetime NOT NULL COMMENT '创建时间',
  40. `update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
  41. `update_time` datetime NOT NULL COMMENT '更新时间',
  42. `del_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记',
  43. PRIMARY KEY (`id`) USING BTREE,
  44. KEY `idx_ptsi_set` (`set_id`,`del_flag`,`order_num`) USING BTREE
  45. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产任务集合条目';
  46. -- 1) C 菜单
  47. INSERT INTO sys_menu (
  48. id, menu_name, parent_id, menu_type, path, component, perms,
  49. is_frame, visible, status, tenant_no, order_num, remark,
  50. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  51. )
  52. SELECT
  53. @menu_c,
  54. '生产任务集合',
  55. @prb_id,
  56. 'C',
  57. 'production-task-set',
  58. '/production/production-task-set/index',
  59. 'production:task-set:list',
  60. 1, '1', '1', @tenant_no, 12,
  61. '生产基础信息:生产任务集合主数据',
  62. NULL, '', NOW(), NULL, NOW(), 0
  63. FROM DUAL
  64. WHERE NOT EXISTS (
  65. SELECT 1 FROM sys_menu m
  66. WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_c
  67. );
  68. UPDATE sys_menu
  69. SET
  70. menu_name = '生产任务集合',
  71. parent_id = @prb_id,
  72. menu_type = 'C',
  73. path = 'production-task-set',
  74. component = '/production/production-task-set/index',
  75. perms = 'production:task-set:list',
  76. visible = '1',
  77. status = '1',
  78. order_num = 12,
  79. remark = '生产基础信息:生产任务集合主数据',
  80. del_flag = 0,
  81. update_time = NOW()
  82. WHERE id COLLATE utf8mb4_unicode_ci = @menu_c;
  83. -- 2) F 按钮:查询
  84. INSERT INTO sys_menu (
  85. id, menu_name, parent_id, menu_type, path, component, perms,
  86. is_frame, visible, status, tenant_no, order_num, remark,
  87. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  88. )
  89. SELECT
  90. @menu_list,
  91. '查询',
  92. @menu_c,
  93. 'F',
  94. '',
  95. '',
  96. 'production:task-set:list',
  97. 1, '0', '1', @tenant_no, 1,
  98. '生产任务集合列表查询',
  99. NULL, '', NOW(), NULL, NOW(), 0
  100. FROM DUAL
  101. WHERE NOT EXISTS (
  102. SELECT 1 FROM sys_menu m
  103. WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_list
  104. );
  105. UPDATE sys_menu
  106. SET
  107. menu_name = '查询',
  108. parent_id = @menu_c,
  109. menu_type = 'F',
  110. path = '',
  111. component = '',
  112. perms = 'production:task-set:list',
  113. visible = '0',
  114. status = '1',
  115. order_num = 1,
  116. remark = '生产任务集合列表查询',
  117. del_flag = 0,
  118. update_time = NOW()
  119. WHERE id COLLATE utf8mb4_unicode_ci = @menu_list;
  120. -- 2) F 按钮:新增
  121. INSERT INTO sys_menu (
  122. id, menu_name, parent_id, menu_type, path, component, perms,
  123. is_frame, visible, status, tenant_no, order_num, remark,
  124. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  125. )
  126. SELECT
  127. @menu_add,
  128. '新增',
  129. @menu_c,
  130. 'F',
  131. '',
  132. '',
  133. 'production:task-set:add',
  134. 1, '0', '1', @tenant_no, 2,
  135. '生产任务集合新增',
  136. NULL, '', NOW(), NULL, NOW(), 0
  137. FROM DUAL
  138. WHERE NOT EXISTS (
  139. SELECT 1 FROM sys_menu m
  140. WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_add
  141. );
  142. UPDATE sys_menu
  143. SET
  144. menu_name = '新增',
  145. parent_id = @menu_c,
  146. menu_type = 'F',
  147. path = '',
  148. component = '',
  149. perms = 'production:task-set:add',
  150. visible = '0',
  151. status = '1',
  152. order_num = 2,
  153. remark = '生产任务集合新增',
  154. del_flag = 0,
  155. update_time = NOW()
  156. WHERE id COLLATE utf8mb4_unicode_ci = @menu_add;
  157. -- 2) F 按钮:编辑
  158. INSERT INTO sys_menu (
  159. id, menu_name, parent_id, menu_type, path, component, perms,
  160. is_frame, visible, status, tenant_no, order_num, remark,
  161. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  162. )
  163. SELECT
  164. @menu_edit,
  165. '编辑',
  166. @menu_c,
  167. 'F',
  168. '',
  169. '',
  170. 'production:task-set:edit',
  171. 1, '0', '1', @tenant_no, 3,
  172. '生产任务集合编辑',
  173. NULL, '', NOW(), NULL, NOW(), 0
  174. FROM DUAL
  175. WHERE NOT EXISTS (
  176. SELECT 1 FROM sys_menu m
  177. WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_edit
  178. );
  179. UPDATE sys_menu
  180. SET
  181. menu_name = '编辑',
  182. parent_id = @menu_c,
  183. menu_type = 'F',
  184. path = '',
  185. component = '',
  186. perms = 'production:task-set:edit',
  187. visible = '0',
  188. status = '1',
  189. order_num = 3,
  190. remark = '生产任务集合编辑',
  191. del_flag = 0,
  192. update_time = NOW()
  193. WHERE id COLLATE utf8mb4_unicode_ci = @menu_edit;
  194. -- 2) F 按钮:删除
  195. INSERT INTO sys_menu (
  196. id, menu_name, parent_id, menu_type, path, component, perms,
  197. is_frame, visible, status, tenant_no, order_num, remark,
  198. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  199. )
  200. SELECT
  201. @menu_remove,
  202. '删除',
  203. @menu_c,
  204. 'F',
  205. '',
  206. '',
  207. 'production:task-set:remove',
  208. 1, '0', '1', @tenant_no, 4,
  209. '生产任务集合删除',
  210. NULL, '', NOW(), NULL, NOW(), 0
  211. FROM DUAL
  212. WHERE NOT EXISTS (
  213. SELECT 1 FROM sys_menu m
  214. WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_remove
  215. );
  216. UPDATE sys_menu
  217. SET
  218. menu_name = '删除',
  219. parent_id = @menu_c,
  220. menu_type = 'F',
  221. path = '',
  222. component = '',
  223. perms = 'production:task-set:remove',
  224. visible = '0',
  225. status = '1',
  226. order_num = 4,
  227. remark = '生产任务集合删除',
  228. del_flag = 0,
  229. update_time = NOW()
  230. WHERE id COLLATE utf8mb4_unicode_ci = @menu_remove;
  231. -- 3) 目标角色:PRB 下任一有效子菜单 或 已有生产工单菜单
  232. -- MySQL 5.7:UPDATE 目标表不可在同句 FROM/EXISTS 中直接引用自身,须用派生表
  233. -- 3a) 恢复软删的 PRB / C / F 授权
  234. UPDATE sys_role_menu rm
  235. INNER JOIN sys_role r
  236. ON r.id COLLATE utf8mb4_unicode_ci = rm.role_id COLLATE utf8mb4_unicode_ci
  237. AND r.del_flag = 0
  238. AND r.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  239. INNER JOIN (
  240. SELECT DISTINCT role_id FROM (
  241. SELECT DISTINCT rm2.role_id AS role_id
  242. FROM sys_role_menu rm2
  243. INNER JOIN sys_menu m2
  244. ON m2.id COLLATE utf8mb4_unicode_ci = rm2.menu_id COLLATE utf8mb4_unicode_ci
  245. AND m2.del_flag = 0
  246. AND m2.parent_id COLLATE utf8mb4_unicode_ci = @prb_id
  247. WHERE rm2.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  248. AND rm2.del_flag = 0
  249. UNION
  250. SELECT DISTINCT rm3.role_id AS role_id
  251. FROM sys_role_menu rm3
  252. INNER JOIN sys_menu m3
  253. ON m3.id COLLATE utf8mb4_unicode_ci = rm3.menu_id COLLATE utf8mb4_unicode_ci
  254. AND m3.del_flag = 0
  255. WHERE rm3.menu_id COLLATE utf8mb4_unicode_ci = @wo_menu_id
  256. AND rm3.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  257. AND rm3.del_flag = 0
  258. ) eligible_roles
  259. ) eligible
  260. ON eligible.role_id COLLATE utf8mb4_unicode_ci = r.id COLLATE utf8mb4_unicode_ci
  261. SET
  262. rm.del_flag = 0,
  263. rm.update_time = NOW(),
  264. rm.remark = 'grant production task-set to PRB/work-order roles'
  265. WHERE rm.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  266. AND rm.del_flag = 1
  267. AND rm.menu_id COLLATE utf8mb4_unicode_ci IN (
  268. @prb_id, @menu_c, @menu_list, @menu_add, @menu_edit, @menu_remove
  269. );
  270. -- 3b) 插入缺失授权(PRB + C + 四个 F)
  271. INSERT INTO sys_role_menu (
  272. id, role_id, menu_id, tenant_no, order_num, remark,
  273. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  274. )
  275. SELECT
  276. UPPER(MD5(CONCAT(src.role_id, '|', src.menu_id))),
  277. src.role_id,
  278. src.menu_id,
  279. @tenant_no,
  280. 0,
  281. 'grant production task-set to PRB/work-order roles',
  282. 'admin',
  283. '',
  284. NOW(),
  285. NULL,
  286. NOW(),
  287. 0
  288. FROM (
  289. SELECT
  290. r.id AS role_id,
  291. x.menu_id AS menu_id
  292. FROM sys_role r
  293. INNER JOIN (
  294. SELECT @prb_id AS menu_id
  295. UNION ALL SELECT @menu_c
  296. UNION ALL SELECT @menu_list
  297. UNION ALL SELECT @menu_add
  298. UNION ALL SELECT @menu_edit
  299. UNION ALL SELECT @menu_remove
  300. ) x
  301. INNER JOIN (
  302. SELECT DISTINCT role_id FROM (
  303. SELECT DISTINCT rm2.role_id AS role_id
  304. FROM sys_role_menu rm2
  305. INNER JOIN sys_menu m2
  306. ON m2.id COLLATE utf8mb4_unicode_ci = rm2.menu_id COLLATE utf8mb4_unicode_ci
  307. AND m2.del_flag = 0
  308. AND m2.parent_id COLLATE utf8mb4_unicode_ci = @prb_id
  309. WHERE rm2.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  310. AND rm2.del_flag = 0
  311. UNION
  312. SELECT DISTINCT rm3.role_id AS role_id
  313. FROM sys_role_menu rm3
  314. INNER JOIN sys_menu m3
  315. ON m3.id COLLATE utf8mb4_unicode_ci = rm3.menu_id COLLATE utf8mb4_unicode_ci
  316. AND m3.del_flag = 0
  317. WHERE rm3.menu_id COLLATE utf8mb4_unicode_ci = @wo_menu_id
  318. AND rm3.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  319. AND rm3.del_flag = 0
  320. ) eligible_roles
  321. ) eligible
  322. ON eligible.role_id COLLATE utf8mb4_unicode_ci = r.id COLLATE utf8mb4_unicode_ci
  323. INNER JOIN sys_menu m
  324. ON m.id COLLATE utf8mb4_unicode_ci = x.menu_id
  325. AND m.del_flag = 0
  326. WHERE r.del_flag = 0
  327. AND r.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  328. ) src
  329. LEFT JOIN sys_role_menu existing
  330. ON existing.role_id COLLATE utf8mb4_unicode_ci = src.role_id COLLATE utf8mb4_unicode_ci
  331. AND existing.menu_id COLLATE utf8mb4_unicode_ci = src.menu_id COLLATE utf8mb4_unicode_ci
  332. AND existing.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  333. AND existing.del_flag = 0
  334. WHERE existing.id IS NULL;