Explorar el Código

【代码优化】工作流:延迟器的支持

YunaiV hace 7 meses
padre
commit
9512dcf812

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java

@@ -218,6 +218,7 @@ public class BpmSimpleModelNodeVO {
 
         @Schema(description = "延迟时间类型", example = "1")
         @NotNull(message = "延迟时间类型不能为空")
+        @InEnum(BpmDelayTimerType.class)
         private Integer delayType;
 
         @Schema(description = "延迟时间表达式", example = "PT1H,2025-01-01T00:00:00")
@@ -225,5 +226,4 @@ public class BpmSimpleModelNodeVO {
         private String delayTime;
     }
 
-    // TODO @芋艿:条件;建议可以固化的一些选项;然后有个表达式兜底;要支持
 }

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

@@ -100,15 +100,14 @@ public class BpmTaskEventListener extends AbstractFlowableEngineEventListener {
         BpmBoundaryEventType bpmTimerBoundaryEventType = BpmBoundaryEventType.typeOf(NumberUtils.parseInt(boundaryEventType));
 
         // 2. 处理超时
-        // 2.1 用户任务超时处理
         if (ObjectUtil.equal(bpmTimerBoundaryEventType, BpmBoundaryEventType.USER_TASK_TIMEOUT)) {
+            // 2.1 用户任务超时处理
             String timeoutHandlerType = BpmnModelUtils.parseBoundaryEventExtensionElement(boundaryEvent,
                     BpmnModelConstants.USER_TASK_TIMEOUT_HANDLER_TYPE);
             String taskKey = boundaryEvent.getAttachedToRefId();
             taskService.processTaskTimeout(event.getProcessInstanceId(), taskKey, NumberUtils.parseInt(timeoutHandlerType));
-        }
-        // 2.2 触发器超时处理
-        if (ObjectUtil.equal(bpmTimerBoundaryEventType, BpmBoundaryEventType.DELAY_TIMER_TIMEOUT)) {
+            // 2.2 触发器超时处理
+        } else if (ObjectUtil.equal(bpmTimerBoundaryEventType, BpmBoundaryEventType.DELAY_TIMER_TIMEOUT)) {
             String taskKey = boundaryEvent.getAttachedToRefId();
             taskService.processDelayTimerTimeout(event.getProcessInstanceId(), taskKey);
         }

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

@@ -5,6 +5,7 @@ import cn.hutool.extra.spring.SpringUtil;
 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
 import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
 import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants;
+import lombok.SneakyThrows;
 import org.flowable.common.engine.api.delegate.Expression;
 import org.flowable.common.engine.api.variable.VariableContainer;
 import org.flowable.common.engine.impl.el.ExpressionManager;
@@ -67,6 +68,17 @@ public class FlowableUtils {
         }
     }
 
+    @SneakyThrows
+    public static <V> V execute(String tenantIdStr, Callable<V> callable) {
+        if (ObjectUtil.isEmpty(tenantIdStr)
+                || Objects.equals(tenantIdStr, ProcessEngineConfiguration.NO_TENANT_ID)) {
+            return callable.call();
+        } else {
+            Long tenantId = Long.valueOf(tenantIdStr);
+            return TenantUtils.execute(tenantId, callable);
+        }
+    }
+
     // ========== Execution 相关的工具方法 ==========
 
     /**

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

@@ -282,4 +282,5 @@ public interface BpmTaskService {
      * @param taskDefineKey     任务 Key
      */
     void processDelayTimerTimeout(String processInstanceId, String taskDefineKey);
+
 }