Merge branch 'feature/REQ-1507' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev
This commit is contained in:
commit
40f36b5ff2
@ -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) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user