部门列表筛选公共方法优化
This commit is contained in:
+70
-35
@@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -39,48 +40,82 @@ public class SysPayDepartServiceImpl extends ServiceImpl<SysPayDepartMapper, Sys
|
||||
*/
|
||||
@Override
|
||||
public List<String> getAllCascadeDeptIds(String deptId) {
|
||||
List<String> allDeptIds = new ArrayList<>();
|
||||
if (deptId == null) {
|
||||
return allDeptIds;
|
||||
}
|
||||
// 从目标部门开始递归查询
|
||||
recursiveQueryDeptIds(deptId, allDeptIds);
|
||||
return allDeptIds;
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归查询部门ID及其所有子部门ID
|
||||
* @param deptId 当前部门ID
|
||||
* @param result 用于收集结果的集合
|
||||
*/
|
||||
private void recursiveQueryDeptIds(String deptId, List<String> result) {
|
||||
// 1. 先查询当前部门信息并添加到结果集(去重)
|
||||
if (!result.contains(deptId)) {
|
||||
// 验证当前部门是否存在且有效
|
||||
SysPayDepart currentDept = this.getOne(new LambdaQueryWrapper<SysPayDepart>()
|
||||
.eq(SysPayDepart::getId, deptId)
|
||||
.eq(SysPayDepart::getDelFlag, "0"));
|
||||
|
||||
if (currentDept != null) {
|
||||
result.add(deptId);
|
||||
} else {
|
||||
// 当前部门不存在或已删除,终止递归
|
||||
return;
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// 2. 查询当前部门的直接子部门
|
||||
List<SysPayDepart> childDepts = this.list(new LambdaQueryWrapper<SysPayDepart>()
|
||||
.eq(SysPayDepart::getParentId, deptId)
|
||||
// 1. 一次性查询所有有效部门
|
||||
List<SysPayDepart> allDepts = this.list(new LambdaQueryWrapper<SysPayDepart>()
|
||||
.eq(SysPayDepart::getDelFlag, "0"));
|
||||
|
||||
// 3. 对每个子部门递归查询其下属部门
|
||||
for (SysPayDepart child : childDepts) {
|
||||
String childId = child.getId();
|
||||
// 递归处理子部门,会自动添加子部门及其下级
|
||||
recursiveQueryDeptIds(childId, result);
|
||||
// 2. 构建部门父子关系Map
|
||||
Map<String, List<String>> parentToChildrenMap = allDepts.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
SysPayDepart::getParentId,
|
||||
Collectors.mapping(SysPayDepart::getId, Collectors.toList())
|
||||
));
|
||||
|
||||
// 3. 在内存中递归查找
|
||||
List<String> result = new ArrayList<>();
|
||||
recursiveFindDeptIds(deptId, parentToChildrenMap, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private void recursiveFindDeptIds(String currentDeptId,
|
||||
Map<String, List<String>> parentToChildrenMap,
|
||||
List<String> result) {
|
||||
result.add(currentDeptId);
|
||||
List<String> children = parentToChildrenMap.get(currentDeptId);
|
||||
if (children != null) {
|
||||
for (String childId : children) {
|
||||
recursiveFindDeptIds(childId, parentToChildrenMap, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
// public List<String> getAllCascadeDeptIds(String deptId) {
|
||||
// List<String> allDeptIds = new ArrayList<>();
|
||||
// if (deptId == null) {
|
||||
// return allDeptIds;
|
||||
// }
|
||||
// // 从目标部门开始递归查询
|
||||
// recursiveQueryDeptIds(deptId, allDeptIds);
|
||||
// return allDeptIds;
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 递归查询部门ID及其所有子部门ID
|
||||
// * @param deptId 当前部门ID
|
||||
// * @param result 用于收集结果的集合
|
||||
// */
|
||||
// private void recursiveQueryDeptIds(String deptId, List<String> result) {
|
||||
// // 1. 先查询当前部门信息并添加到结果集(去重)
|
||||
// if (!result.contains(deptId)) {
|
||||
// // 验证当前部门是否存在且有效
|
||||
// SysPayDepart currentDept = this.getOne(new LambdaQueryWrapper<SysPayDepart>()
|
||||
// .eq(SysPayDepart::getId, deptId)
|
||||
// .eq(SysPayDepart::getDelFlag, "0"));
|
||||
//
|
||||
// if (currentDept != null) {
|
||||
// result.add(deptId);
|
||||
// } else {
|
||||
// // 当前部门不存在或已删除,终止递归
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 2. 查询当前部门的直接子部门
|
||||
// List<SysPayDepart> childDepts = this.list(new LambdaQueryWrapper<SysPayDepart>()
|
||||
// .eq(SysPayDepart::getParentId, deptId)
|
||||
// .eq(SysPayDepart::getDelFlag, "0"));
|
||||
//
|
||||
// // 3. 对每个子部门递归查询其下属部门
|
||||
// for (SysPayDepart child : childDepts) {
|
||||
// String childId = child.getId();
|
||||
// // 递归处理子部门,会自动添加子部门及其下级
|
||||
// recursiveQueryDeptIds(childId, result);
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user