2026-09-26-pl-vehicle-recharge-workflow.sql 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. -- 车辆 ETC/加油充值:可配置审批与财务发放登记
  2. -- Spec: docs/superpowers/specs/2026-09-26-pl-vehicle-recharge-workflow-design.md
  3. -- Plan Task 1: 结构 + 字典 + 菜单 + 流程种子 + 存量 pending 迁移
  4. -- 可重复执行(列/菜单/字典/角色授权均做存在性判断)
  5. SET NAMES utf8mb4;
  6. -- =============================================================================
  7. -- 1) bx_workflow_node.action_type
  8. -- =============================================================================
  9. SET @db := DATABASE();
  10. SET @col_exists := (
  11. SELECT COUNT(*) FROM information_schema.COLUMNS
  12. WHERE TABLE_SCHEMA = @db
  13. AND TABLE_NAME = 'bx_workflow_node'
  14. AND COLUMN_NAME = 'action_type'
  15. );
  16. SET @sql := IF(
  17. @col_exists = 0,
  18. 'ALTER TABLE `bx_workflow_node`
  19. ADD COLUMN `action_type` varchar(20) NOT NULL DEFAULT ''approve''
  20. COMMENT ''approve-审批 disburse-发放登记'' AFTER `approver_name`',
  21. 'SELECT ''bx_workflow_node.action_type already exists'' AS info'
  22. );
  23. PREPARE stmt FROM @sql;
  24. EXECUTE stmt;
  25. DEALLOCATE PREPARE stmt;
  26. -- =============================================================================
  27. -- 2) pl_vehicle_recharge_apply:wf_id / current_node / approval_round + status 注释
  28. -- =============================================================================
  29. SET @col_exists := (
  30. SELECT COUNT(*) FROM information_schema.COLUMNS
  31. WHERE TABLE_SCHEMA = @db
  32. AND TABLE_NAME = 'pl_vehicle_recharge_apply'
  33. AND COLUMN_NAME = 'wf_id'
  34. );
  35. SET @sql := IF(
  36. @col_exists = 0,
  37. 'ALTER TABLE `pl_vehicle_recharge_apply`
  38. ADD COLUMN `wf_id` varchar(64) DEFAULT NULL COMMENT ''工作流定义ID'' AFTER `status`',
  39. 'SELECT ''pl_vehicle_recharge_apply.wf_id already exists'' AS info'
  40. );
  41. PREPARE stmt FROM @sql;
  42. EXECUTE stmt;
  43. DEALLOCATE PREPARE stmt;
  44. SET @col_exists := (
  45. SELECT COUNT(*) FROM information_schema.COLUMNS
  46. WHERE TABLE_SCHEMA = @db
  47. AND TABLE_NAME = 'pl_vehicle_recharge_apply'
  48. AND COLUMN_NAME = 'current_node'
  49. );
  50. SET @sql := IF(
  51. @col_exists = 0,
  52. 'ALTER TABLE `pl_vehicle_recharge_apply`
  53. ADD COLUMN `current_node` varchar(64) DEFAULT NULL COMMENT ''当前节点ID'' AFTER `wf_id`',
  54. 'SELECT ''pl_vehicle_recharge_apply.current_node already exists'' AS info'
  55. );
  56. PREPARE stmt FROM @sql;
  57. EXECUTE stmt;
  58. DEALLOCATE PREPARE stmt;
  59. SET @col_exists := (
  60. SELECT COUNT(*) FROM information_schema.COLUMNS
  61. WHERE TABLE_SCHEMA = @db
  62. AND TABLE_NAME = 'pl_vehicle_recharge_apply'
  63. AND COLUMN_NAME = 'approval_round'
  64. );
  65. SET @sql := IF(
  66. @col_exists = 0,
  67. 'ALTER TABLE `pl_vehicle_recharge_apply`
  68. ADD COLUMN `approval_round` int(11) NOT NULL DEFAULT 0 COMMENT ''当前审批轮次'' AFTER `current_node`',
  69. 'SELECT ''pl_vehicle_recharge_apply.approval_round already exists'' AS info'
  70. );
  71. PREPARE stmt FROM @sql;
  72. EXECUTE stmt;
  73. DEALLOCATE PREPARE stmt;
  74. ALTER TABLE `pl_vehicle_recharge_apply`
  75. MODIFY COLUMN `status` varchar(20) NOT NULL DEFAULT 'draft'
  76. COMMENT 'draft-草稿 in_approval-审批中 rejected-已驳回 disbursed-已发放 cancelled-已作废';
  77. -- =============================================================================
  78. -- 3) 审批历史表
  79. -- =============================================================================
  80. CREATE TABLE IF NOT EXISTS `pl_vehicle_recharge_approval` (
  81. `id` varchar(64) NOT NULL COMMENT '主键ID',
  82. `apply_id` varchar(64) NOT NULL COMMENT '申请单ID',
  83. `approval_round` int(11) NOT NULL DEFAULT 1 COMMENT '审批轮次',
  84. `node_id` varchar(64) DEFAULT NULL COMMENT '节点ID快照',
  85. `node_name` varchar(128) DEFAULT NULL COMMENT '节点名称快照',
  86. `approver_id` varchar(64) NOT NULL COMMENT '审批人用户ID',
  87. `approver_name` varchar(64) NOT NULL COMMENT '审批人姓名',
  88. `approval_status` varchar(32) NOT NULL COMMENT 'approved/rejected/disbursed',
  89. `approval_opinion` varchar(1024) DEFAULT NULL COMMENT '审批意见',
  90. `approval_time` datetime NOT NULL COMMENT '审批时间',
  91. `tenant_no` varchar(64) NOT NULL DEFAULT 'shanxia2.0' COMMENT '租户编号',
  92. `order_num` int(11) DEFAULT NULL COMMENT '排序号',
  93. `remark` varchar(512) DEFAULT NULL COMMENT '备注',
  94. `create_by` varchar(64) DEFAULT NULL COMMENT '创建人id',
  95. `create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
  96. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  97. `update_by` varchar(64) DEFAULT NULL COMMENT '更新人id',
  98. `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  99. `del_flag` smallint(6) NOT NULL DEFAULT 0 COMMENT '删除标记:0-正常 1-已删除',
  100. PRIMARY KEY (`id`),
  101. KEY `idx_apply_id` (`apply_id`),
  102. KEY `idx_tenant` (`tenant_no`),
  103. KEY `idx_approver` (`approver_id`)
  104. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='车辆充值申请审批历史';
  105. -- =============================================================================
  106. -- 4) 流程定义 + 节点种子
  107. -- =============================================================================
  108. INSERT INTO `bx_workflow_def` (
  109. `id`, `biz_type`, `wf_name`, `status`, `tenant_no`, `order_num`, `remark`,
  110. `create_by`, `create_dept_id`, `create_time`, `del_flag`
  111. )
  112. VALUES (
  113. 'PL_WF_VEHICLE_RECHARGE', 'vehicle_recharge', 'ETC/加油充值审批流程', 1,
  114. 'shanxia2.0', 0, '充值申请默认审批流程', 'system', '', NOW(), 0
  115. )
  116. ON DUPLICATE KEY UPDATE
  117. `wf_name` = VALUES(`wf_name`),
  118. `biz_type` = VALUES(`biz_type`),
  119. `status` = VALUES(`status`),
  120. `del_flag` = 0,
  121. `remark` = VALUES(`remark`);
  122. INSERT INTO `bx_workflow_node` (
  123. `id`, `wf_id`, `node_name`, `node_order`, `approver_id`, `approver_name`,
  124. `action_type`, `tenant_no`, `order_num`, `remark`,
  125. `create_by`, `create_dept_id`, `create_time`, `del_flag`
  126. )
  127. VALUES
  128. (
  129. 'PL_WR_NODE_GM', 'PL_WF_VEHICLE_RECHARGE', '总经理审批', 1,
  130. '56D1C9DA5F6747DDAD25C248A156A524', '吴九华', 'approve',
  131. 'shanxia2.0', 0, NULL, 'system', '', NOW(), 0
  132. ),
  133. (
  134. 'PL_WR_NODE_FIN', 'PL_WF_VEHICLE_RECHARGE', '财务发放', 2,
  135. 'CC2EED9A86F44D11AFFD0AD381893093', '汪璇', 'disburse',
  136. 'shanxia2.0', 0, NULL, 'system', '', NOW(), 0
  137. )
  138. ON DUPLICATE KEY UPDATE
  139. `wf_id` = VALUES(`wf_id`),
  140. `node_name` = VALUES(`node_name`),
  141. `node_order` = VALUES(`node_order`),
  142. `approver_id` = VALUES(`approver_id`),
  143. `approver_name` = VALUES(`approver_name`),
  144. `action_type` = VALUES(`action_type`),
  145. `del_flag` = 0;
  146. -- =============================================================================
  147. -- 5) 字典 pl_recharge_apply_status
  148. -- 软停用旧 pending;补齐 draft/in_approval/rejected;保留 disbursed/cancelled
  149. -- =============================================================================
  150. UPDATE `sys_dict_data`
  151. SET `del_flag` = 1,
  152. `remark` = '充值审批改造:pending(待发放)已废弃,存量已迁移为 in_approval',
  153. `update_time` = NOW()
  154. WHERE `id` = 'PL_RECHARGE_APPLY_PENDING'
  155. AND `dict_type` = 'pl_recharge_apply_status'
  156. AND `del_flag` = 0;
  157. INSERT INTO `sys_dict_data` (
  158. `id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`,
  159. `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `del_flag`
  160. )
  161. SELECT
  162. 'PL_RECHARGE_APPLY_DRAFT', '草稿', 'draft', 'info', 'pl_recharge_apply_status',
  163. 'shanxia2.0', 1, NULL, 'system', '', NOW(), 0
  164. FROM DUAL
  165. WHERE NOT EXISTS (
  166. SELECT 1 FROM `sys_dict_data` WHERE `id` = 'PL_RECHARGE_APPLY_DRAFT'
  167. );
  168. INSERT INTO `sys_dict_data` (
  169. `id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`,
  170. `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `del_flag`
  171. )
  172. SELECT
  173. 'PL_RECHARGE_APPLY_IN_APPROVAL', '审批中', 'in_approval', 'warning', 'pl_recharge_apply_status',
  174. 'shanxia2.0', 2, NULL, 'system', '', NOW(), 0
  175. FROM DUAL
  176. WHERE NOT EXISTS (
  177. SELECT 1 FROM `sys_dict_data` WHERE `id` = 'PL_RECHARGE_APPLY_IN_APPROVAL'
  178. );
  179. INSERT INTO `sys_dict_data` (
  180. `id`, `dict_label`, `dict_value`, `tag_type`, `dict_type`, `tenant_no`,
  181. `order_num`, `remark`, `create_by`, `create_dept_id`, `create_time`, `del_flag`
  182. )
  183. SELECT
  184. 'PL_RECHARGE_APPLY_REJECTED', '已驳回', 'rejected', 'danger', 'pl_recharge_apply_status',
  185. 'shanxia2.0', 3, NULL, 'system', '', NOW(), 0
  186. FROM DUAL
  187. WHERE NOT EXISTS (
  188. SELECT 1 FROM `sys_dict_data` WHERE `id` = 'PL_RECHARGE_APPLY_REJECTED'
  189. );
  190. UPDATE `sys_dict_data`
  191. SET `dict_label` = '已发放',
  192. `tag_type` = 'success',
  193. `order_num` = 4,
  194. `del_flag` = 0,
  195. `update_time` = NOW()
  196. WHERE `id` = 'PL_RECHARGE_APPLY_DISBURSED'
  197. AND `dict_type` = 'pl_recharge_apply_status';
  198. UPDATE `sys_dict_data`
  199. SET `dict_label` = '已作废',
  200. `tag_type` = 'info',
  201. `order_num` = 5,
  202. `del_flag` = 0,
  203. `update_time` = NOW()
  204. WHERE `id` = 'PL_RECHARGE_APPLY_CANCELLED'
  205. AND `dict_type` = 'pl_recharge_apply_status';
  206. -- 幂等:若上述 INSERT 因已存在跳过,仍校正文案/排序/启用态
  207. UPDATE `sys_dict_data`
  208. SET `dict_label` = '草稿', `tag_type` = 'info', `order_num` = 1, `del_flag` = 0, `update_time` = NOW()
  209. WHERE `id` = 'PL_RECHARGE_APPLY_DRAFT';
  210. UPDATE `sys_dict_data`
  211. SET `dict_label` = '审批中', `tag_type` = 'warning', `order_num` = 2, `del_flag` = 0, `update_time` = NOW()
  212. WHERE `id` = 'PL_RECHARGE_APPLY_IN_APPROVAL';
  213. UPDATE `sys_dict_data`
  214. SET `dict_label` = '已驳回', `tag_type` = 'danger', `order_num` = 3, `del_flag` = 0, `update_time` = NOW()
  215. WHERE `id` = 'PL_RECHARGE_APPLY_REJECTED';
  216. -- =============================================================================
  217. -- 6) 菜单:充值审批 / 充值审批流程(挂 PL_GROUP_VEHICLE)
  218. -- 排序:申请(1) → 审批(2) → 发放登记(3) → 流程配置(4) → 其余顺延
  219. -- 仅当发放登记仍为 order_num=2(首次)时整体后移,避免重复执行叠位
  220. -- =============================================================================
  221. SET @record_ord := (
  222. SELECT `order_num` FROM `sys_menu`
  223. WHERE `id` = 'PL_VEH_RECHARGE_RECORD' AND `del_flag` = 0
  224. LIMIT 1
  225. );
  226. UPDATE `sys_menu`
  227. SET `order_num` = `order_num` + 2,
  228. `update_time` = NOW()
  229. WHERE @record_ord = 2
  230. AND `parent_id` = 'PL_GROUP_VEHICLE'
  231. AND `order_num` >= 2
  232. AND `del_flag` = 0
  233. AND `id` NOT IN ('PL_VEH_RECHARGE_APPROVAL', 'PL_VEH_RECHARGE_WF');
  234. UPDATE `sys_menu`
  235. SET `order_num` = 3, `update_time` = NOW()
  236. WHERE `id` = 'PL_VEH_RECHARGE_RECORD' AND `del_flag` = 0;
  237. -- 充值审批(待办)
  238. INSERT INTO `sys_menu` (
  239. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  240. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  241. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  242. )
  243. SELECT
  244. 'PL_VEH_RECHARGE_APPROVAL', '充值审批', 'PL_GROUP_VEHICLE', 'C',
  245. 'vehicle-recharge-approval', 'pl/vehicle-recharge-approval/index',
  246. 'pl:vehicle-recharge-approval:list', 1, '1', '1', 'shanxia2.0', 2, NULL,
  247. 'system', '', NOW(), NULL, NOW(), 0
  248. FROM DUAL
  249. WHERE NOT EXISTS (
  250. SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_VEH_RECHARGE_APPROVAL' AND `del_flag` = 0
  251. );
  252. UPDATE `sys_menu`
  253. SET `menu_name` = '充值审批',
  254. `path` = 'vehicle-recharge-approval',
  255. `component` = 'pl/vehicle-recharge-approval/index',
  256. `perms` = 'pl:vehicle-recharge-approval:list',
  257. `order_num` = 2,
  258. `visible` = '1',
  259. `status` = '1',
  260. `update_time` = NOW()
  261. WHERE `id` = 'PL_VEH_RECHARGE_APPROVAL' AND `del_flag` = 0;
  262. INSERT INTO `sys_menu` (
  263. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  264. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  265. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  266. )
  267. SELECT 'PL_VRAP_Q', '查询', 'PL_VEH_RECHARGE_APPROVAL', 'F', '', '',
  268. 'pl:vehicle-recharge-approval:query', 1, '1', '1', 'shanxia2.0', 1, NULL,
  269. 'system', '', NOW(), NULL, NOW(), 0
  270. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_VRAP_Q' AND `del_flag` = 0);
  271. INSERT INTO `sys_menu` (
  272. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  273. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  274. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  275. )
  276. SELECT 'PL_VRAP_A', '通过', 'PL_VEH_RECHARGE_APPROVAL', 'F', '', '',
  277. 'pl:vehicle-recharge-approval:approve', 1, '1', '1', 'shanxia2.0', 2, NULL,
  278. 'system', '', NOW(), NULL, NOW(), 0
  279. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_VRAP_A' AND `del_flag` = 0);
  280. INSERT INTO `sys_menu` (
  281. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  282. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  283. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  284. )
  285. SELECT 'PL_VRAP_J', '驳回', 'PL_VEH_RECHARGE_APPROVAL', 'F', '', '',
  286. 'pl:vehicle-recharge-approval:reject', 1, '1', '1', 'shanxia2.0', 3, NULL,
  287. 'system', '', NOW(), NULL, NOW(), 0
  288. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_VRAP_J' AND `del_flag` = 0);
  289. INSERT INTO `sys_menu` (
  290. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  291. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  292. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  293. )
  294. SELECT 'PL_VRAP_D', '发放', 'PL_VEH_RECHARGE_APPROVAL', 'F', '', '',
  295. 'pl:vehicle-recharge-approval:disburse', 1, '1', '1', 'shanxia2.0', 4, NULL,
  296. 'system', '', NOW(), NULL, NOW(), 0
  297. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_VRAP_D' AND `del_flag` = 0);
  298. -- 充值审批流程(配置)
  299. INSERT INTO `sys_menu` (
  300. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  301. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  302. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  303. )
  304. SELECT
  305. 'PL_VEH_RECHARGE_WF', '充值审批流程', 'PL_GROUP_VEHICLE', 'C',
  306. 'vehicle-recharge-workflow', 'pl/vehicle-recharge-workflow/index',
  307. 'pl:vehicle-recharge-workflow:list', 1, '1', '1', 'shanxia2.0', 4, NULL,
  308. 'system', '', NOW(), NULL, NOW(), 0
  309. FROM DUAL
  310. WHERE NOT EXISTS (
  311. SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_VEH_RECHARGE_WF' AND `del_flag` = 0
  312. );
  313. UPDATE `sys_menu`
  314. SET `menu_name` = '充值审批流程',
  315. `path` = 'vehicle-recharge-workflow',
  316. `component` = 'pl/vehicle-recharge-workflow/index',
  317. `perms` = 'pl:vehicle-recharge-workflow:list',
  318. `order_num` = 4,
  319. `visible` = '1',
  320. `status` = '1',
  321. `update_time` = NOW()
  322. WHERE `id` = 'PL_VEH_RECHARGE_WF' AND `del_flag` = 0;
  323. INSERT INTO `sys_menu` (
  324. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  325. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  326. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  327. )
  328. SELECT 'PL_VRWF_Q', '查询', 'PL_VEH_RECHARGE_WF', 'F', '', '',
  329. 'pl:vehicle-recharge-workflow:query', 1, '1', '1', 'shanxia2.0', 1, NULL,
  330. 'system', '', NOW(), NULL, NOW(), 0
  331. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_VRWF_Q' AND `del_flag` = 0);
  332. INSERT INTO `sys_menu` (
  333. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  334. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  335. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  336. )
  337. SELECT 'PL_VRWF_E', '编辑', 'PL_VEH_RECHARGE_WF', 'F', '', '',
  338. 'pl:vehicle-recharge-workflow:edit', 1, '1', '1', 'shanxia2.0', 2, NULL,
  339. 'system', '', NOW(), NULL, NOW(), 0
  340. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_VRWF_E' AND `del_flag` = 0);
  341. INSERT INTO `sys_menu` (
  342. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  343. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  344. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  345. )
  346. SELECT 'PL_VRWF_S', '保存', 'PL_VEH_RECHARGE_WF', 'F', '', '',
  347. 'pl:vehicle-recharge-workflow:save', 1, '1', '1', 'shanxia2.0', 3, NULL,
  348. 'system', '', NOW(), NULL, NOW(), 0
  349. FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_VRWF_S' AND `del_flag` = 0);
  350. -- 角色授权:已拥有充值申请(C 菜单或查询按钮)的角色同步获得新菜单
  351. INSERT INTO `sys_role_menu` (
  352. `id`, `role_id`, `menu_id`, `tenant_no`, `order_num`, `remark`,
  353. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  354. )
  355. SELECT
  356. MD5(CONCAT(rm.role_id, '|', m.menu_id, '|pl-veh-recharge-wf|v1')),
  357. rm.role_id,
  358. m.menu_id,
  359. IFNULL(NULLIF(rm.tenant_no, ''), 'shanxia2.0'),
  360. 0,
  361. '充值审批改造:同步授权',
  362. 'system',
  363. '',
  364. NOW(),
  365. NULL,
  366. NOW(),
  367. 0
  368. FROM (
  369. SELECT DISTINCT `role_id`, `tenant_no`
  370. FROM `sys_role_menu`
  371. WHERE `menu_id` IN ('PL_VEH_RECHARGE_APPLY', 'PL_VRA_Q')
  372. AND `del_flag` = 0
  373. ) rm
  374. JOIN (
  375. SELECT 'PL_VEH_RECHARGE_APPROVAL' AS menu_id UNION ALL
  376. SELECT 'PL_VRAP_Q' UNION ALL
  377. SELECT 'PL_VRAP_A' UNION ALL
  378. SELECT 'PL_VRAP_J' UNION ALL
  379. SELECT 'PL_VRAP_D' UNION ALL
  380. SELECT 'PL_VEH_RECHARGE_WF' UNION ALL
  381. SELECT 'PL_VRWF_Q' UNION ALL
  382. SELECT 'PL_VRWF_E' UNION ALL
  383. SELECT 'PL_VRWF_S'
  384. ) m
  385. WHERE NOT EXISTS (
  386. SELECT 1 FROM `sys_role_menu` x
  387. WHERE x.role_id = rm.role_id AND x.menu_id = m.menu_id AND x.del_flag = 0
  388. );
  389. -- =============================================================================
  390. -- 7) 存量:pending 且无发放记录 → 审批中(落在财务发放节点)
  391. -- =============================================================================
  392. UPDATE `pl_vehicle_recharge_apply` a
  393. LEFT JOIN `pl_vehicle_recharge_record` r
  394. ON r.apply_id = a.id AND r.del_flag = 0
  395. SET a.status = 'in_approval',
  396. a.wf_id = 'PL_WF_VEHICLE_RECHARGE',
  397. a.current_node = 'PL_WR_NODE_FIN',
  398. a.approval_round = 1,
  399. a.update_time = NOW()
  400. WHERE a.del_flag = 0
  401. AND a.status = 'pending'
  402. AND r.id IS NULL;