diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/ExclusiveGatewayForecasting.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/ExclusiveGatewayForecasting.java index ae29b885d..863dc38e5 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/ExclusiveGatewayForecasting.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/ExclusiveGatewayForecasting.java @@ -3,11 +3,8 @@ package cn.axzo.workflow.core.service.support.forecast.impl; import cn.axzo.workflow.core.service.support.forecast.AbstractForecast; import org.flowable.bpmn.model.ExclusiveGateway; import org.flowable.bpmn.model.FlowElement; -import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; -import java.util.Collections; import java.util.List; /** @@ -28,15 +25,4 @@ public class ExclusiveGatewayForecasting extends AbstractForecast calcRealOutgoingNodes(List flowElements, - ProcessInstance instance) { - if (CollectionUtils.isEmpty(flowElements)) { - return Collections.emptyList(); - } - if (flowElements.size() == 1) { - return flowElements; - } - return super.calcRealOutgoingNodes(flowElements, instance); - } } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/ReceiveTaskForecasting.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/ReceiveTaskForecasting.java new file mode 100644 index 000000000..61fef5ef2 --- /dev/null +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/ReceiveTaskForecasting.java @@ -0,0 +1,29 @@ +package cn.axzo.workflow.core.service.support.forecast.impl; + +import cn.axzo.workflow.core.service.support.forecast.AbstractForecast; +import com.google.common.collect.Lists; +import org.flowable.bpmn.model.FlowElement; +import org.flowable.bpmn.model.ReceiveTask; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 接收任务 + * + * @author wangli + * @since 2023/11/28 15:07 + */ +@Component +public class ReceiveTaskForecasting extends AbstractForecast { + @Override + public Boolean support(FlowElement flowElement) { + return flowElement instanceof ReceiveTask; + } + + @Override + protected List getOutgoing(ReceiveTask flowElement) { + return Lists.newArrayList(flowElement.getOutgoingFlows()); + } + +} diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/SequenceFlowForecasting.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/SequenceFlowForecasting.java index b48a026a6..07e50618e 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/SequenceFlowForecasting.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/SequenceFlowForecasting.java @@ -11,6 +11,7 @@ import org.springframework.util.StringUtils; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -49,7 +50,7 @@ public class SequenceFlowForecasting extends AbstractForecast { // 如果 conditionExpression 为空, 则认为是默认流 List defaultFlows = - flowElements.stream().filter(i -> !StringUtils.hasLength(i.getConditionExpression())).collect(Collectors.toList()); + flowElements.stream().filter(i -> Objects.isNull(i.getConditionExpression())).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(defaultFlows) && defaultFlows.size() == 1) { return Lists.newArrayList(defaultFlows.get(0)); } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/ServiceTaskForecasting.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/ServiceTaskForecasting.java new file mode 100644 index 000000000..662af7c01 --- /dev/null +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/ServiceTaskForecasting.java @@ -0,0 +1,28 @@ +package cn.axzo.workflow.core.service.support.forecast.impl; + +import cn.axzo.workflow.core.service.support.forecast.AbstractForecast; +import org.flowable.bpmn.model.FlowElement; +import org.flowable.bpmn.model.ServiceTask; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 服务任务 [抄送节点使用的是该 task 类型] + * + * @author wangli + * @since 2023/11/28 15:16 + */ +@Component +public class ServiceTaskForecasting extends AbstractForecast { + @Override + public Boolean support(FlowElement flowElement) { + return flowElement instanceof ServiceTask; + } + + @Override + protected List getOutgoing(ServiceTask flowElement) { + return flowElement.getOutgoingFlows(); + } + +} diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/UserTaskForecasting.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/UserTaskForecasting.java index a4697838c..363da14bb 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/UserTaskForecasting.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/forecast/impl/UserTaskForecasting.java @@ -3,11 +3,8 @@ package cn.axzo.workflow.core.service.support.forecast.impl; import cn.axzo.workflow.core.service.support.forecast.AbstractForecast; import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.UserTask; -import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; -import java.util.Collections; import java.util.List; /** @@ -28,14 +25,4 @@ public class UserTaskForecasting extends AbstractForecast { return flowElement.getOutgoingFlows(); } - @Override - public List calcRealOutgoingNodes(List flowElements, ProcessInstance instance) { - if (CollectionUtils.isEmpty(flowElements)) { - return Collections.emptyList(); - } - if (flowElements.size() == 1) { - return flowElements; - } - return super.calcRealOutgoingNodes(flowElements, instance); - } }