// 准备使用到的实体类
@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();
}
};查询更多 感谢支持。可联系小编交流!
版权声明:本文为qq_36286574原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。