原理介绍:
1.先根据根部门0查询根部门下的部门列表。
2.然后遍历部门列表。
3.然后每个部门下都查询子部门以及当前部门下的人员(调用getChildren()方法)。
4.查询子方法是又将id作为父id,再次调用子方法本身(调用getChildren()方法),如此反复即可实现。
实现方法代码:
import com.alibaba.fastjson2.JSONArray;
import java.util.ArrayList;
import java.util.List;
public class demo {
/**
* 部门实体
*/
public static class Dept {
/**
* 部门id
*/
private String deptId;
/**
* 部门名称
*/
private String name;
/**
* 父部门id
*/
private String parentId;
/**
* 子部门
*/
private JSONArray children = new JSONArray();
public String getDeptId() {
return deptId;
}
public void setDeptId(String deptId) {
this.deptId = deptId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public JSONArray getChildren() {
return children;
}
public void setChildren(JSONArray children) {
this.children = children;
}
}
public static void main(String[] arg) {
List<Dept> deptList = new ArrayList<>();
//添加第一级
Dept dept = new Dept();
dept.setDeptId("1000");
dept.setParentId("0");
dept.setName("康复中心门诊");
deptList.add(dept);
Dept dept1 = new Dept();
dept1.setDeptId("1001");
dept1.setParentId("0");
dept1.setName("妇产科");
deptList.add(dept1);
Dept dept2 = new Dept();
dept2.setDeptId("1002");
dept2.setParentId("0");
dept2.setName("骨伤科");
deptList.add(dept2);
//添加第二级
Dept dept3 = new Dept();
dept3.setDeptId("10021");
dept3.setParentId("1002");
dept3.setName("颈肩腰腿痛专科门诊");
deptList.add(dept3);
Dept dept4 = new Dept();
dept4.setDeptId("10022");
dept4.setParentId("1002");
dept4.setName("骨伤二科(康复六科)门诊");
deptList.add(dept4);
Dept dept5 = new Dept();
dept5.setDeptId("10001");
dept5.setParentId("1000");
dept5.setName("肌骨疼痛康复门诊");
deptList.add(dept5);
Dept dept6 = new Dept();
dept6.setDeptId("10002");
dept6.setParentId("1000");
dept6.setName("脑卒中康复门诊");
deptList.add(dept6);
//添加第三级
Dept dept7 = new Dept();
dept7.setDeptId("100021");
dept7.setParentId("10002");
dept7.setName("脑卒中康复门诊-小门诊");
deptList.add(dept7);
Dept dept8 = new Dept();
dept8.setDeptId("100022");
dept8.setParentId("10002");
dept8.setName("脑卒中康复门诊-小门诊-小小门诊");
deptList.add(dept8);
JSONArray jsonArray = new JSONArray();
for (Dept d : deptList) {
//根据最外层部门的父id 查询最外层部门
if ("0".equals(d.getParentId())) {
Dept parentDept = new Dept();
parentDept.setDeptId(d.getDeptId());
parentDept.setParentId(d.getParentId());
parentDept.setName(d.getName());
parentDept.setChildren(getChildren(deptList, d.getDeptId()));
jsonArray.add(parentDept);
}
}
System.out.println("jsonArray----:" + jsonArray);
System.out.println(jsonArray.size());
//jsonArray----:[{"children":[{"children":[],"deptId":"10001","name":"肌骨疼痛康复门诊","parentId":"1000"},{"children":[{"children":[],"deptId":"100021","name":"脑卒中康复门诊-小门诊","parentId":"10002"},{"children":[],"deptId":"100022","name":"脑卒中康复门诊-小门诊-小小门诊","parentId":"10002"}],"deptId":"10002","name":"脑卒中康复门诊","parentId":"1000"}],"deptId":"1000","name":"康复中心门诊","parentId":"0"},{"children":[],"deptId":"1001","name":"妇产科","parentId":"0"},{"children":[{"children":[],"deptId":"10021","name":"颈肩腰腿痛专科门诊","parentId":"1002"},{"children":[],"deptId":"10022","name":"骨伤二科(康复六科)门诊","parentId":"1002"}],"deptId":"1002","name":"骨伤科","parentId":"0"}]
//3
}
//递归查询子部门
private static JSONArray getChildren(List<Dept> deptList, String deptId) {
JSONArray jsonArray = new JSONArray();
for (Dept d : deptList) {
if (deptId.equals(d.getParentId())) {
Dept chDept = new Dept();
chDept.setDeptId(d.getDeptId());
chDept.setParentId(d.getParentId());
chDept.setName(d.getName());
chDept.setChildren(getChildren(deptList, d.getDeptId()));
jsonArray.add(chDept);
}
}
return jsonArray;
}
}