From cf394d91200b728f110efa25c9944716ddcdb183 Mon Sep 17 00:00:00 2001 From: yangqicheng Date: Tue, 9 Jul 2024 15:50:33 +0800 Subject: [PATCH] =?UTF-8?q?REQ-2596-=E8=B0=83=E6=95=B4=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=BF=87=E5=AE=A1=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...nUtils.java => MultiVersionBeanUtils.java} | 27 ++++++++++++++++--- .../axzo/workflow/core/version/Versioned.java | 2 ++ .../task/AutoOperatorEvent_101_Listener.java | 8 +++--- ...Service.java => CheckApproverService.java} | 2 +- .../impl/CheckApproverServiceImpl.java | 8 +++--- 5 files changed, 34 insertions(+), 13 deletions(-) rename workflow-engine-core/src/main/java/cn/axzo/workflow/core/version/{GetSpecifiedVersionBeanUtils.java => MultiVersionBeanUtils.java} (51%) rename workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/service/{CheckApproveService.java => CheckApproverService.java} (88%) 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