From 6c79770796823339150020faee861b8944584f50 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Fri, 29 Aug 2025 10:35:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-4418)=20-=20=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=9E=9A=E4=B8=BE=E8=BD=AC=20Unknown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/InitiatorSpecifiedRangeEnum.java | 22 ++++++++++- .../common/enums/ModelBizTypeEnum.java | 28 ++++++++++---- .../axzo/workflow/common/enums/OrderEnum.java | 22 ++++++++++- .../common/enums/PrintFieldCategoryEnum.java | 23 ++++++++++- .../enums/SignApproverOrgLimitEnum.java | 38 ++++++++++--------- .../enums/SignApproverRoleLimitEnum.java | 26 ++++++++++--- .../common/enums/TimeQueryDirection.java | 20 ++++++++++ .../workflow/common/enums/VarTypeEnum.java | 38 +++++++++++++++---- .../workflow/common/enums/WorkspaceType.java | 21 +++++++++- .../server/controller/web/TestController.java | 5 ++- .../StarterFeignClientConfiguration.java | 1 + ...orkflowEngineStarterAutoConfiguration.java | 8 ++++ 12 files changed, 206 insertions(+), 46 deletions(-) diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/InitiatorSpecifiedRangeEnum.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/InitiatorSpecifiedRangeEnum.java index 52997572b..6154f4e85 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/InitiatorSpecifiedRangeEnum.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/InitiatorSpecifiedRangeEnum.java @@ -1,16 +1,26 @@ package cn.axzo.workflow.common.enums; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +import java.util.Arrays; + /** * 新版配置下的发起人自选的范围限定枚举 * * @author wangli * @since 2025-08-13 15:13 */ +@Getter public enum InitiatorSpecifiedRangeEnum { self_and_children_in_project("self_and_children_in_project", "项目内本组织及其下属组织所有成员"), self_in_project("self_in_project", "项目内本组织所有成员"), in_project("in_project", "项目内所有成员"), in_ent("in_ent", "企业内所有成员"), + @JsonEnumDefaultValue + unknown("unknown", "未知"), ; private final String type; private final String desc; @@ -20,11 +30,19 @@ public enum InitiatorSpecifiedRangeEnum { this.desc = desc; } + @JsonValue public String getType() { return type; } - public String getDesc() { - return desc; + @JsonCreator + public static InitiatorSpecifiedRangeEnum fromValue(String value) { + if (value == null) { + return unknown; + } + return Arrays.stream(values()) + .filter(e -> e.getType().equalsIgnoreCase(value)) + .findFirst() + .orElse(unknown); } } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/ModelBizTypeEnum.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/ModelBizTypeEnum.java index a4d5c1bee..29960e118 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/ModelBizTypeEnum.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/ModelBizTypeEnum.java @@ -1,7 +1,11 @@ package cn.axzo.workflow.common.enums; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + import java.util.Arrays; -import java.util.Objects; /** * 模型业务类型枚举 @@ -9,10 +13,13 @@ import java.util.Objects; * @author wangli * @since 2025-03-26 11:49 */ +@Getter public enum ModelBizTypeEnum { SIGN("SIGN", "签署业务"), FLOWABLE("FLOWABLE", "审批业务"), + @JsonEnumDefaultValue + UNKNOWN("UNKNOWN", "未知"), ; private final String type; private final String desc; @@ -22,18 +29,23 @@ public enum ModelBizTypeEnum { this.desc = desc; } + @JsonValue public String getType() { return type; } - public String getDesc() { - return desc; + public static ModelBizTypeEnum valueOfType(String type) { + return fromValue(type); } - public static ModelBizTypeEnum valueOfType(String type) { - return Arrays.stream(ModelBizTypeEnum.values()) - .filter(i -> Objects.equals(i.getType(), type)) - .findAny() - .orElse(null); + @JsonCreator + public static ModelBizTypeEnum fromValue(String value) { + if (value == null) { + return UNKNOWN; + } + return Arrays.stream(values()) + .filter(e -> e.getType().equalsIgnoreCase(value)) + .findFirst() + .orElse(UNKNOWN); } } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/OrderEnum.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/OrderEnum.java index 805b79ded..15abf1539 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/OrderEnum.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/OrderEnum.java @@ -1,12 +1,32 @@ package cn.axzo.workflow.common.enums; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; +import lombok.Getter; + +import java.util.Arrays; + /** * 顺序操作枚举 * * @author wangli * @since 2025-03-31 16:35 */ +@Getter public enum OrderEnum { - UP, DOWN + UP, DOWN, + @JsonEnumDefaultValue + UNKNOWN; + + @JsonCreator + public static OrderEnum fromValue(String value) { + if (value == null) { + return UNKNOWN; + } + return Arrays.stream(values()) + .filter(e -> e.name().equalsIgnoreCase(value)) + .findFirst() + .orElse(UNKNOWN); + } } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/PrintFieldCategoryEnum.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/PrintFieldCategoryEnum.java index 1a29b3e16..72afecfb2 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/PrintFieldCategoryEnum.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/PrintFieldCategoryEnum.java @@ -1,11 +1,18 @@ package cn.axzo.workflow.common.enums; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; +import lombok.Getter; + +import java.util.Arrays; + /** * 打印字段的类型枚举 * * @author wangli * @since 2025-01-16 18:19 */ +@Getter public enum PrintFieldCategoryEnum { // 表单变量 @@ -15,5 +22,19 @@ public enum PrintFieldCategoryEnum { // 电子签名变量 signature, // 签署业务自定义变量 - sign + sign, + @JsonEnumDefaultValue + unknown, + ; + + @JsonCreator + public static PrintFieldCategoryEnum fromValue(String value) { + if (value == null) { + return unknown; + } + return Arrays.stream(values()) + .filter(e -> e.name().equalsIgnoreCase(value)) + .findFirst() + .orElse(unknown); + } } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/SignApproverOrgLimitEnum.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/SignApproverOrgLimitEnum.java index 4037b4f83..b20375808 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/SignApproverOrgLimitEnum.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/SignApproverOrgLimitEnum.java @@ -1,7 +1,11 @@ package cn.axzo.workflow.common.enums; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + import java.util.Arrays; -import java.util.Objects; /** * 签署确认节点的审批人层级范围限制 @@ -9,6 +13,7 @@ import java.util.Objects; * @author wangli * @since 2025-03-26 14:30 */ +@Getter public enum SignApproverOrgLimitEnum { LV_0("LV_0", "当前组织", 0), LV_1("LV_1", "上1级组织", 1), @@ -18,13 +23,11 @@ public enum SignApproverOrgLimitEnum { LV_5("LV_5", "上5级组织", 5), LV_ALL("LV_ALL", "所有组织", -1), LV_TOP("LV_TOP", "顶层组织", Integer.MAX_VALUE), - UNKNOWN("UNKNOWN", "未知层级", null) - ; + @JsonEnumDefaultValue + UNKNOWN("UNKNOWN", "未知层级", null); private final String type; - private final String desc; - private final Integer code; SignApproverOrgLimitEnum(String type, String desc, Integer code) { @@ -33,22 +36,23 @@ public enum SignApproverOrgLimitEnum { this.code = code; } + @JsonValue public String getType() { return type; } - public String getDesc() { - return desc; - } - - public Integer getCode() { - return code; - } - public static SignApproverOrgLimitEnum valueOfType(String type) { - return Arrays.stream(SignApproverOrgLimitEnum.values()) - .filter(i -> Objects.equals(i.getType(), type)) - .findAny() - .orElse(null); + return fromValue(type); + } + + @JsonCreator + public static SignApproverOrgLimitEnum fromValue(String value) { + if (value == null) { + return UNKNOWN; + } + return Arrays.stream(values()) + .filter(e -> e.getType().equalsIgnoreCase(value)) + .findFirst() + .orElse(UNKNOWN); } } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/SignApproverRoleLimitEnum.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/SignApproverRoleLimitEnum.java index 2323fda54..895132917 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/SignApproverRoleLimitEnum.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/SignApproverRoleLimitEnum.java @@ -1,5 +1,10 @@ package cn.axzo.workflow.common.enums; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + import java.util.Arrays; import java.util.Objects; @@ -9,12 +14,13 @@ import java.util.Objects; * @author wangli * @since 2025-03-26 14:30 */ +@Getter public enum SignApproverRoleLimitEnum { LEADER("LEADER", "负责人"), - ; + @JsonEnumDefaultValue + UNKNOWN("UNKNOWN", "未知"); private final String type; - private final String desc; SignApproverRoleLimitEnum(String type, String desc) { @@ -22,18 +28,26 @@ public enum SignApproverRoleLimitEnum { this.desc = desc; } + @JsonValue public String getType() { return type; } - public String getDesc() { - return desc; - } - public static SignApproverRoleLimitEnum valueOfType(String type) { return Arrays.stream(SignApproverRoleLimitEnum.values()) .filter(i -> Objects.equals(i.getType(), type)) .findAny() .orElse(null); } + + @JsonCreator + public static SignApproverRoleLimitEnum fromValue(String value) { + if (value == null) { + return UNKNOWN; + } + return Arrays.stream(values()) + .filter(e -> e.getType().equalsIgnoreCase(value)) + .findFirst() + .orElse(UNKNOWN); + } } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/TimeQueryDirection.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/TimeQueryDirection.java index 114403b07..0af9c934f 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/TimeQueryDirection.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/TimeQueryDirection.java @@ -1,5 +1,11 @@ package cn.axzo.workflow.common.enums; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; +import lombok.Getter; + +import java.util.Arrays; + /** * 时间查询方向 *

@@ -9,8 +15,22 @@ package cn.axzo.workflow.common.enums; * @author wangli * @since 2024-09-29 09:56 */ +@Getter public enum TimeQueryDirection { BEFORE, AFTER, + @JsonEnumDefaultValue + UNKNOWN, ; + + @JsonCreator + public static TimeQueryDirection fromValue(String value) { + if (value == null) { + return UNKNOWN; + } + return Arrays.stream(values()) + .filter(e -> e.name().equalsIgnoreCase(value)) + .findFirst() + .orElse(UNKNOWN); + } } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/VarTypeEnum.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/VarTypeEnum.java index bbfd8227f..1929efad5 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/VarTypeEnum.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/VarTypeEnum.java @@ -1,21 +1,45 @@ package cn.axzo.workflow.common.enums; -import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; +import com.fasterxml.jackson.annotation.JsonValue; import lombok.Getter; -import lombok.NoArgsConstructor; + +import java.util.Arrays; /** * 模版上变量字段类型 */ -@AllArgsConstructor -@NoArgsConstructor @Getter public enum VarTypeEnum { TEXT("text", "文本"), + PICTURE("picture", "图片"), + @JsonEnumDefaultValue + UNKNOWN("unknown", "未知"), + ; - PICTURE("picture", "图片"); + private final String type; + private final String desc; - private String type; - private String desc; + VarTypeEnum(String type, String desc) { + this.type = type; + this.desc = desc; + } + + @JsonValue + public String getType() { + return type; + } + + @JsonCreator + public static VarTypeEnum fromValue(String value) { + if (value == null) { + return UNKNOWN; + } + return Arrays.stream(values()) + .filter(e -> e.getType().equalsIgnoreCase(value)) + .findFirst() + .orElse(UNKNOWN); + } } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/WorkspaceType.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/WorkspaceType.java index da845ee8d..656f6dd2a 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/WorkspaceType.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/WorkspaceType.java @@ -1,6 +1,7 @@ package cn.axzo.workflow.common.enums; -import lombok.AllArgsConstructor; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; import lombok.Getter; import java.util.Arrays; @@ -10,7 +11,6 @@ import java.util.Arrays; * @date 2023/11/21 */ @Getter -@AllArgsConstructor public enum WorkspaceType { /** @@ -21,15 +21,32 @@ public enum WorkspaceType { PROJECT(2, "项目"), GOVERNMENT(3, "政务监管平台"), OMS(6, "oms工作台"), + @JsonEnumDefaultValue UN_KNOW(0, "未知"), ; private final Integer code; private final String desc; + WorkspaceType(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + public static WorkspaceType getType(Integer code) { return Arrays.stream(values()).filter(it -> it.getCode().equals(code)) .findFirst() .orElse(null); } + + @JsonCreator + public static WorkspaceType fromValue(String value) { + if (value == null) { + return UN_KNOW; + } + return Arrays.stream(values()) + .filter(e -> e.getCode().toString().equalsIgnoreCase(value)) + .findFirst() + .orElse(UN_KNOW); + } } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java index 9ddb87055..e363a54e6 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/TestController.java @@ -20,6 +20,7 @@ import cn.axzo.workflow.server.common.util.ShellUtil; import cn.axzo.workflow.server.xxljob.EsIndexOperationJobHandler; import cn.axzo.workflow.server.xxljob.SpecifyProcessInstanceSyncEsJobHandler; import cn.azxo.framework.common.model.CommonResponse; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.FlowElement; @@ -290,7 +291,7 @@ public class TestController { }*/ @GetMapping("log") - public String log(@RequestParam String keyword, @RequestParam(required = false) Date date, @RequestParam(required = false) String grepKeyword) throws Exception { + public String log(@RequestParam String keyword, @RequestParam(required = false) String date, @RequestParam(required = false) String grepKeyword) throws Exception { if (!StringUtils.hasText(keyword)) { return "命令不能为空"; } @@ -298,7 +299,7 @@ public class TestController { if (StringUtils.hasText(s)) { return s; } - return ShellUtil.grepLog(profile, keyword, Objects.isNull(date) ? new Date() : date, grepKeyword); + return ShellUtil.grepLog(profile, keyword, StringUtils.hasText(date) ? DateUtil.parseDate(date) : new Date(), grepKeyword); } @GetMapping("form") diff --git a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java index 1919480a4..530c10f03 100644 --- a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java +++ b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/StarterFeignClientConfiguration.java @@ -30,4 +30,5 @@ public class StarterFeignClientConfiguration { public static class WorkflowManageServiceClient { } + } diff --git a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/WorkflowEngineStarterAutoConfiguration.java b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/WorkflowEngineStarterAutoConfiguration.java index f7bd92785..771490d08 100644 --- a/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/WorkflowEngineStarterAutoConfiguration.java +++ b/workflow-engine-spring-boot-starter/src/main/java/cn/axzo/workflow/starter/WorkflowEngineStarterAutoConfiguration.java @@ -27,6 +27,7 @@ import cn.axzo.workflow.starter.mq.check.ImplementationReadyChecker; import cn.axzo.workflow.starter.mq.monitor.WorkflowEngineStarterDefaultMQMonitor; import cn.axzo.workflow.starter.mq.monitor.console.WorkflowEngineStarterMQMonitorController; import cn.axzo.workflow.starter.selector.MetaFeignClientEnableSelector; +import com.fasterxml.jackson.databind.DeserializationFeature; import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.common.MixAll; @@ -37,7 +38,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -161,4 +164,9 @@ public class WorkflowEngineStarterAutoConfiguration { return new ImplementationReadyChecker(); } + @Bean + @ConditionalOnMissingBean(name = "enumUnknownCustomizer") + public Jackson2ObjectMapperBuilderCustomizer enumUnKnowCustomizer() { + return builder -> builder.featuresToEnable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE); + } }