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);