diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java index a894ad93..8db38b7b 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java @@ -9,7 +9,7 @@ import cn.axzo.msg.center.message.service.todo.manage.TodoManager; import cn.axzo.msg.center.service.enums.TerminalTypeEnum; import cn.axzo.msg.center.service.enums.TodoQueryType; import cn.axzo.msg.center.service.enums.TodoType; -import cn.axzo.msg.center.service.pending.ClientRequest; +import cn.axzo.msg.center.service.pending.ModelVersion; import cn.axzo.msg.center.service.pending.client.PendingMessageClient; import cn.axzo.msg.center.service.pending.request.CompletePendingBySubCodeRequest; import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest; @@ -141,7 +141,7 @@ public class PendingMessageNewController implements PendingMessageClient { @Override public CommonResponse query(PendingMessageQueryRequest request) { log.info("query, request={}", JSON.toJSONString(request)); - request.setModelVersion(ClientRequest.ALL_VERSION); + request.setModelVersion(ModelVersion.ALL); PendingMessageResponse resp = todoSimpleQueryService.query(request); if (resp != null) resp.setQueryType(request.getQueryType()); @@ -161,7 +161,7 @@ public class PendingMessageNewController implements PendingMessageClient { @Override public CommonResponse detailV3(PendingMessageDetailRequestV3 request) { - request.setModelVersion(ClientRequest.ALL_VERSION); + request.setModelVersion(ModelVersion.ALL); PendingMessageResponse response = todoSimpleQueryService.getDetail(request); return CommonResponse.success(response); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRespBuilder.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRespBuilder.java index 16a5eebb..46186e55 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRespBuilder.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRespBuilder.java @@ -18,6 +18,7 @@ import cn.axzo.msg.center.service.dto.IdentityDTO; import cn.axzo.msg.center.service.enums.BizCategoryEnum; import cn.axzo.msg.center.service.enums.OrganizationTypeEnum; import cn.axzo.msg.center.service.pending.ClientRequest; +import cn.axzo.msg.center.service.pending.ModelVersion; import cn.axzo.msg.center.service.pending.response.PendingMessageResponse; import cn.axzo.msg.center.service.pending.response.PendingMessageSimpleDTO; import cn.axzo.msg.center.service.pending.response.v3.ModelV2PropsPopulator; @@ -217,26 +218,21 @@ class TodoRespBuilder { if (templateModel != null) { ParsedModelV3 parsedModel = modelV3Parser.parseModel(templateModel, adapter, adapter.getBizExtParamObj(), authParam, routerParam, request); - Integer modelVersion = request.getModelVersion(); - if (modelVersion == ClientRequest.VERSION_V2 - || modelVersion.equals(ClientRequest.ALL_VERSION)) { + ModelVersion version = ModelVersion.of(request.getModelVersion()); + if (version.is(ModelVersion.V2) || version.is(ModelVersion.ALL)) ParsedModel3Walker.walkDown(parsedModel, new ModelV2PropsPopulator(response, request)); - } - if (modelVersion != null) { - if (modelVersion.equals(ClientRequest.VERSION_V3) - || modelVersion.equals(ClientRequest.ALL_VERSION)) { - response.setModelV3(parsedModel); - response.setDisplayOnCardKeyValues(parsedModel.determineDisplayOnCardKeyValues()); - response.setCardUrlOpenStrategy(templateModel.getTemplate().getCardUrlOpenStrategy()); - ParsedModel3Walker.walkDown(parsedModel, new ParsedModel3Visitor() { - @Override - public void visitTemplateCardUrlConfig(UrlConfig urlConfig) { - ParsedCardUrl cardUrl = new ParsedCardUrl(); - cardUrl.setUrl(modelV3Parser.parseSessionUrlInfo(urlConfig, request)); - response.setCardUrl(cardUrl); - } - }); - } + if (version.is(ModelVersion.V3) || version.is(ModelVersion.ALL)) { + response.setModelV3(parsedModel); + response.setDisplayOnCardKeyValues(parsedModel.determineDisplayOnCardKeyValues()); + response.setCardUrlOpenStrategy(templateModel.getTemplate().getCardUrlOpenStrategy()); + ParsedModel3Walker.walkDown(parsedModel, new ParsedModel3Visitor() { + @Override + public void visitTemplateCardUrlConfig(UrlConfig urlConfig) { + ParsedCardUrl cardUrl = new ParsedCardUrl(); + cardUrl.setUrl(modelV3Parser.parseSessionUrlInfo(urlConfig, request)); + response.setCardUrl(cardUrl); + } + }); } } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoWorkerQueryService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoWorkerQueryService.java index 8b36d564..4d581dc3 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoWorkerQueryService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoWorkerQueryService.java @@ -11,7 +11,7 @@ import cn.axzo.msg.center.message.service.group.GroupTemplates; import cn.axzo.msg.center.service.dto.PersonDTO; import cn.axzo.msg.center.service.enums.PendingMessageStateEnum; import cn.axzo.msg.center.service.enums.TodoType; -import cn.axzo.msg.center.service.pending.ClientRequest; +import cn.axzo.msg.center.service.pending.ModelVersion; import cn.axzo.msg.center.service.pending.request.PendingMessageFixedTemplatePageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessageStatisticForWorkerRequest; @@ -82,7 +82,7 @@ public class TodoWorkerQueryService { // 只查询只有一条待处理的分类, 所以数据量不会太大, 因为分类不可能无限大 pageRequest.setPageSize(Long.MAX_VALUE); // 兼容工人端 - pageRequest.setModelVersion(ClientRequest.VERSION_V2); + pageRequest.setModelVersion(ModelVersion.V2); AnalysisPage pageResp = todoRangeQueryService.pageQuery(pageRequest); List pendingList = pageResp.getList() == null ? Collections.emptyList() diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ClientRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ClientRequest.java index 8fe90ae4..915985ec 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ClientRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ClientRequest.java @@ -8,16 +8,12 @@ import cn.axzo.msg.center.service.enums.TerminalTypeEnum; */ public interface ClientRequest { - Integer VERSION_V2 = null; - Integer VERSION_V3 = 3; - Integer ALL_VERSION = Integer.MAX_VALUE; - TerminalTypeEnum getTerminalType(); AppTerminalTypeEnum getAppTerminalType(); default Integer getModelVersion() { - return VERSION_V3; + return ModelVersion.V3.getValue(); } -} +} \ No newline at end of file diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ModelVersion.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ModelVersion.java new file mode 100644 index 00000000..7880fd31 --- /dev/null +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ModelVersion.java @@ -0,0 +1,52 @@ +package cn.axzo.msg.center.service.pending; + +import cn.axzo.framework.domain.ServiceException; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author yanglin + */ +@Getter +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public class ModelVersion { + + private static final Map VERSIONS = new ConcurrentHashMap<>(); + + public static final ModelVersion V2 = of(null); + public static final ModelVersion V3 = of(3); + public static final ModelVersion ALL = of(Integer.MAX_VALUE); + + private final Integer value; + + public static ModelVersion of(Integer version) { + // attach? + if (version != null && version > 500) + throw new ServiceException("model version is too large"); + if (version == null) version = Integer.MIN_VALUE; + return VERSIONS.computeIfAbsent(version, ModelVersion::new); + } + + public boolean is(ModelVersion version) { + return Objects.equals(this.value, version.value); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ModelVersion)) return false; + ModelVersion that = (ModelVersion) o; + return Objects.equals(value, that.value); + } + + @Override + public int hashCode() { + return Objects.hashCode(value); + } + +} \ No newline at end of file