Merge branch 'feature/REQ-1507' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev

This commit is contained in:
luofu 2023-11-15 20:38:41 +08:00
commit 40f36b5ff2

View File

@ -15,6 +15,7 @@ import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@ -163,23 +164,26 @@ public class MessageGroupTreeNodeCacheServiceImpl implements MessageGroupTreeNod
private List<GroupTreeNodePathDTO> parseRootNode(GroupTreeNodeDTO root) {
List<GroupTreeNodePathDTO> paths = Lists.newArrayList();
LinkedList<GroupTreeNodeDTO> pathNodeStack = new LinkedList<>();
LinkedList<GroupTreeNodeDTO> stack = new LinkedList<>();
stack.push(root);
while (!stack.isEmpty()) {
GroupTreeNodeDTO node = stack.pop();
pathNodeStack.push(node);
if (CollectionUtils.isEmpty(node.getNodeChildren())) {
// 当前结点为树的叶结点逻辑上的有可能不是业务维度的叶结点
paths.add(GroupTreeNodePathDTO.of(node, reverseStack(pathNodeStack)));
pathNodeStack.pop();
} else {
stack.addAll(node.getNodeChildren());
}
}
List<GroupTreeNodeDTO> stack = new ArrayList<>();
parse(root, stack, paths);
return paths;
}
private void parse(GroupTreeNodeDTO node, List<GroupTreeNodeDTO> stack, List<GroupTreeNodePathDTO> paths) {
if (!stack.isEmpty()
&& !Objects.equals(stack.get(stack.size() - 1).getNodeCode(), node.getParentNodeCode())) {
stack.remove(stack.size() - 1);
}
stack.add(node);
if (CollectionUtils.isEmpty(node.getNodeChildren())) {
// 当前结点为树的叶结点逻辑上的有可能不是业务维度的叶结点
paths.add(GroupTreeNodePathDTO.of(node, stack));
stack.remove(node);
} else {
node.getNodeChildren().forEach(e -> parse(e, stack, paths));
}
}
private List<GroupTreeNodeDTO> reverseStack(LinkedList<GroupTreeNodeDTO> pathNodeStack) {
List<GroupTreeNodeDTO> list = Lists.newArrayList();
for (GroupTreeNodeDTO node : pathNodeStack) {