alter_biz_qc_inspection_item_template.sql 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. -- 质检:检测项目模版(建表 + C 菜单 + 4 F 按钮 + 角色授权)
  2. -- 幂等:可重复执行
  3. -- 授权:已有【质检基础信息】QCB 下任一有效子菜单,或已有质检工单菜单的角色
  4. -- → 授予 TOP + QCB + 本 C/F
  5. SET @tenant_no = CONVERT('zkxw' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  6. SET @top_id = CONVERT('TOP00000000000000000000000000003' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  7. SET @qcb_id = CONVERT('QCB00000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  8. SET @wo_menu = CONVERT('70000000000000000000000000000007' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  9. SET @menu_c = CONVERT('95300000000000000000000000000001' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  10. SET @menu_f_list = CONVERT('95300000000000000000000000000002' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  11. SET @menu_f_add = CONVERT('95300000000000000000000000000003' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  12. SET @menu_f_edit = CONVERT('95300000000000000000000000000004' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  13. SET @menu_f_remove = CONVERT('95300000000000000000000000000005' USING utf8mb4) COLLATE utf8mb4_unicode_ci;
  14. -- 0) 建表
  15. CREATE TABLE IF NOT EXISTS `biz_qc_inspection_item_template` (
  16. `id` varchar(64) NOT NULL COMMENT '主键ID',
  17. `template_name` varchar(200) NOT NULL COMMENT '模版名称',
  18. `lab_item_ids` varchar(2000) NOT NULL DEFAULT '' COMMENT '实验室项目ID逗号分隔',
  19. `third_party_item_ids` varchar(2000) NOT NULL DEFAULT '' COMMENT '第三方项目ID逗号分隔',
  20. `status` char(1) NOT NULL DEFAULT '1' COMMENT '1启用 0停用',
  21. `tenant_no` varchar(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
  22. `order_num` int(11) DEFAULT NULL COMMENT '排序号',
  23. `remark` varchar(512) DEFAULT NULL COMMENT '备注',
  24. `create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
  25. `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
  26. `create_time` datetime NOT NULL COMMENT '创建时间',
  27. `update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
  28. `update_time` datetime NOT NULL COMMENT '更新时间',
  29. `del_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标记',
  30. PRIMARY KEY (`id`) USING BTREE,
  31. KEY `idx_qc_iit_tenant_status` (`tenant_no`,`del_flag`,`status`) USING BTREE
  32. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='质检检测项目模版';
  33. -- 1) C 菜单
  34. INSERT INTO sys_menu (
  35. id, menu_name, parent_id, menu_type, path, component, perms,
  36. is_frame, visible, status, tenant_no, order_num, remark,
  37. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  38. )
  39. SELECT
  40. @menu_c,
  41. '检测项目模版',
  42. @qcb_id,
  43. 'C',
  44. 'inspection-item-template',
  45. '/quality-inspection/inspection-item-template/index',
  46. 'biz:qcInspectionItemTemplate:list',
  47. 1, '1', '1', @tenant_no, 5,
  48. '质检基础信息:检测项目模版主数据',
  49. NULL, '', NOW(), NULL, NOW(), 0
  50. FROM DUAL
  51. WHERE NOT EXISTS (
  52. SELECT 1 FROM sys_menu m
  53. WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_c
  54. );
  55. UPDATE sys_menu
  56. SET
  57. menu_name = '检测项目模版',
  58. parent_id = @qcb_id,
  59. menu_type = 'C',
  60. path = 'inspection-item-template',
  61. component = '/quality-inspection/inspection-item-template/index',
  62. perms = 'biz:qcInspectionItemTemplate:list',
  63. visible = '1',
  64. status = '1',
  65. order_num = 5,
  66. remark = '质检基础信息:检测项目模版主数据',
  67. del_flag = 0,
  68. update_time = NOW()
  69. WHERE id COLLATE utf8mb4_unicode_ci = @menu_c;
  70. -- 2) F 按钮:list
  71. INSERT INTO sys_menu (
  72. id, menu_name, parent_id, menu_type, path, component, perms,
  73. is_frame, visible, status, tenant_no, order_num, remark,
  74. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  75. )
  76. SELECT
  77. @menu_f_list,
  78. '检测项目模版查询',
  79. @menu_c,
  80. 'F',
  81. '',
  82. '',
  83. 'biz:qcInspectionItemTemplate:list',
  84. 1, '0', '1', @tenant_no, 1,
  85. '检测项目模版列表查询',
  86. NULL, '', NOW(), NULL, NOW(), 0
  87. FROM DUAL
  88. WHERE NOT EXISTS (
  89. SELECT 1 FROM sys_menu m
  90. WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_f_list
  91. );
  92. UPDATE sys_menu
  93. SET
  94. menu_name = '检测项目模版查询',
  95. parent_id = @menu_c,
  96. menu_type = 'F',
  97. path = '',
  98. component = '',
  99. perms = 'biz:qcInspectionItemTemplate:list',
  100. visible = '0',
  101. status = '1',
  102. order_num = 1,
  103. remark = '检测项目模版列表查询',
  104. del_flag = 0,
  105. update_time = NOW()
  106. WHERE id COLLATE utf8mb4_unicode_ci = @menu_f_list;
  107. -- 2b) F 按钮:add
  108. INSERT INTO sys_menu (
  109. id, menu_name, parent_id, menu_type, path, component, perms,
  110. is_frame, visible, status, tenant_no, order_num, remark,
  111. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  112. )
  113. SELECT
  114. @menu_f_add,
  115. '检测项目模版新增',
  116. @menu_c,
  117. 'F',
  118. '',
  119. '',
  120. 'biz:qcInspectionItemTemplate:add',
  121. 1, '0', '1', @tenant_no, 2,
  122. '检测项目模版新增',
  123. NULL, '', NOW(), NULL, NOW(), 0
  124. FROM DUAL
  125. WHERE NOT EXISTS (
  126. SELECT 1 FROM sys_menu m
  127. WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_f_add
  128. );
  129. UPDATE sys_menu
  130. SET
  131. menu_name = '检测项目模版新增',
  132. parent_id = @menu_c,
  133. menu_type = 'F',
  134. path = '',
  135. component = '',
  136. perms = 'biz:qcInspectionItemTemplate:add',
  137. visible = '0',
  138. status = '1',
  139. order_num = 2,
  140. remark = '检测项目模版新增',
  141. del_flag = 0,
  142. update_time = NOW()
  143. WHERE id COLLATE utf8mb4_unicode_ci = @menu_f_add;
  144. -- 2c) F 按钮:edit
  145. INSERT INTO sys_menu (
  146. id, menu_name, parent_id, menu_type, path, component, perms,
  147. is_frame, visible, status, tenant_no, order_num, remark,
  148. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  149. )
  150. SELECT
  151. @menu_f_edit,
  152. '检测项目模版修改',
  153. @menu_c,
  154. 'F',
  155. '',
  156. '',
  157. 'biz:qcInspectionItemTemplate:edit',
  158. 1, '0', '1', @tenant_no, 3,
  159. '检测项目模版修改(含启停)',
  160. NULL, '', NOW(), NULL, NOW(), 0
  161. FROM DUAL
  162. WHERE NOT EXISTS (
  163. SELECT 1 FROM sys_menu m
  164. WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_f_edit
  165. );
  166. UPDATE sys_menu
  167. SET
  168. menu_name = '检测项目模版修改',
  169. parent_id = @menu_c,
  170. menu_type = 'F',
  171. path = '',
  172. component = '',
  173. perms = 'biz:qcInspectionItemTemplate:edit',
  174. visible = '0',
  175. status = '1',
  176. order_num = 3,
  177. remark = '检测项目模版修改(含启停)',
  178. del_flag = 0,
  179. update_time = NOW()
  180. WHERE id COLLATE utf8mb4_unicode_ci = @menu_f_edit;
  181. -- 2d) F 按钮:remove
  182. INSERT INTO sys_menu (
  183. id, menu_name, parent_id, menu_type, path, component, perms,
  184. is_frame, visible, status, tenant_no, order_num, remark,
  185. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  186. )
  187. SELECT
  188. @menu_f_remove,
  189. '检测项目模版删除',
  190. @menu_c,
  191. 'F',
  192. '',
  193. '',
  194. 'biz:qcInspectionItemTemplate:remove',
  195. 1, '0', '1', @tenant_no, 4,
  196. '检测项目模版删除',
  197. NULL, '', NOW(), NULL, NOW(), 0
  198. FROM DUAL
  199. WHERE NOT EXISTS (
  200. SELECT 1 FROM sys_menu m
  201. WHERE m.id COLLATE utf8mb4_unicode_ci = @menu_f_remove
  202. );
  203. UPDATE sys_menu
  204. SET
  205. menu_name = '检测项目模版删除',
  206. parent_id = @menu_c,
  207. menu_type = 'F',
  208. path = '',
  209. component = '',
  210. perms = 'biz:qcInspectionItemTemplate:remove',
  211. visible = '0',
  212. status = '1',
  213. order_num = 4,
  214. remark = '检测项目模版删除',
  215. del_flag = 0,
  216. update_time = NOW()
  217. WHERE id COLLATE utf8mb4_unicode_ci = @menu_f_remove;
  218. -- 3) 目标角色:已有 QCB 下任一有效子菜单,或已有质检工单菜单
  219. -- MySQL 5.7:UPDATE 目标表不可在同句 FROM/EXISTS 中直接引用自身,须用派生表
  220. -- 3a) 恢复软删的 TOP / QCB / C / F 授权
  221. UPDATE sys_role_menu rm
  222. INNER JOIN sys_role r
  223. ON r.id COLLATE utf8mb4_unicode_ci = rm.role_id COLLATE utf8mb4_unicode_ci
  224. AND r.del_flag = 0
  225. AND r.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  226. INNER JOIN (
  227. SELECT DISTINCT rm2.role_id AS role_id
  228. FROM sys_role_menu rm2
  229. INNER JOIN sys_menu m2
  230. ON m2.id COLLATE utf8mb4_unicode_ci = rm2.menu_id COLLATE utf8mb4_unicode_ci
  231. AND m2.del_flag = 0
  232. AND (
  233. m2.parent_id COLLATE utf8mb4_unicode_ci = @qcb_id
  234. OR m2.id COLLATE utf8mb4_unicode_ci = @wo_menu
  235. )
  236. WHERE rm2.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  237. AND rm2.del_flag = 0
  238. ) eligible
  239. ON eligible.role_id COLLATE utf8mb4_unicode_ci = r.id COLLATE utf8mb4_unicode_ci
  240. SET
  241. rm.del_flag = 0,
  242. rm.update_time = NOW(),
  243. rm.remark = 'grant qc inspection item template to QCB/WO roles'
  244. WHERE rm.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  245. AND rm.del_flag = 1
  246. AND rm.menu_id COLLATE utf8mb4_unicode_ci IN (
  247. @top_id, @qcb_id, @menu_c,
  248. @menu_f_list, @menu_f_add, @menu_f_edit, @menu_f_remove
  249. );
  250. -- 3b) 插入缺失授权(TOP + QCB + C + 4 F)
  251. INSERT INTO sys_role_menu (
  252. id, role_id, menu_id, tenant_no, order_num, remark,
  253. create_by, create_dept_id, create_time, update_by, update_time, del_flag
  254. )
  255. SELECT
  256. UPPER(MD5(CONCAT(src.role_id, '|', src.menu_id))),
  257. src.role_id,
  258. src.menu_id,
  259. @tenant_no,
  260. 0,
  261. 'grant qc inspection item template to QCB/WO roles',
  262. 'admin',
  263. '',
  264. NOW(),
  265. NULL,
  266. NOW(),
  267. 0
  268. FROM (
  269. SELECT
  270. r.id AS role_id,
  271. x.menu_id AS menu_id
  272. FROM sys_role r
  273. INNER JOIN (
  274. SELECT @top_id AS menu_id
  275. UNION ALL SELECT @qcb_id
  276. UNION ALL SELECT @menu_c
  277. UNION ALL SELECT @menu_f_list
  278. UNION ALL SELECT @menu_f_add
  279. UNION ALL SELECT @menu_f_edit
  280. UNION ALL SELECT @menu_f_remove
  281. ) x
  282. INNER JOIN (
  283. SELECT DISTINCT rm2.role_id AS role_id
  284. FROM sys_role_menu rm2
  285. INNER JOIN sys_menu m2
  286. ON m2.id COLLATE utf8mb4_unicode_ci = rm2.menu_id COLLATE utf8mb4_unicode_ci
  287. AND m2.del_flag = 0
  288. AND (
  289. m2.parent_id COLLATE utf8mb4_unicode_ci = @qcb_id
  290. OR m2.id COLLATE utf8mb4_unicode_ci = @wo_menu
  291. )
  292. WHERE rm2.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  293. AND rm2.del_flag = 0
  294. ) eligible
  295. ON eligible.role_id COLLATE utf8mb4_unicode_ci = r.id COLLATE utf8mb4_unicode_ci
  296. INNER JOIN sys_menu m
  297. ON m.id COLLATE utf8mb4_unicode_ci = x.menu_id
  298. AND m.del_flag = 0
  299. WHERE r.del_flag = 0
  300. AND r.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  301. ) src
  302. LEFT JOIN sys_role_menu existing
  303. ON existing.role_id COLLATE utf8mb4_unicode_ci = src.role_id COLLATE utf8mb4_unicode_ci
  304. AND existing.menu_id COLLATE utf8mb4_unicode_ci = src.menu_id COLLATE utf8mb4_unicode_ci
  305. AND existing.tenant_no COLLATE utf8mb4_unicode_ci = @tenant_no
  306. AND existing.del_flag = 0
  307. WHERE existing.id IS NULL;