Sfoglia il codice sorgente

【代码评审】BPM:子流程的超时

YunaiV 5 mesi fa
parent
commit
48c976cf0a

+ 1 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java

@@ -110,6 +110,7 @@ public class BpmTaskEventListener extends AbstractFlowableEngineEventListener {
         } else if (ObjectUtil.equal(bpmTimerBoundaryEventType, BpmBoundaryEventTypeEnum.DELAY_TIMER_TIMEOUT)) {
             String taskKey = boundaryEvent.getAttachedToRefId();
             taskService.triggerReceiveTask(event.getProcessInstanceId(), taskKey);
+            // 2.3 子流程超时处理
         } else if (ObjectUtil.equal(bpmTimerBoundaryEventType, BpmBoundaryEventTypeEnum.CHILD_PROCESS_TIMEOUT)) {
             String taskKey = boundaryEvent.getAttachedToRefId();
             taskService.processChildProcessTimeout(event.getProcessInstanceId(), taskKey);

+ 3 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java

@@ -416,6 +416,7 @@ public class SimpleModelUtils {
         private BoundaryEvent buildUserTaskTimeoutBoundaryEvent(UserTask userTask,
                                                                 BpmSimpleModelNodeVO.TimeoutHandler timeoutHandler) {
             // 1.1 定时器边界事件
+            // TODO @lesan:一些 BoundaryEvent timeout 的,可以做一些基础的设置么?
             BoundaryEvent boundaryEvent = new BoundaryEvent();
             boundaryEvent.setId("Event-" + IdUtil.fastUUID());
             boundaryEvent.setCancelActivity(false); // 设置关联的任务为不会被中断
@@ -723,6 +724,7 @@ public class SimpleModelUtils {
             // 2. 添加接收任务的 Timer Boundary Event
             if (node.getDelaySetting() != null) {
                 // 2.1 定时器边界事件
+                // TODO @lesan:一些 BoundaryEvent timeout 的,可以做一些基础的设置么?
                 BoundaryEvent boundaryEvent = new BoundaryEvent();
                 boundaryEvent.setId("Event-" + IdUtil.fastUUID());
                 boundaryEvent.setCancelActivity(false);
@@ -872,6 +874,7 @@ public class SimpleModelUtils {
 
             // 7. 超时设置
             if (childProcessSetting.getTimeoutSetting() != null) {
+                // TODO @lesan:一些 BoundaryEvent timeout 的,可以做一些基础的设置么?
                 BoundaryEvent boundaryEvent = new BoundaryEvent();
                 boundaryEvent.setId("Event-" + IdUtil.fastUUID());
                 boundaryEvent.setCancelActivity(false);

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java

@@ -414,7 +414,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
             // 处理每个任务的 tasks 属性
             for (HistoricActivityInstance activity : taskActivities) {
                 HistoricTaskInstance task = taskMap.get(activity.getTaskId());
-                // TODO @lesan:这里为啥 continue 哈? @芋艿:子流程的 activity 中 task 是null 下面的方法会报错
+                // TODO @lesan:这里为啥 continue 哈? @芋艿:子流程的 activity 中 task 是null 下面的方法会报错;TODO @lesan:写个注释???
                 if (task == null) {
                     continue;
                 }

+ 5 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java

@@ -276,21 +276,21 @@ public interface BpmTaskService {
      */
     void processTaskTimeout(String processInstanceId, String taskDefineKey, Integer handlerType);
 
-    // TODO @jason:改成 triggerTask。然后,“触发 ReceiveTask,让流程继续执行”,改成一些调用场景
     /**
-     * 触发 ReceiveTask,让流程继续执行
+     * 处理 ChildProcess 子流程的审批超时事件
      *
      * @param processInstanceId 流程示例编号
      * @param taskDefineKey     任务 Key
      */
-    void triggerReceiveTask(String processInstanceId, String taskDefineKey);
+    void processChildProcessTimeout(String processInstanceId, String taskDefineKey);
 
+    // TODO @jason:改成 triggerTask。然后,“触发 ReceiveTask,让流程继续执行”,改成一些调用场景
     /**
-     * 处理 子流程 审批超时事件
+     * 触发 ReceiveTask,让流程继续执行
      *
      * @param processInstanceId 流程示例编号
      * @param taskDefineKey     任务 Key
      */
-    void processChildProcessTimeout(String processInstanceId, String taskDefineKey);
+    void triggerReceiveTask(String processInstanceId, String taskDefineKey);
 
 }

+ 10 - 11
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java

@@ -1323,6 +1323,16 @@ public class BpmTaskServiceImpl implements BpmTaskService {
         }));
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void processChildProcessTimeout(String processInstanceId, String taskDefineKey) {
+        List<ActivityInstance> activityInstances = runtimeService.createActivityInstanceQuery()
+                .processInstanceId(processInstanceId)
+                .activityId(taskDefineKey).list();
+        activityInstances.forEach(activityInstance -> FlowableUtils.execute(activityInstance.getTenantId(),
+                () -> moveTaskToEnd(activityInstance.getCalledProcessInstanceId(), BpmReasonEnum.TIMEOUT_APPROVE.getReason())));
+    }
+
     @Override
     public void triggerReceiveTask(String processInstanceId, String taskDefineKey) {
         Execution execution = runtimeService.createExecutionQuery()
@@ -1340,17 +1350,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
                 () -> runtimeService.trigger(execution.getId()));
     }
 
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void processChildProcessTimeout(String processInstanceId, String taskDefineKey) {
-        List<ActivityInstance> activityInstances = runtimeService.createActivityInstanceQuery()
-                .processInstanceId(processInstanceId)
-                .activityId(taskDefineKey).list();
-        activityInstances.forEach(activityInstance -> FlowableUtils.execute(activityInstance.getTenantId(), () -> {
-            moveTaskToEnd(activityInstance.getCalledProcessInstanceId(), BpmReasonEnum.TIMEOUT_APPROVE.getReason());
-        }));
-    }
-
     /**
      * 获得自身的代理对象,解决 AOP 生效问题
      *

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmCallActivityListener.java

@@ -82,7 +82,7 @@ public class BpmCallActivityListener implements ExecutionListener {
             try {
                 FlowableUtils.setAuthenticatedUserId(Long.parseLong(formFieldValue));
             } catch (Exception e) {
-                log.error("[error][监听器:{},子流程监听器设置流程的发起人字符串转 Long 失败,字符串:{}]",
+                log.error("[notify][监听器:{},子流程监听器设置流程的发起人字符串转 Long 失败,字符串:{}]",
                         DELEGATE_EXPRESSION, formFieldValue);
                 FlowableUtils.setAuthenticatedUserId(Long.parseLong(parent.getStartUserId()));
             }