针对特定人员和部门树形数据,重新拆分构造新的树形数据思路。

新建一个类   RecursiveRescreening.java。

参考如下类,即可重新拆分树形数据构造前台所需的新的树形数据。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;

public class RecursiveRescreening {

	public static void main(String[] args) {
		String jsonStr = "[{\"num\":\"1000\",\"name\":\"*******责任有限公司\",\"superiorDept\":\"-1\",\"leaderPerNums\":[],\"children\":[{\"num\":\"101\",\"name\":\"综合部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"42\",\"6\"],\"children\":[{\"num\":\"3\",\"name\":\"周士大夫波\"},{\"num\":\"4\",\"name\":\"王玉11玲\"},{\"num\":\"5\",\"name\":\"于霞飞\"},{\"num\":\"6\",\"name\":\"康芳芳\"},{\"num\":\"7\",\"name\":\"冯亚11鑫\"},{\"num\":\"8\",\"name\":\"侯素蓉\"},{\"num\":\"9\",\"name\":\"关玲玲\"},{\"num\":\"10\",\"name\":\"高磊\"},{\"num\":\"11\",\"name\":\"董晓虹\"},{\"num\":\"42\",\"name\":\"左素平\"},{\"num\":\"64\",\"name\":\"杨雨欣\"},{\"num\":\"65\",\"name\":\"尚秀1忠\"},{\"num\":\"66\",\"name\":\"赵鹏伟\"}]},{\"num\":\"102\",\"name\":\"工程部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"2\"],\"children\":[{\"num\":\"12\",\"name\":\"李鹏1翔\"},{\"num\":\"13\",\"name\":\"张学东\"},{\"num\":\"14\",\"name\":\"邱继1国\"},{\"num\":\"15\",\"name\":\"胡肥东\"},{\"num\":\"16\",\"name\":\"张利锋\"},{\"num\":\"17\",\"name\":\"冯超博\"},{\"num\":\"18\",\"name\":\"刘勇\"},{\"num\":\"51\",\"name\":\"高1福强\"},{\"num\":\"58\",\"name\":\"韩程\"},{\"num\":\"59\",\"name\":\"刘凯峰\"},{\"num\":\"73\",\"name\":\"武康\"},{\"num\":\"74\",\"name\":\"马窦\"}]},{\"num\":\"103\",\"name\":\"研发一部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"20\"],\"children\":[{\"num\":\"20\",\"name\":\"柳江峰\"},{\"num\":\"21\",\"name\":\"马晶\"},{\"num\":\"22\",\"name\":\"李慧仙\"},{\"num\":\"23\",\"name\":\"崔耀强\"},{\"num\":\"24\",\"name\":\"陈星星\"},{\"num\":\"25\",\"name\":\"吕晓辉\"},{\"num\":\"26\",\"name\":\"郭文军\"},{\"num\":\"27\",\"name\":\"代靖\"},{\"num\":\"28\",\"name\":\"李跃跃\"},{\"num\":\"29\",\"name\":\"张力丰\"},{\"num\":\"49\",\"name\":\"李磊\"},{\"num\":\"52\",\"name\":\"胡懿\"},{\"num\":\"53\",\"name\":\"胡晓超\"},{\"num\":\"55\",\"name\":\"靳云南\"},{\"num\":\"56\",\"name\":\"张家玮\"},{\"num\":\"57\",\"name\":\"王文杰\"},{\"num\":\"60\",\"name\":\"刘利娜\"},{\"num\":\"61\",\"name\":\"张尧\"},{\"num\":\"62\",\"name\":\"董刚刚\"},{\"num\":\"63\",\"name\":\"李少华\"},{\"num\":\"69\",\"name\":\"杨瑞\"},{\"num\":\"70\",\"name\":\"张宇\"},{\"num\":\"72\",\"name\":\"王宇璐\"},{\"num\":\"76\",\"name\":\"杨世杰\"},{\"num\":\"77\",\"name\":\"武志亮\"}]},{\"num\":\"104\",\"name\":\"研发二部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"30\"],\"children\":[{\"num\":\"30\",\"name\":\"方利红\"},{\"num\":\"31\",\"name\":\"李跃峰\"},{\"num\":\"32\",\"name\":\"赵海青\"},{\"num\":\"33\",\"name\":\"周权\"},{\"num\":\"34\",\"name\":\"魏志强\"},{\"num\":\"35\",\"name\":\"任燕卿\"},{\"num\":\"36\",\"name\":\"郝鹏勇\"},{\"num\":\"37\",\"name\":\"李国君\"},{\"num\":\"38\",\"name\":\"郭伟\"},{\"num\":\"39\",\"name\":\"何延峰\"},{\"num\":\"40\",\"name\":\"吴文凯\"},{\"num\":\"41\",\"name\":\"高婧\"},{\"num\":\"67\",\"name\":\"卞有界\"},{\"num\":\"68\",\"name\":\"王瑞\"},{\"num\":\"75\",\"name\":\"贾志伟\"}]},{\"num\":\"105\",\"name\":\"生产部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"42\"],\"children\":[{\"num\":\"43\",\"name\":\"马泽\"},{\"num\":\"44\",\"name\":\"卢建安\"},{\"num\":\"71\",\"name\":\"马鸿飞\"}]},{\"num\":\"106\",\"name\":\"市场部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"2\"],\"children\":[{\"num\":\"2\",\"name\":\"孙晋汝\"},{\"num\":\"45\",\"name\":\"柳山峰\"},{\"num\":\"46\",\"name\":\"李旭\"},{\"num\":\"47\",\"name\":\"郭忠文\"},{\"num\":\"48\",\"name\":\"赵敏\"},{\"num\":\"50\",\"name\":\"陈智\"},{\"num\":\"54\",\"name\":\"武万怀\"}]},{\"num\":\"1001\",\"name\":\"未分组\",\"superiorDept\":\"1000\",\"leaderPerNums\":[],\"children\":[{\"num\":\"1\",\"name\":\"管理员\"}]}]}]";
		new RecursiveRescreening().rescreeningDeptAndPersonTree(jsonStr);
	}

	/**
	 * String jsonStr
	 * ="[{\"num\":\"1000\",\"name\":\"*******责任有限公司\",\"superiorDept\":\"-1\",\"leaderPerNums\":[],\"children\":[{\"num\":\"101\",\"name\":\"综合部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"42\",\"6\"],\"children\":[{\"num\":\"3\",\"name\":\"士大夫\"},{\"num\":\"4\",\"name\":\"王玉玲\"},{\"num\":\"5\",\"name\":\"于霞飞\"},{\"num\":\"6\",\"name\":\"康芳芳\"},{\"num\":\"7\",\"name\":\"冯亚鑫\"},{\"num\":\"8\",\"name\":\"侯素蓉\"},{\"num\":\"9\",\"name\":\"关玲玲\"},{\"num\":\"10\",\"name\":\"高磊\"},{\"num\":\"11\",\"name\":\"董晓虹\"},{\"num\":\"42\",\"name\":\"左素平\"},{\"num\":\"64\",\"name\":\"杨雨欣\"},{\"num\":\"65\",\"name\":\"尚秀忠\"},{\"num\":\"66\",\"name\":\"赵鹏伟\"}]},{\"num\":\"102\",\"name\":\"工程部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"2\"],\"children\":[{\"num\":\"12\",\"name\":\"李鹏翔\"},{\"num\":\"13\",\"name\":\"张学东\"},{\"num\":\"14\",\"name\":\"邱继国\"},{\"num\":\"15\",\"name\":\"胡肥东\"},{\"num\":\"16\",\"name\":\"张利锋\"},{\"num\":\"17\",\"name\":\"冯超博\"},{\"num\":\"18\",\"name\":\"刘勇\"},{\"num\":\"51\",\"name\":\"高福强\"},{\"num\":\"58\",\"name\":\"韩程\"},{\"num\":\"59\",\"name\":\"刘凯峰\"},{\"num\":\"73\",\"name\":\"武康\"},{\"num\":\"74\",\"name\":\"马窦\"}]},{\"num\":\"103\",\"name\":\"研发一部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"20\"],\"children\":[{\"num\":\"20\",\"name\":\"柳江峰\"},{\"num\":\"21\",\"name\":\"马晶\"},{\"num\":\"22\",\"name\":\"李慧仙\"},{\"num\":\"23\",\"name\":\"崔耀强\"},{\"num\":\"24\",\"name\":\"陈星星\"},{\"num\":\"25\",\"name\":\"吕晓辉\"},{\"num\":\"26\",\"name\":\"郭文军\"},{\"num\":\"27\",\"name\":\"代靖\"},{\"num\":\"28\",\"name\":\"李跃跃\"},{\"num\":\"29\",\"name\":\"张力丰\"},{\"num\":\"49\",\"name\":\"李磊\"},{\"num\":\"52\",\"name\":\"胡懿\"},{\"num\":\"53\",\"name\":\"胡晓超\"},{\"num\":\"55\",\"name\":\"靳云南\"},{\"num\":\"56\",\"name\":\"张家玮\"},{\"num\":\"57\",\"name\":\"王文杰\"},{\"num\":\"60\",\"name\":\"刘利娜\"},{\"num\":\"61\",\"name\":\"张尧\"},{\"num\":\"62\",\"name\":\"董刚刚\"},{\"num\":\"63\",\"name\":\"李少华\"},{\"num\":\"69\",\"name\":\"杨瑞\"},{\"num\":\"70\",\"name\":\"张宇\"},{\"num\":\"72\",\"name\":\"王宇璐\"},{\"num\":\"76\",\"name\":\"杨世杰\"},{\"num\":\"77\",\"name\":\"武志亮\"}]},{\"num\":\"104\",\"name\":\"研发二部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"30\"],\"children\":[{\"num\":\"30\",\"name\":\"方利红\"},{\"num\":\"31\",\"name\":\"李跃峰\"},{\"num\":\"32\",\"name\":\"赵海青\"},{\"num\":\"33\",\"name\":\"周权\"},{\"num\":\"34\",\"name\":\"魏志强\"},{\"num\":\"35\",\"name\":\"任燕卿\"},{\"num\":\"36\",\"name\":\"郝鹏勇\"},{\"num\":\"37\",\"name\":\"李国君\"},{\"num\":\"38\",\"name\":\"郭伟\"},{\"num\":\"39\",\"name\":\"何延峰\"},{\"num\":\"40\",\"name\":\"吴文凯\"},{\"num\":\"41\",\"name\":\"高婧\"},{\"num\":\"67\",\"name\":\"卞有界\"},{\"num\":\"68\",\"name\":\"王瑞\"},{\"num\":\"75\",\"name\":\"贾志伟\"}]},{\"num\":\"105\",\"name\":\"生产部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"42\"],\"children\":[{\"num\":\"43\",\"name\":\"马泽\"},{\"num\":\"44\",\"name\":\"卢建安\"},{\"num\":\"71\",\"name\":\"马鸿飞\"}]},{\"num\":\"106\",\"name\":\"市场部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"2\"],\"children\":[{\"num\":\"2\",\"name\":\"孙晋汝\"},{\"num\":\"45\",\"name\":\"柳山峰\"},{\"num\":\"46\",\"name\":\"李旭\"},{\"num\":\"47\",\"name\":\"郭忠文\"},{\"num\":\"48\",\"name\":\"赵敏\"},{\"num\":\"50\",\"name\":\"陈智\"},{\"num\":\"54\",\"name\":\"武万怀\"}]},{\"num\":\"1001\",\"name\":\"未分组\",\"superiorDept\":\"1000\",\"leaderPerNums\":[],\"children\":[{\"num\":\"1\",\"name\":\"管理员\"}]}]}]";
	 * 
	 * @param jsonStr
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, Object>> rescreeningDeptAndPersonTree(String jsonStr) {
		List<Map<String, Object>> resultList = new ArrayList<>();
		try {
			List<Map<String, Object>> list = JSON.parseObject(jsonStr, List.class);
			// 获取所有部门
			List<Map<String, Object>> allDeptMapList = new ArrayList<>();
			// 获取所有人员
			List<Map<String, Object>> allPersonMapList = new ArrayList<>();
			degui(list, allDeptMapList, allPersonMapList);
			System.out.println(allDeptMapList);
			System.out.println(allPersonMapList);
			//部门编号和部门名称map集合
			Map<String, String> deptNumAndDeptNameMap = new HashMap<>();
			for (Map<String, Object> deptMap : allDeptMapList) {
				deptNumAndDeptNameMap.put((String) deptMap.get("num"), (String) deptMap.get("name"));
			}
			//获取到没有没有子部门的部门。
			List<String> deptNumList = new ArrayList<>();
			for (Map<String, Object> deptMap : allDeptMapList) {
				String deptNum = (String) deptMap.get("num");
				if ((boolean) deptMap.get("disabled")) {
					continue;
				}
				boolean isParentFlag = false;
				for (Map<String, Object> twoLeveldeptMap : allDeptMapList) {
					if (((String) twoLeveldeptMap.get("superiorDept")).equals(deptNum)) {
						isParentFlag = true;
						break;
					}
				}
				if (!isParentFlag) {
					deptNumList.add(deptNum);
				}
			}
			//遍历该集合构造所需树形数据
			for (String deptNum : deptNumList) {
				Map<String, Object> deptMap = new HashMap<>();
				//构造部门编号
				deptMap.put("num", deptNum);
				List<String> tmpDetpNumList = new ArrayList<>();
				//获取某个部门的所有上级部门编号(包括自己)
				getAllDeptNumList(deptNum, allDeptMapList, tmpDetpNumList);
				List<String> realDeptNumList = new ArrayList<>();
				//剔除根节点部门(山西博华科技有限公司)
				for (int i = tmpDetpNumList.size() -2;i >= 0; i--) {
					System.out.println("tmpDetpNumList.get(i):" + tmpDetpNumList.get(i));
					realDeptNumList.add(tmpDetpNumList.get(i));
				}
				System.out.println("realDeptNumList" + realDeptNumList);
				//构造某个部门和所有上级部门组成的名字
				String name = "";
				for (int i = 0; i < realDeptNumList.size(); i++) {
					String num = realDeptNumList.get(i);
					if (i == realDeptNumList.size() - 1) {
						name = name + deptNumAndDeptNameMap.get(num);
					} else {
						name = name + deptNumAndDeptNameMap.get(num) + "/";
					}
				}
				deptMap.put("name", name);
				List<Map<String, Object>> deptPersonMapList = new ArrayList<>();
				//获取该部门下人员list
				for (Map<String, Object> personMap : allPersonMapList) {
					if (((String) personMap.get("deptNum")).equals(deptNum)) {
						deptPersonMapList.add(personMap);
					}
				}
				deptMap.put("children",deptPersonMapList);
				resultList.add(deptMap);
			}
		} catch (Exception e) {
			resultList = new ArrayList<>();
			e.printStackTrace();
		}
		System.out.println(resultList);
		System.out.println(JSON.toJSONString(resultList));
		return resultList;
	}

	/**
	 * 拆分人员和部门树形数据获取所有人员和部门信息List
	 * 
	 * @param list
	 * @param allDeptMapList
	 * @param allPersonMapList
	 */
	@SuppressWarnings("unchecked")
	public static void degui(List<Map<String, Object>> list, List<Map<String, Object>> allDeptMapList,
			List<Map<String, Object>> allPersonMapList) {
		String deptNum = "";
		if (allDeptMapList != null && allDeptMapList.size() > 0) {
			deptNum = (String) allDeptMapList.get(allDeptMapList.size() - 1).get("num");
		}
		for (Map<String, Object> map : list) {
			String num = (String) map.get("num");
			String name = (String) map.get("name");
			if (map.get("leaderPerNums") != null && map.get("children") != null) {// 部门有子部门或者人
				Map<String, Object> deptMap = new HashMap<>();
				String superiorDept = (String) map.get("superiorDept");
				deptMap.put("num", num);
				deptMap.put("name", name);
				deptMap.put("superiorDept", superiorDept);
				deptMap.put("disabled", false);
				allDeptMapList.add(deptMap);
				degui((List<Map<String, Object>>) map.get("children"), allDeptMapList, allPersonMapList);
			}
			if (map.get("leaderPerNums") != null && map.get("children") == null) {// 部门底下没人没子部门
				Map<String, Object> deptMap = new HashMap<>();
				String superiorDept = (String) map.get("superiorDept");
				deptMap.put("num", num);
				deptMap.put("name", name);
				deptMap.put("superiorDept", superiorDept);
				deptMap.put("disabled", true);
				allDeptMapList.add(deptMap);
			}
			if (map.get("leaderPerNums") == null && map.get("children") == null) {// 人
				Map<String, Object> personMap = new HashMap<>();
				personMap.put("num", num);
				personMap.put("name", name);
				personMap.put("deptNum", deptNum);
				allPersonMapList.add(personMap);
			}
		}
	}

	/**
	 * 获取某个部门的所有上级部门
	 * 
	 * @param deptNum
	 * @param allDeptMapList
	 * @param tmpDeptNumList
	 */
	public static void getAllDeptNumList(String deptNum, List<Map<String, Object>> allDeptMapList,
			List<String> tmpDeptNumList) {
		tmpDeptNumList.add(deptNum);
		for (Map<String, Object> deptMap : allDeptMapList) {
			String superiorDept = (String) deptMap.get("superiorDept");
			if ((deptNum.equals((String) deptMap.get("num"))) && (!"-1".equals(superiorDept))) {
				getAllDeptNumList(superiorDept, allDeptMapList, tmpDeptNumList);
			}
		}
		return;
	}
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值