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 + "。");
|
}
|
}
|
}
|