From b4317b2d208a366ead5f2c998205d183be7ac566 Mon Sep 17 00:00:00 2001 From: luofu Date: Thu, 16 Nov 2023 17:16:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-1507):=20=E5=88=86=E7=B1=BB=E7=BB=93?= =?UTF-8?q?=E7=82=B9=E5=90=8D=E7=A7=B0=E6=90=9C=E7=B4=A2=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-1507?goToView=1 修改: 1、分类结点名称搜索实现; 影响: 无 --- .../controller/MessageGroupController.java | 19 +++++++++++++++---- .../impl/MessageGroupNodeServiceImpl.java | 17 ++++++++++++++++- .../center/service/dto/GroupTreeNodeDTO.java | 19 +++++++++++++++++++ 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageGroupController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageGroupController.java index ffeb4d93..bb8eb752 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageGroupController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageGroupController.java @@ -15,6 +15,7 @@ import cn.azxo.framework.common.model.CommonResponse; import com.google.common.collect.Maps; import lombok.RequiredArgsConstructor; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.RestController; import java.util.LinkedList; @@ -55,10 +56,20 @@ public class MessageGroupController implements MessageGroupClient { @Override public CommonResponse> list(MessageGroupQueryRequest request) { - List groupTreeNodes = messageGroupNodeService - .listGroupTree(request.getCategory(), request.getNodeName()).stream() - .map(GroupTreeNodeDTO::toMessageGroupTreeNodeResponse) - .collect(Collectors.toList()); + List trees = messageGroupNodeService + .listGroupTree(request.getCategory(), request.getNodeName()); + List groupTreeNodes; + if (StringUtils.isNotBlank(request.getNodeName())) { + // 根据分类结点名称搜索时需要剪枝 + groupTreeNodes = trees.stream() + .map(this::convertCutTree) + .filter(e -> CollectionUtils.isNotEmpty(e.getChildren())) + .collect(Collectors.toList()); + } else { + groupTreeNodes = trees.stream() + .map(GroupTreeNodeDTO::toMessageGroupTreeNodeResponse) + .collect(Collectors.toList()); + } return CommonResponse.success(groupTreeNodes); } 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 30ca74e2..182943f6 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 @@ -15,6 +15,7 @@ import cn.axzo.msg.center.message.service.MessageGroupTreeNodeCacheService; import cn.axzo.msg.center.service.dto.GroupTreeNodeDTO; import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum; import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum; +import cn.axzo.msg.center.service.enums.MessageGroupNodeCategoryEnum; import cn.axzo.msg.center.utils.TreeHelperUtil; import cn.axzo.msg.center.utils.UUIDUtil; import lombok.RequiredArgsConstructor; @@ -144,7 +145,7 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService { .filter(e -> Objects.isNull(category) || category.getMsgGroupNodeCategories().contains(e.getCategory())) // 结点名称过滤条件 - .filter(e -> StringUtils.isBlank(nodeName) || e.getNodeName().equals(nodeName)) + .filter(e -> filterNodeName(e, category, nodeName)) .collect(Collectors.toList()); } @@ -206,4 +207,18 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService { .count(); AssertUtil.isTrue(cnt == 0, "删除失败!删除前请先转移消息模版!"); } + + private boolean filterNodeName(GroupTreeNodeDTO node, MessageGroupCategoryEnum category, String nodeName) { + if (StringUtils.isBlank(nodeName)) { + return true; + } + if (MessageGroupCategoryEnum.NOTIFICATION.equals(category)) { + return node.contains(MessageGroupNodeCategoryEnum.GENERAL_MESSAGE_CATEGORY, nodeName); + } + if (MessageGroupCategoryEnum.PENDING.equals(category)) { + return node.contains(MessageGroupNodeCategoryEnum.PENDING_MESSAGE_CATEGORY, nodeName); + } + return node.contains(MessageGroupNodeCategoryEnum.GENERAL_MESSAGE_CATEGORY, nodeName) + || node.contains(MessageGroupNodeCategoryEnum.PENDING_MESSAGE_CATEGORY, nodeName); + } } diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/dto/GroupTreeNodeDTO.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/dto/GroupTreeNodeDTO.java index a6963cd0..5b2b266f 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/dto/GroupTreeNodeDTO.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/dto/GroupTreeNodeDTO.java @@ -83,6 +83,25 @@ public class GroupTreeNodeDTO implements IBaseTree, Se child.setParentNode(this); } + public boolean contains(MessageGroupNodeCategoryEnum category, String nodeName) { + if (Objects.isNull(category)) { + return false; + } + if (Objects.equals(this.category, category)) { + return Objects.equals(this.nodeName, nodeName); + } + LinkedList stack = new LinkedList<>(); + stack.push(this); + while (!stack.isEmpty()) { + GroupTreeNodeDTO node = stack.pop(); + if (Objects.equals(node.category, category) && Objects.equals(node.nodeName, nodeName)) { + return true; + } + stack.addAll(node.getNodeChildren()); + } + return false; + } + @Override public String getParentNodeCode() { return Optional.ofNullable(parentNode).map(GroupTreeNodeDTO::getNodeCode).orElse(null);