项目中的递归 获取组织结构树 并获取改领导下人 模拟代码

 公司用的 组织 机构树   原先就只有一个顶级节点  现在变成了多个  方法就是 先获取顶点的机构对象  然后对他们逐一递归  然后存到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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值