puzhibing
2023-10-08 22199bbdda579861736420fe26c2873ab0f5d21c
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
105
package com.sinata.common.user;
 
import cn.hutool.core.collection.CollUtil;
 
import java.util.ArrayList;
import java.util.List;
 
public class UserHierarchy {
 
    private List<VoUserGradeParent> userList;
 
    public UserHierarchy() {
        userList = new ArrayList<>();
    }
 
    public void addUser(VoUserGradeParent user) {
        userList.add(user);
    }
 
    public void addAll(List<VoUserGradeParent> list) {
        userList.addAll(list);
    }
 
    public List<VoUserGradeParent> findRelatedEntities(VoUserGradeParent user) {
        List<VoUserGradeParent> relatedEntities = new ArrayList<>();
        findRelatedEntitiesRecursive(user, relatedEntities);
        return relatedEntities;
    }
 
    private void findRelatedEntitiesRecursive(VoUserGradeParent user, List<VoUserGradeParent> relatedEntities) {
        for (VoUserGradeParent u : userList) {
            if (u.getParentId().equals(user.getId()) && u.getMemberGradeId() < user.getMemberGradeId() && isRelated(user, u)) {
                relatedEntities.add(u);
                findRelatedEntitiesRecursive(u, relatedEntities);
            }
        }
    }
 
    private boolean isRelated(VoUserGradeParent user1, VoUserGradeParent user2) {
        int uid = user1.getId();
        int pid = user2.getParentId();
 
        if (uid == 0 || pid == 0) {
            return false;
        }
 
        if (uid == pid) {
            return true;
        }
 
        VoUserGradeParent parent1 = getUserById(user1.getParentId());
        VoUserGradeParent parent2 = getUserById(user2.getParentId());
 
        return isRelated(parent1, parent2);
    }
 
    public VoUserGradeParent getUserById(int userId) {
        for (VoUserGradeParent user : userList) {
            if (user.getId() == userId) {
                return user;
            }
        }
        return null;
    }
 
    public static void main(String[] args) {
        UserHierarchy hierarchy = new UserHierarchy();
 
        // 添加用户数据
        hierarchy.addUser(new VoUserGradeParent(1, 3, 0));
        hierarchy.addUser(new VoUserGradeParent(2, 5, 1));
        hierarchy.addUser(new VoUserGradeParent(3, 5, 2));
        hierarchy.addUser(new VoUserGradeParent(4, 3, 3));
        hierarchy.addUser(new VoUserGradeParent(5, 3, 4));
 
        hierarchy.addUser(new VoUserGradeParent(6, 4, 3));
        hierarchy.addUser(new VoUserGradeParent(7, 3, 6));
 
        hierarchy.addUser(new VoUserGradeParent(8, 5, 3));
        hierarchy.addUser(new VoUserGradeParent(9, 3, 8));
 
        hierarchy.addUser(new VoUserGradeParent(10, 4, 2));
        hierarchy.addUser(new VoUserGradeParent(11, 3, 10));
        hierarchy.addUser(new VoUserGradeParent(12, 3, 11));
 
        // 要查找相关实体的用户ID
        int userId = 3;
        VoUserGradeParent user = hierarchy.getUserById(userId);
 
        if (user != null) {
            List<VoUserGradeParent> relatedEntities = hierarchy.findRelatedEntities(user);
 
            if (CollUtil.isNotEmpty(relatedEntities)) {
                System.out.println("与用户" + userId + "相关的实体:");
                for (VoUserGradeParent entity : relatedEntities) {
                    System.out.println(entity);
                }
            } else {
                System.out.println("用户" + userId + "没有相关实体。");
            }
        } else {
            System.out.println("找不到用户" + userId + "。");
        }
    }
}