公司用的 组织 机构树 原先就只有一个顶级节点 现在变成了多个 方法就是 先获取顶点的机构对象 然后对他们逐一递归 然后存到List<OrgTest> 集合中 里面的数据 和 命名都是 乱写 的 完全不符合规范 这个 主要的为了自己 测试 看看这个方法是否行得通
用途--获取组织机构树 然后填充 某领导所对应下的机构的人员信息 这里的00020402 是我 写死的 这里的东西 全部可以变 当然要自行理解了
package com.example.demo;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.example.demo.entity.Org;
import com.example.demo.entity.OrgTest;
import com.google.common.collect.Lists;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
*
*/
public class GTest {
private static List<Org> objects;
private static List<User> listss;
static {
// 组织机构
objects = Lists.newArrayList();
objects.add(new Org("1","01","1","aasas"));
objects.add(new Org("1","02","1","aasas"));
objects.add(new Org("1","00","1","aasas"));
objects.add(new Org("2","0201","2","aasas"));
objects.add(new Org("2","0202","2","aasas"));
objects.add(new Org("2","0101","2","aasas"));
objects.add(new Org("2","0102","2","aasas"));
objects.add(new Org("2","0103","2","aasas"));
objects.add(new Org("2","010103","2","aasas"));
objects.add(new Org("2","010101","2","aasas"));
objects.add(new Org("2","0001","2","aasas"));
objects.add(new Org("3","0002","2","aasas"));
objects.add(new Org("4","000101","3","aasas"));
objects.add(new Org("5","000102","3","aasas"));
objects.add(new Org("6","000203","3","aasas"));
objects.add(new Org("7","000204","3","aasas"));
objects.add(new Org("8","00020401","4","aasas"));
objects.add(new Org("9","00020402","4","aasas"));
objects.add(new Org("10","00010101","4","aasas"));
objects.add(new Org("11","00010202","4","aasas"));
objects.add(new Org("11","00010203","4","aasas"));
//机构下 对应的人员
User user = new User("lqq", "pas", "00020402");
User user1 = new User("lqq", "pas", "00020402");
User user2 = new User("lqq", "pas", "00020402");
User user3 = new User("lqq", "pas", "00020402");
User user4 = new User("lqq", "pas", "00020402");
User user5 = new User("lqq", "pas", "00020402");
listss = Lists.newArrayList();
listss.add(user);
listss.add(user1);
listss.add(user2);
}
public static void main(String[] args) {
// 多个顶级节点的情况下 获得每个顶级节点
List<Org> list = objects.stream().filter((e) -> e.getCode().length()==2
).collect(Collectors.toList());
// 返回的集合
List<OrgTest> testList= Lists.newArrayList();
for (Org o:list
) {
OrgTest orgTest = new OrgTest();
// 顶级节点
OrgTest orgTest1 = test(o, orgTest);
testList.add(orgTest1);
}
JSON parse = JSONUtil.parse(testList);
System.out.println(parse);
}
public static OrgTest test(Org org, OrgTest orgTest){
if (ObjectUtil.isEmpty(org)){
return null;
}
// 递归出口
if (org.getCode().length()>8){
return null;
}
orgTest.setName(org.getName()+" "+org.getCode()+" "+org.getLevel());
orgTest.setId(org.getId());
orgTest.setCode(org.getCode());
orgTest.setLevel(org.getLevel());
List<OrgTest> list1 = Lists.newArrayList();
String pattern="^"+org.getCode()+"[0-9]{2}$";
// 遍历所有的机构树
for (Org o: GTest.objects) {
boolean matches = Pattern.matches(pattern, o.getCode());
if (matches){
OrgTest test = new OrgTest();
test.setId(test.getId());
test.setCode(test.getCode());
test.setLevel(test.getLevel());
list1.add(test);
// 当机构是当前的话 加入对应的人员
if (o.getCode().equals("00020402")){
}
//递归
test(o,test);
}
//加上对应的 机构
orgTest.setOrgList(list1);
}
return orgTest;
}
}
@Setter
@Getter
@ToString
public class OrgTest {
String id;
String code;
String level;
String name;
List<User> list;
List<OrgTest> orgList;
}
@ToString
public class Org {
String id;
String code;
String level;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public Org(String id, String code, String level) {
this.id = id;
this.code = code;
this.level = level;
}
}
这个只是测试使用 后期的 正则表达式什么的 都会去数据库里面进行 模糊查询获取的
[{
"code": "01",
"level": "1",
"orgList": [{
"code": "0101",
"level": "2",
"orgList": [{
"code": "010103",
"level": "2",
"orgList": [],
"name": "aasas 010103 2",
"id": "2"
}, {
"code": "010101",
"level": "2",
"orgList": [],
"name": "aasas 010101 2",
"id": "2"
}],
"name": "aasas 0101 2",
"id": "2"
}, {
"code": "0102",
"level": "2",
"orgList": [],
"name": "aasas 0102 2",
"id": "2"
}, {
"code": "0103",
"level": "2",
"orgList": [],
"name": "aasas 0103 2",
"id": "2"
}],
"name": "aasas 01 1",
"id": "1"
}, {
"code": "02",
"level": "1",
"orgList": [{
"code": "0201",
"level": "2",
"orgList": [],
"name": "aasas 0201 2",
"id": "2"
}, {
"code": "0202",
"level": "2",
"orgList": [],
"name": "aasas 0202 2",
"id": "2"
}],
"name": "aasas 02 1",
"id": "1"
}, {
"code": "00",
"level": "1",
"orgList": [{
"code": "0001",
"level": "2",
"orgList": [{
"code": "000101",
"level": "3",
"orgList": [{
"code": "00010101",
"level": "4",
"orgList": [],
"name": "aasas 00010101 4",
"id": "10"
}],
"name": "aasas 000101 3",
"id": "4"
}, {
"code": "000102",
"level": "3",
"orgList": [{
"code": "00010202",
"level": "4",
"orgList": [],
"name": "aasas 00010202 4",
"id": "11"
}, {
"code": "00010203",
"level": "4",
"orgList": [],
"name": "aasas 00010203 4",
"id": "11"
}],
"name": "aasas 000102 3",
"id": "5"
}],
"name": "aasas 0001 2",
"id": "2"
}, {
"code": "0002",
"level": "2",
"orgList": [{
"code": "000203",
"level": "3",
"orgList": [],
"name": "aasas 000203 3",
"id": "6"
}, {
"code": "000204",
"level": "3",
"orgList": [{
"code": "00020401",
"level": "4",
"orgList": [],
"name": "aasas 00020401 4",
"id": "8"
}, {
"code": "00020402",
"level": "4",
"orgList": [],
"list": [{
"code": "00020402",
"userName": "lqq",
"userId": 0,
"password": "pas"
}, {
"code": "00020402",
"userName": "lqq",
"userId": 0,
"password": "pas"
}, {
"code": "00020402",
"userName": "lqq",
"userId": 0,
"password": "pas"
}],
"name": "aasas 00020402 4",
"id": "9"
}],
"name": "aasas 000204 3",
"id": "7"
}],
"name": "aasas 0002 2",
"id": "3"
}],
"name": "aasas 00 1",
"id": "1"
}]
********************************************************************
项目改需求
多个顶点数 每个树下 可能都有 人员和机构 人员机构是有一个返回对象
package com.example.demo;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.example.demo.entity.Org;
import com.example.demo.entity.OrgTest;
import com.google.common.collect.Lists;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
*
*/
public class GTest {
private static List<Org> objects;
private static List<User> listss;
private static List<User> listUser;
static {
// 组织机构
objects = Lists.newArrayList();
objects.add(new Org("1", "01", "1", "aasas"));
objects.add(new Org("1", "02", "1", "aasas"));
objects.add(new Org("1", "00", "1", "aasas"));
objects.add(new Org("2", "0201", "2", "aasas"));
objects.add(new Org("2", "0202", "2", "aasas"));
objects.add(new Org("2", "0101", "2", "aasas"));
objects.add(new Org("2", "0102", "2", "aasas"));
objects.add(new Org("2", "0103", "2", "aasas"));
objects.add(new Org("2", "010103", "2", "aasas"));
objects.add(new Org("2", "010101", "2", "aasas"));
objects.add(new Org("2", "0001", "2", "aasas"));
objects.add(new Org("3", "0002", "2", "aasas"));
objects.add(new Org("4", "000101", "3", "aasas"));
objects.add(new Org("5", "000102", "3", "aasas"));
objects.add(new Org("6", "000203", "3", "aasas"));
objects.add(new Org("7", "000204", "3", "aasas"));
objects.add(new Org("8", "00020401", "4", "aasas"));
objects.add(new Org("9", "00020402", "4", "aasas"));
objects.add(new Org("10", "00010101", "4", "aasas"));
objects.add(new Org("11", "00010202", "4", "aasas"));
objects.add(new Org("11", "00010203", "4", "aasas"));
//机构下 对应的人员
User user = new User("lqq", "pas", "00010202");
User user1 = new User("lqq", "pas", "00010202");
User user2 = new User("lqq", "pas", "00010202");
User user3 = new User("lqq", "pas", "00010202");
User user4 = new User("李清坡", "pas", "000102");
User user5 = new User("李清坡", "pas", "000102");
listss = Lists.newArrayList();
listss.add(user);
listss.add(user1);
listss.add(user2);
listss.add(user3);
listUser = Lists.newArrayList();
listUser.add(user4);
listUser.add(user5);
}
public static void main(String[] args) {
// 多个顶级节点的情况下 获得每个顶级节点
List<Org> list = objects.stream().filter((e) -> e.getCode().length() == 2
).collect(Collectors.toList());
// 返回的集合
List<OrgTest> testList = Lists.newArrayList();
for (Org o : list
) {
OrgTest orgTest = new OrgTest();
// 顶级节点
OrgTest orgTest1 = test(o, orgTest);
testList.add(orgTest1);
}
JSON parse = JSONUtil.parse(testList);
System.out.println(parse);
}
public static OrgTest test(Org org, OrgTest orgTest) {
if (ObjectUtil.isEmpty(org)) {
return null;
}
// 递归出口
if (org.getCode().length() > 8) {
return null;
}
orgTest.setUnitCode(org.getCode());
orgTest.setUnitName(org.getName());
orgTest.setUnitType("1");
List<OrgTest> list1 = Lists.newArrayList();
String pattern = "^" + org.getCode() + "[0-9]{2}$";
// 遍历所有的机构树
for (Org o : GTest.objects) {
boolean matches = Pattern.matches(pattern, o.getCode());
if (matches) {
OrgTest test = new OrgTest();
test.setUnitCode(o.getCode());
test.setUnitName(o.getName());
test.setUnitType("1");
//递归
list1.add(test);
test(o, test);
}
//加上对应的 机构
orgTest.setOrgList(list1);
}
// 加人 可以传一个list的 code 的集合
if (org.getCode().equals("000102")) {
for (User u : listUser) {
OrgTest test2 = new OrgTest();
test2.setUnitType("0");
test2.setUnitName(u.getUserName() + u.getUserId());
test2.setUnitCode(u.getCode());
list1.add(test2);
}
}
// 加人 多余的 为了测试 不同的组织下
if (org.getCode().equals("00010202")) {
for (User u : listss) {
OrgTest test2 = new OrgTest();
test2.setUnitType("0");
test2.setUnitName(u.getUserName() + u.getUserId());
test2.setUnitCode(u.getCode());
list1.add(test2);
}
}
return orgTest;
}
}
@Setter
@Getter
@ToString
public class OrgTest {
String unitCode;
String unitType;
String unitName;
List<OrgTest> orgList;
}
3930

被折叠的 条评论
为什么被折叠?



