医院废弃物信息化管理平台
“mitao”
2025-12-24 3763145f34d7706923d55edc32f5cfbc8bc08b92
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
100
101
102
103
104
package cn.besteam.common.util;
 
import cn.besteam.modules.system.dto.SysDepartmentTreeModel;
import cn.hutool.core.collection.CollectionUtil;
import com.google.common.collect.Lists;
 
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
 
/**
 * @author jie
 * @date 2021/3/9 11:54
 */
public class TreeFilterSysDepartmentTreeModelUtil {
 
 
    /**
     * 获取树状结构
     * @param treeList 搜索的树列表
     * @param hitIds 命中的ids
     * @return
     */
    public List<SysDepartmentTreeModel> searchNode(List<SysDepartmentTreeModel> treeList, List<Integer> hitIds) {
        List<SysDepartmentTreeModel> filterTree = Lists.newArrayList();
        for (SysDepartmentTreeModel t : treeList) {
            SysDepartmentTreeModel node = filterTree(t, hitIds);
            filterTree.add(node);
        }
        return filterTree.stream().filter(Objects::nonNull).collect(Collectors.toList());
    }
 
    /**
     * 过滤树
     * @param tree
     * @param hitIds
     * @return
     */
    private SysDepartmentTreeModel filterTree(SysDepartmentTreeModel tree, List<Integer> hitIds) {
        /*if(isRemoveNode(tree, hitIds)){
            return null;
        }*/
        Iterator<SysDepartmentTreeModel> iterator = tree.getChildren().iterator();
        while (iterator.hasNext()){
            SysDepartmentTreeModel child = iterator.next();
            deleteNode(child, iterator, hitIds);
        }
        return tree;
    }
 
    /**
     * 删除节点
     * @param child
     * @param iterator
     * @param hitIds
     */
    private void deleteNode(SysDepartmentTreeModel child, Iterator<SysDepartmentTreeModel> iterator, List<Integer> hitIds) {
        if(isRemoveNode(child, hitIds)){
            iterator.remove();
            return;
        }
        List<SysDepartmentTreeModel> childrenList = child.getChildren();
        if(CollectionUtil.isEmpty(childrenList)){
            return;
        }
        if(hitIds.contains(Integer.valueOf(child.getValue()))){
            return;
        }
        Iterator<SysDepartmentTreeModel> children = childrenList.iterator();
        while (children.hasNext()){
            SysDepartmentTreeModel childChild = children.next();
            deleteNode(childChild,children, hitIds);
        }
    }
 
    /**
     * 判断该节点是否该删除
     * @param root
     * @param hitIds  命中的节点
     * @return ture 需要删除  false 不能被删除
     */
    private boolean isRemoveNode(SysDepartmentTreeModel root, List<Integer> hitIds) {
        List<SysDepartmentTreeModel> children = root.getChildren();
        // 叶子节点
        if(CollectionUtil.isEmpty(children)){
            return !hitIds.contains(Integer.valueOf(root.getValue()));
        }
        // 子节点
        if(hitIds.contains(Integer.valueOf(root.getValue()))){
            return false;
        }
        boolean bool = true;
        for (SysDepartmentTreeModel child : children) {
            if(!isRemoveNode(child,hitIds)){
                bool = false;
                break;
            }
        }
        return bool;
    }
 
 
}