@Override
public List<DeptTreeVO> buildDeptTreeSelect() {
//后端返回的List集合数据
List<DeptTreeVO> deptTreeVOList = commonDAO.selectAllDeptVO();
//重新创建了一个ArrayList 集合
List<DeptTreeVO> returnList = new ArrayList<DeptTreeVO>();
//存放部门编号所需要的一个新的集合
List<String> tempList = new ArrayList<String>();
for (DeptTreeVO dept : deptTreeVOList) {
//将部门编号赋值到 tempList 这个集合中
tempList.add(dept.getDeptNo());
}
// Iterator<DeptTreeVO> iterator1 = deptTreeVOList.iterator();
// boolean b = iterator1.hasNext();
// DeptTreeVO dept = iterator1.next(); 等同于·下面 for循环中的条件
//
//使用迭代器判断里面是否存在数据
for (Iterator<DeptTreeVO> iterator = deptTreeVOList.iterator(); iterator.hasNext(); ) {
DeptTreeVO dept = iterator.next();
// 判断遍历出来的数据是是否 不 包含 父级部门编号
if (!tempList.contains(dept.getPDeptNo())) {
// 递归 第一个参数是查询出来: 所有的数据集合, 第二个参数数据是: 集合中的单条数据
recursionFn(deptTreeVOList, dept);
//返回数据
returnList.add(dept);
}
// TreeUtil.build();
}
if (returnList.isEmpty()) {
returnList = deptTreeVOList;
}
return returnList;
}
/**
* 递归列表
*/
private void recursionFn(List<DeptTreeVO> list, DeptTreeVO t) {
// 得到子节点列表 中所有的 数据
List<DeptTreeVO> childList = getChildList(list, t);
//等到得到子节点的 数据中。。。。。。。。。。。。。。。。。。。。。
//将得到的子节点数据赋值给DeptTreeVo private List<DeptTreeVO> children;
t.setChildren(childList);
//再遍历 得到的子节点数据 判断子节点是否还有子节点
for (DeptTreeVO tChild : childList) {
//如果子节点中的数据 依然拥有子节点
if (hasChild(list, tChild)) {
// 递归 如果有有数据,每条数据下的子节点一直递归调用本方法
recursionFn(list, tChild);
}
}
}
/**
* 得到子节点列表
*/
private List<DeptTreeVO> getChildList(List<DeptTreeVO> list, DeptTreeVO t) {
//创建一个集合
List<DeptTreeVO> tlist = new ArrayList<DeptTreeVO>();
//迭代器 遍历所有数据集合的数据
Iterator<DeptTreeVO> it = list.iterator();
while (it.hasNext()) {
//拿到每一条数据
DeptTreeVO n = (DeptTreeVO) it.next();
//如果 子节点列表中的 父部门编号 不是空数据 并且 子节点列表中的父部门编号 == 所有部门编号 中的其中一个部门编号
if (StringUtils.isNotBlank(n.getPDeptNo()) && n.getPDeptNo().equals(t.getDeptNo())) {
//将对应的 数据 存放到tlist 集合中,并返回出去 (拥有子节点的树形结构)
tlist.add(n);
}
}
return tlist;
}
/**
* 判断是否有子节点
*/
private boolean hasChild(List<DeptTreeVO> list, DeptTreeVO t) {
return getChildList(list, t).size() > 0;
}