java代码递归部门结构树

时间:2024-07-13 21:34:20
组织所有部门树,以及条件查询部门树:
    /**
* 组织部门树
* @return
*/
@Override
public List<SxyBranchVO> findAllBranchTree(String branchname) {
SxyBranchVO sxyBranchVOParam = new SxyBranchVO();
sxyBranchVOParam.setBranchcode("");
sxyBranchVOParam.setDeleteflag("1");
// 查询所有根节点root
List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVOParam);
if(StringUtils.isNotBlank(branchname)){ // 按部门名称查询,将符合条件的节点组织成结构树
Set<SxyBranchVO> branchVOSet = new HashSet<>();
Set<SxyBranchVO> branchVOSetSub = new HashSet<>();
// 查询所有符合条件的子节点
List<SxyBranchVO> sxyBranchVOS = sxyBranchMapper.getBranchsByName(branchname);
for(SxyBranchVO sxyBranchVOSub : sxyBranchVOS){
sxyBranchVOSub.setDeleteflag("1");
branchVOSet.add(sxyBranchVOSub);
// 向上递归,将符合条件的节点以及其所有上级父节点放在set集合中
branchVOSetSub = buildTreeUp(sxyBranchVOSub,branchVOSetSub);
for(SxyBranchVO sbv : branchVOSetSub){
branchVOSet.add(sbv);
}
}
// 组织结构树,将符合条件的所有节点组织进结构树
List<SxyBranchVO> sxyBranchVOListNew = new ArrayList<>();
for(SxyBranchVO sxyBranchVO : sxyBranchVOList){
// 组织结构树,根节点下的所有部门
sxyBranchVO.setDeleteflag("1");
buildTree(sxyBranchVO,branchVOSet);
if(sxyBranchVO.getChildren() != null && sxyBranchVO.getChildren().size() > 0){
sxyBranchVOListNew.add(sxyBranchVO);
}
}
return sxyBranchVOListNew;
}else{ // 查询所有,将所有节点组织成结构树
for(SxyBranchVO sxyBranchVO : sxyBranchVOList){
// 组织结构树,根节点下的所有部门
sxyBranchVO.setDeleteflag("1");
buildTreeAll(sxyBranchVO);
}
return sxyBranchVOList;
}
} /**
* 向上递归查询所有父节点(每一层的父节点只有一个)
* @param sxyBranchVOSub
* @param branchVOSetSub
* @return
*/
private Set<SxyBranchVO> buildTreeUp(SxyBranchVO sxyBranchVOSub, Set<SxyBranchVO> branchVOSetSub) {
// 向上递归查询所有父节点
SxyBranchVO sxyBranchVO = sxyBranchMapper.findParentBranchVOByParentCode(sxyBranchVOSub);
if(sxyBranchVO != null){ // 如果不是根节点
branchVOSetSub.add(sxyBranchVO);
sxyBranchVO.setDeleteflag("1");
buildTreeUp(sxyBranchVO,branchVOSetSub);
}
return branchVOSetSub;
} /**
* 递归查询子节点(向下递归,组织符合条件的结构树)
* @param sxyBranchVO
*/
private void buildTree(SxyBranchVO sxyBranchVO,Set<SxyBranchVO> branchVOSet) {
List<SxyBranchVO> sxyBranchVOListNew = new ArrayList<>();
// 查询直属子节点
List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO);
for(SxyBranchVO sxyBranch : sxyBranchVOList){
for(SxyBranchVO sbr : branchVOSet){
if(sxyBranch.getBranchcode().equals(sbr.getBranchcode())){
sxyBranchVOListNew.add(sxyBranch);
}
}
}
sxyBranchVO.setChildren(sxyBranchVOListNew);
for(SxyBranchVO sxyBranchItem : sxyBranchVOList){
sxyBranchItem.setDeleteflag("1");
buildTree(sxyBranchItem,branchVOSet);
}
} /**
* 递归查询子节点(向下递归,组织所有结构树)
* @param sxyBranchVO
*/
private void buildTreeAll(SxyBranchVO sxyBranchVO) {
// 查询直属子节点
List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO);
sxyBranchVO.setChildren(sxyBranchVOList);
for(SxyBranchVO sxyBranchItem : sxyBranchVOList){
sxyBranchItem.setDeleteflag("1");
buildTreeAll(sxyBranchItem);
}
}
 

注释掉代码,供参考:

/*private Boolean buildTreeMatch(SxyBranchVO sxyBranchVO,List<SxyBranchVO> sxyBranchVOS) {
Boolean flag = false;
// 查询直属子节点
List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO);
for(SxyBranchVO sb : sxyBranchVOS){
for(SxyBranchVO sbv : sxyBranchVOList){
if(sb.getBranchcode().equals(sbv.getBranchcode())){
return true;
}
}
}
if(!flag){
sxyBranchVO.setChildren(sxyBranchVOList);
for(SxyBranchVO sxyBranchItem : sxyBranchVOList){
sxyBranchItem.setDeleteflag("1");
buildTreeMatch(sxyBranchItem,sxyBranchVOS);
}
}
return flag;
}*/