From 364a7551f3e695469cf49af65ddddb299dfefe4e Mon Sep 17 00:00:00 2001 From: luofu Date: Tue, 17 Oct 2023 16:26:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-1465):=20=E6=B6=88=E6=81=AF=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1465?goToView=1 修改: 1、消息模板列表查询接口实现 影响: 无 --- .../controller/MessageTemplateController.java | 8 +++ .../service/MessageTemplateNewService.java | 9 +++ .../impl/MessageGroupNodeServiceImpl.java | 2 +- .../MessageGroupTreeNodeCacheServiceImpl.java | 10 +++- .../impl/MessageTemplateNewServiceImpl.java | 27 +++++++++ .../client/MessageTemplateClient.java | 11 ++++ .../MessageTemplateClientFallback.java | 9 +++ .../response/MessageTemplateListResponse.java | 60 +++++++++++++++++++ 8 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 msg-center-api/src/main/java/cn/axzo/msg/center/service/template/response/MessageTemplateListResponse.java diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateController.java index 1e87ed82..629ed2c9 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateController.java @@ -14,6 +14,9 @@ import cn.azxo.framework.common.model.Page; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.RestController; +import java.util.Collection; +import java.util.List; + /** * 消息模板管理 * @@ -49,6 +52,11 @@ public class MessageTemplateController implements MessageTemplateClient { return CommonResponse.success(messageTemplateNewService.page(request)); } + @Override + public CommonResponse> listByCodes(Collection templateCodes) { + return CommonResponse.success(messageTemplateNewService.listByCodes(templateCodes)); + } + @Override public CommonResponse updateStatus(MessageTemplateUpdateStatusRequest request) { messageTemplateNewService.updateStatus(request.getOperatorId(), request.getTemplateCode(), request.getStatus()); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java index 7644190d..5ce92b17 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java @@ -8,6 +8,7 @@ import cn.axzo.msg.center.service.template.response.MessageTemplateDetailRespons import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse; import cn.azxo.framework.common.model.Page; +import java.util.Collection; import java.util.List; import java.util.Optional; @@ -74,4 +75,12 @@ public interface MessageTemplateNewService { * @return 模板数据列表 */ Page page(MessageTemplatePageRequest request); + + /** + * 通过模板编码查询对应的模板 + * + * @param templateCodes 模板编码集合 + * @return 模板列表 + */ + List listByCodes(Collection templateCodes); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupNodeServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupNodeServiceImpl.java index 78931a84..250ff90d 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupNodeServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupNodeServiceImpl.java @@ -38,7 +38,7 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService { .map(messageGroupTreeNodeCacheService::queryLeafNodePath) .filter(Optional::isPresent) .map(Optional::get) - .collect(Collectors.toMap(GroupTreeNodePathDTO::getNodeCode, + .collect(Collectors.toMap(GroupTreeNodePathDTO::getNodeCodePath, GroupTreeNodePathDTO::getNodeNamePath, (cur, pre) -> cur)); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupTreeNodeCacheServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupTreeNodeCacheServiceImpl.java index b9cdd89e..bf82772f 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupTreeNodeCacheServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupTreeNodeCacheServiceImpl.java @@ -175,7 +175,7 @@ public class MessageGroupTreeNodeCacheServiceImpl implements MessageGroupTreeNod pathNodeStack.push(node); if (CollectionUtils.isEmpty(node.getNodeChildren())) { // 当前结点为树的叶结点(逻辑上的,有可能不是业务维度的叶结点) - paths.add(GroupTreeNodePathDTO.of(node.getNodeCode(), pathNodeStack)); + paths.add(GroupTreeNodePathDTO.of(node.getNodeCode(), reverseStack(pathNodeStack))); pathNodeStack.pop(); } else { stack.addAll(node.getNodeChildren()); @@ -183,4 +183,12 @@ public class MessageGroupTreeNodeCacheServiceImpl implements MessageGroupTreeNod } return paths; } + + private List reverseStack(LinkedList pathNodeStack) { + List list = Lists.newArrayList(); + for (GroupTreeNodeDTO node : pathNodeStack) { + list.add(0, node); + } + return list; + } } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java index 55ed7fc6..479119f6 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java @@ -58,6 +58,8 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService private static final long TRY_LOCK_TIMEOUT_MILLS = 1000; private static final int RETRY_CNT_MAX = 3; + private static final int MAX_NUM_ONCE_QUERY = 1000; + private final RedisUtil redisUtil; private final MessageBaseTemplateDao messageBaseTemplateDao; private final MessageGroupNodeService messageGroupNodeService; @@ -202,6 +204,31 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService return Page.toPage(request.getPage(), request.getPageSize(), result.getTotal(), records); } + @Override + public List listByCodes(Collection templateCodes) { + if (CollectionUtils.isEmpty(templateCodes)) { + log.info("the templateCodes is empty."); + return Collections.emptyList(); + } + AssertUtil.isTrue(templateCodes.size() <= MAX_NUM_ONCE_QUERY, "the collection of templateCodes is too large"); + // 查询模板基础数据 + List records = messageBaseTemplateDao.lambdaQuery() + .in(MessageBaseTemplate::getCode, templateCodes) + .eq(MessageBaseTemplate::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + // 查询模板的分类结点编码path + templateCodes = records.stream().map(MessageBaseTemplate::getCode).collect(Collectors.toList()); + Map> groupNodePaths = messageTemplateGroupService + .listMessageTemplateGroupPaths(templateCodes); + // 将模板分类结点编码path转化为分类名称path + Map codeNameMap = messageGroupNodeService.groupNodeNamePaths(groupNodePaths.values().stream() + .flatMap(Collection::stream).collect(Collectors.toList())); + // 转化为页面展示的数据模型 + return records.stream() + .map(e -> convert(e, groupNodePaths, codeNameMap)) + .collect(Collectors.toList()); + } + private String saveTemplate(MessageTemplateSaveOrUpdateParam param) { String templateCode = UUIDUtil.uuidString(); MessageBaseTemplate template = convert(param); diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/MessageTemplateClient.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/MessageTemplateClient.java index 2c7d0178..a189a694 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/MessageTemplateClient.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/MessageTemplateClient.java @@ -17,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import javax.validation.Valid; +import java.util.Collection; +import java.util.List; /** * 消息模板管理 @@ -66,6 +68,15 @@ public interface MessageTemplateClient { @PostMapping(value = "/message/template/page", produces = {MediaType.APPLICATION_JSON_VALUE}) CommonResponse> page(@RequestBody MessageTemplatePageRequest request); + /** + * 通过模板编码查询对应的模板 + * + * @param templateCodes 模板编码集合 + * @return 模板列表 + */ + @PostMapping(value = "/message/template/list", produces = {MediaType.APPLICATION_JSON_VALUE}) + CommonResponse> listByCodes(@RequestParam("templateCodes") Collection templateCodes); + /** * 启用/禁用消息模板 * diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/fallback/MessageTemplateClientFallback.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/fallback/MessageTemplateClientFallback.java index f0d56970..646b9b3e 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/fallback/MessageTemplateClientFallback.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/fallback/MessageTemplateClientFallback.java @@ -12,6 +12,9 @@ import cn.azxo.framework.common.model.Page; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import java.util.Collection; +import java.util.List; + /** * @description * @@ -46,6 +49,12 @@ public class MessageTemplateClientFallback implements MessageTemplateClient { return CommonResponse.error("fall back while paging query template"); } + @Override + public CommonResponse> listByCodes(Collection templateCodes) { + log.error("fall back while listing templates. templateCodes:{}", templateCodes); + return CommonResponse.error("fall back while listing template"); + } + @Override public CommonResponse updateStatus(MessageTemplateUpdateStatusRequest request) { log.error("fall back while updating template status. request:{}", request); diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/response/MessageTemplateListResponse.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/response/MessageTemplateListResponse.java new file mode 100644 index 00000000..eac67c94 --- /dev/null +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/response/MessageTemplateListResponse.java @@ -0,0 +1,60 @@ +package cn.axzo.msg.center.service.template.response; + +import cn.axzo.msg.center.service.enums.MessageCategoryEnum; +import cn.axzo.msg.center.service.enums.StatusEnum; +import com.alibaba.fastjson.JSON; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +/** + * @author cold_blade + * @date 2023/10/17 + * @version 1.0 + */ +@Setter +@Getter +public class MessageTemplateListResponse implements Serializable { + + private static final long serialVersionUID = 4748193413608569743L; + + /** + * 模板名称 + */ + private String templateName; + /** + * 模板编码 + */ + private String templateCode; + /** + * 消息类型 + * GENERAL_MESSAGE: 普通消息 + * PENDING_MESSAGE: 待办消息 + */ + private MessageCategoryEnum category; + /** + * 消息标题 + */ + private String title; + /** + * 消息内容 + */ + private String content; + /** + * 分类路径,eg:发薪管理/发薪提醒/提醒工人 + */ + private List groupNodeNamePaths; + /** + * 模板状态 + * ENABLE: 启用 + * DISABLE: 禁用 + */ + private StatusEnum status; + + @Override + public String toString() { + return JSON.toJSONString(this); + } +}