部门列表筛选公共方法优化

This commit is contained in:
hejiayang
2025-12-19 11:52:48 +08:00
parent 515b231718
commit 1ec8f5ad62
@@ -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);
// }
// }
/**