zhongrj
2023-04-23 396bf585bc43c16c944fdc03e9e5efc5a8432aad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package cn.gistack.common.utils;
 
import cn.gistack.common.node.DeptUserTreeNode;
import cn.gistack.common.node.TreeNode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
 
/**
 * node tree 工具类
 * @author zhongrj
 * @since 2021-11-23
 */
public class NodeTreeUtil {
 
    /**
     * map 转 tree 组织机构(父子id不会重复的情况,数据查询来自同一个表)
     * @param treeMap
     * @return
     */
    public  static List<TreeNode> getNodeTree(Map<String, TreeNode> treeMap){
        List<TreeNode> tree = new ArrayList<>();
        if (treeMap.size() > 1) {
            treeMap.forEach((id, treeNode) -> {
                if (treeMap.containsKey(treeNode.getParentId())) {
                    treeMap.get(treeNode.getParentId()).getChildren().add(treeNode);
                } else {
                    tree.add(treeNode);
                }
            });
        }
        return tree;
    }
 
    /**
     * map 转 tree 组织机构(父子id不会重复的情况,数据查询来自同一个表)
     * @param treeMap
     * @return
     */
    public  static List<TreeNode> getDeptAndUserNodeTree(Map<String, DeptUserTreeNode> treeMap){
        List<TreeNode> tree = new ArrayList<>();
        if (treeMap.size() > 1) {
            treeMap.forEach((id, treeNode) -> {
                if (!treeNode.getHasChildren()){
                    // 判断是否有绑定多个部门
                    List<String> asList = Arrays.asList(treeNode.getParentId().split(","));
                    if (asList.size()>1){
                        for (String parentId : asList) {
                            if (treeMap.containsKey(parentId)) {
                                treeMap.get(parentId).getChildren().add(treeNode);
                            } else {
                                tree.add(treeNode);
                            }
                        }
                    }else {
                        if (treeMap.containsKey(treeNode.getParentId())) {
                            treeMap.get(treeNode.getParentId()).getChildren().add(treeNode);
                        } else {
                            tree.add(treeNode);
                        }
                    }
                }else {
                    if (treeMap.containsKey(treeNode.getParentId())) {
                        treeMap.get(treeNode.getParentId()).getChildren().add(treeNode);
                    } else {
                        tree.add(treeNode);
                    }
                }
            });
        }
        return tree;
    }
 
    /**
     * list 转 tree 组织机构
     * @param parentList
     * @param childrenList
     * @return
     */
    public  static List<TreeNode> getNodeTree(List<TreeNode> parentList,List<TreeNode> childrenList){
        // 遍历
        for (TreeNode parentNode : parentList) {
            // 判断是否有孩子
            if (parentNode.getHasChildren()) {
                List<TreeNode> tree = new ArrayList<>();
                // 遍历子集合
                for (TreeNode childrenNode : childrenList) {
                    if (parentNode.getId().equals(childrenNode.getParentId())) {
                        tree.add(childrenNode);
                    }
                }
                // 设置孩子节点
                parentNode.setChildren(tree);
            }
        }
        return parentList;
    }
}