// 准备使用到的实体类 @Getter @Setter @ToString public class DeptLevelDto extends SysDept { private List<DeptLevelDto> deptList = Lists.newArrayList(); public static DeptLevelDto adapt(SysDept dept) { DeptLevelDto dto = new DeptLevelDto(); BeanUtils.copyProperties(dept, dto); return dto; } }
// 级别 工具类
public class LevelUtil { public final static String SEPARATOR = "."; public final static String ROOT = "0"; // 0 // 0.1 // 0.1.2 // 0.1.3 // 0.4 public static String calculateLevel(String parentLevel, int parentId) { if (StringUtils.isBlank(parentLevel)) { return ROOT; } else { return StringUtils.join(parentLevel, SEPARATOR, parentId); } } }
// 开始代码 public List<DeptLevelDto> deptTree() { List<SysDept> deptList = sysDeptMapper.getAllDept(); List<DeptLevelDto> dtoList = Lists.newArrayList(); for (SysDept dept : deptList) { DeptLevelDto dto = DeptLevelDto.adapt(dept); dtoList.add(dto); } return deptListToTree(dtoList); }
public List<DeptLevelDto> deptListToTree(List<DeptLevelDto> deptLevelList) { if (CollectionUtils.isEmpty(deptLevelList)) { return Lists.newArrayList(); } // level -> [dept1, dept2, ...] Map<String, List<Object>> Multimap<String, DeptLevelDto> levelDeptMap = ArrayListMultimap.create(); List<DeptLevelDto> rootList = Lists.newArrayList(); for (DeptLevelDto dto : deptLevelList) { levelDeptMap.put(dto.getLevel(), dto); if (LevelUtil.ROOT.equals(dto.getLevel())) { rootList.add(dto); } } // 按照seq从小到大排序 Collections.sort(rootList, new Comparator<DeptLevelDto>() { public int compare(DeptLevelDto o1, DeptLevelDto o2) { return o1.getSeq() - o2.getSeq(); } }); // 递归生成树 transformDeptTree(rootList, LevelUtil.ROOT, levelDeptMap); return rootList; }
// level:0, 0, all 0->0.1,0.2 // level:0.1 // level:0.2 public void transformDeptTree(List<DeptLevelDto> deptLevelList, String level, Multimap<String, DeptLevelDto> levelDeptMap) { for (int i = 0; i < deptLevelList.size(); i++) { // 遍历该层的每个元素 DeptLevelDto deptLevelDto = deptLevelList.get(i); // 处理当前层级的数据 String nextLevel = LevelUtil.calculateLevel(level, deptLevelDto.getId()); // 处理下一层 List<DeptLevelDto> tempDeptList = (List<DeptLevelDto>) levelDeptMap.get(nextLevel); if (CollectionUtils.isNotEmpty(tempDeptList)) { // 排序 Collections.sort(tempDeptList, deptSeqComparator); // 设置下一层部门 deptLevelDto.setDeptList(tempDeptList); // 进入到下一层处理 transformDeptTree(tempDeptList, nextLevel, levelDeptMap); } } } public Comparator<DeptLevelDto> deptSeqComparator = new Comparator<DeptLevelDto>() { public int compare(DeptLevelDto o1, DeptLevelDto o2) { return o1.getSeq() - o2.getSeq(); } }; public Comparator<AclModuleLevelDto> aclModuleSeqComparator = new Comparator<AclModuleLevelDto>() { public int compare(AclModuleLevelDto o1, AclModuleLevelDto o2) { return o1.getSeq() - o2.getSeq(); } }; public Comparator<AclDto> aclSeqComparator = new Comparator<AclDto>() { public int compare(AclDto o1, AclDto o2) { return o1.getSeq() - o2.getSeq(); } };
查询更多 感谢支持。可联系小编交流!