組織全部部門樹,以及條件查詢部門樹:
/** * 組織部門樹 * @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); } }
註釋掉代碼,供參考:app
/*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; }*/