Commit 9512dcf812f22a582ff731572e5173d50d90631b

Authored by YunaiV
1 parent e380bc34

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

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 { @@ -218,6 +218,7 @@ public class BpmSimpleModelNodeVO {
218 218
219 @Schema(description = "延迟时间类型", example = "1") 219 @Schema(description = "延迟时间类型", example = "1")
220 @NotNull(message = "延迟时间类型不能为空") 220 @NotNull(message = "延迟时间类型不能为空")
  221 + @InEnum(BpmDelayTimerType.class)
221 private Integer delayType; 222 private Integer delayType;
222 223
223 @Schema(description = "延迟时间表达式", example = "PT1H,2025-01-01T00:00:00") 224 @Schema(description = "延迟时间表达式", example = "PT1H,2025-01-01T00:00:00")
@@ -225,5 +226,4 @@ public class BpmSimpleModelNodeVO { @@ -225,5 +226,4 @@ public class BpmSimpleModelNodeVO {
225 private String delayTime; 226 private String delayTime;
226 } 227 }
227 228
228 - // TODO @芋艿:条件;建议可以固化的一些选项;然后有个表达式兜底;要支持  
229 } 229 }
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 { @@ -100,15 +100,14 @@ public class BpmTaskEventListener extends AbstractFlowableEngineEventListener {
100 BpmBoundaryEventType bpmTimerBoundaryEventType = BpmBoundaryEventType.typeOf(NumberUtils.parseInt(boundaryEventType)); 100 BpmBoundaryEventType bpmTimerBoundaryEventType = BpmBoundaryEventType.typeOf(NumberUtils.parseInt(boundaryEventType));
101 101
102 // 2. 处理超时 102 // 2. 处理超时
103 - // 2.1 用户任务超时处理  
104 if (ObjectUtil.equal(bpmTimerBoundaryEventType, BpmBoundaryEventType.USER_TASK_TIMEOUT)) { 103 if (ObjectUtil.equal(bpmTimerBoundaryEventType, BpmBoundaryEventType.USER_TASK_TIMEOUT)) {
  104 + // 2.1 用户任务超时处理
105 String timeoutHandlerType = BpmnModelUtils.parseBoundaryEventExtensionElement(boundaryEvent, 105 String timeoutHandlerType = BpmnModelUtils.parseBoundaryEventExtensionElement(boundaryEvent,
106 BpmnModelConstants.USER_TASK_TIMEOUT_HANDLER_TYPE); 106 BpmnModelConstants.USER_TASK_TIMEOUT_HANDLER_TYPE);
107 String taskKey = boundaryEvent.getAttachedToRefId(); 107 String taskKey = boundaryEvent.getAttachedToRefId();
108 taskService.processTaskTimeout(event.getProcessInstanceId(), taskKey, NumberUtils.parseInt(timeoutHandlerType)); 108 taskService.processTaskTimeout(event.getProcessInstanceId(), taskKey, NumberUtils.parseInt(timeoutHandlerType));
109 - }  
110 - // 2.2 触发器超时处理  
111 - if (ObjectUtil.equal(bpmTimerBoundaryEventType, BpmBoundaryEventType.DELAY_TIMER_TIMEOUT)) { 109 + // 2.2 触发器超时处理
  110 + } else if (ObjectUtil.equal(bpmTimerBoundaryEventType, BpmBoundaryEventType.DELAY_TIMER_TIMEOUT)) {
112 String taskKey = boundaryEvent.getAttachedToRefId(); 111 String taskKey = boundaryEvent.getAttachedToRefId();
113 taskService.processDelayTimerTimeout(event.getProcessInstanceId(), taskKey); 112 taskService.processDelayTimerTimeout(event.getProcessInstanceId(), taskKey);
114 } 113 }
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; @@ -5,6 +5,7 @@ import cn.hutool.extra.spring.SpringUtil;
5 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; 5 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
6 import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; 6 import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
7 import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants; 7 import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants;
  8 +import lombok.SneakyThrows;
8 import org.flowable.common.engine.api.delegate.Expression; 9 import org.flowable.common.engine.api.delegate.Expression;
9 import org.flowable.common.engine.api.variable.VariableContainer; 10 import org.flowable.common.engine.api.variable.VariableContainer;
10 import org.flowable.common.engine.impl.el.ExpressionManager; 11 import org.flowable.common.engine.impl.el.ExpressionManager;
@@ -67,6 +68,17 @@ public class FlowableUtils { @@ -67,6 +68,17 @@ public class FlowableUtils {
67 } 68 }
68 } 69 }
69 70
  71 + @SneakyThrows
  72 + public static <V> V execute(String tenantIdStr, Callable<V> callable) {
  73 + if (ObjectUtil.isEmpty(tenantIdStr)
  74 + || Objects.equals(tenantIdStr, ProcessEngineConfiguration.NO_TENANT_ID)) {
  75 + return callable.call();
  76 + } else {
  77 + Long tenantId = Long.valueOf(tenantIdStr);
  78 + return TenantUtils.execute(tenantId, callable);
  79 + }
  80 + }
  81 +
70 // ========== Execution 相关的工具方法 ========== 82 // ========== Execution 相关的工具方法 ==========
71 83
72 /** 84 /**
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 { @@ -282,4 +282,5 @@ public interface BpmTaskService {
282 * @param taskDefineKey 任务 Key 282 * @param taskDefineKey 任务 Key
283 */ 283 */
284 void processDelayTimerTimeout(String processInstanceId, String taskDefineKey); 284 void processDelayTimerTimeout(String processInstanceId, String taskDefineKey);
  285 +
285 } 286 }