diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/GetSpecifiedVersionBeanUtils.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/MultiVersionBeanUtils.java similarity index 51% rename from workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/GetSpecifiedVersionBeanUtils.java rename to workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/MultiVersionBeanUtils.java index e2c938430..69e0de189 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/GetSpecifiedVersionBeanUtils.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/MultiVersionBeanUtils.java @@ -10,17 +10,36 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -public class GetSpecifiedVersionBeanUtils { - public static T getSpecialVersionBean(Class clazz, String version) { +import static cn.axzo.workflow.core.version.Versioned.UNKNOWN_VERSION; + +public class MultiVersionBeanUtils { + + /** + * 获取支持指定版本的bean + * + * @param clazz 类型 + * @param version 版本号 + * @param + * @return + */ + public static T getSpecifiedVersionBean(Class clazz, String version) { Map beans = SpringContentUtils.getBeansOfType(clazz); if (CollectionUtils.isEmpty(beans)) { throw new NullPointerException("no beans of type " + clazz.getName()); } if (StringUtils.isEmpty(version)) { - //todo 版本为空,需要一个默认处理类?? + T t = beans.values().stream().filter(bean -> bean.getVersion() == null).findFirst().orElse(null); + if (t != null) { + return t; + } + throw new IllegalArgumentException("no default version bean found for version: " + version); } //根据版本号排序 - List sortedList = beans.values().stream().sorted().collect(Collectors.toList()); + List sortedList = beans.values().stream().sorted((o1, o2) -> { + DefaultArtifactVersion version1 = o1.getVersion() == null ? UNKNOWN_VERSION : o1.getVersion(); + DefaultArtifactVersion version2 = o2.getVersion() == null ? UNKNOWN_VERSION : o2.getVersion(); + return version1.compareTo(version2); + }).collect(Collectors.toList()); DefaultArtifactVersion targetVersion = new DefaultArtifactVersion(version); for (int i = sortedList.size() - 1; i >= 0; i--) { int flag = sortedList.get(i).getVersion().compareTo(targetVersion); diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/Versioned.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/Versioned.java index be73a4aa6..b024b21d3 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/Versioned.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/Versioned.java @@ -5,4 +5,6 @@ import org.apache.maven.artifact.versioning.DefaultArtifactVersion; public interface Versioned { DefaultArtifactVersion getVersion(); + + DefaultArtifactVersion UNKNOWN_VERSION = new DefaultArtifactVersion("0.0.0"); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/AutoOperatorEvent_101_Listener.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/AutoOperatorEvent_101_Listener.java index 91afe0f68..0396802a1 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/AutoOperatorEvent_101_Listener.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/AutoOperatorEvent_101_Listener.java @@ -11,8 +11,8 @@ import cn.axzo.workflow.core.engine.operation.DeleteProcessInstanceOperation; import cn.axzo.workflow.core.listener.AbstractBpmnEventListener; import cn.axzo.workflow.core.listener.BpmnTaskEventListener; import cn.axzo.workflow.core.service.ExtAxHiTaskInstService; -import cn.axzo.workflow.core.version.GetSpecifiedVersionBeanUtils; -import cn.axzo.workflow.server.controller.listener.task.service.CheckApproveService; +import cn.axzo.workflow.core.version.MultiVersionBeanUtils; +import cn.axzo.workflow.server.controller.listener.task.service.CheckApproverService; import cn.hutool.json.JSONUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -92,8 +92,8 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener