部门列表筛选公共方法优化
This commit is contained in:
+70
-35
@@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -39,48 +40,82 @@ public class SysPayDepartServiceImpl extends ServiceImpl<SysPayDepartMapper, Sys
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<String> getAllCascadeDeptIds(String deptId) {
|
public List<String> getAllCascadeDeptIds(String deptId) {
|
||||||
List<String> allDeptIds = new ArrayList<>();
|
|
||||||
if (deptId == null) {
|
if (deptId == null) {
|
||||||
return allDeptIds;
|
return Collections.emptyList();
|
||||||
}
|
|
||||||
// 从目标部门开始递归查询
|
|
||||||
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. 查询当前部门的直接子部门
|
// 1. 一次性查询所有有效部门
|
||||||
List<SysPayDepart> childDepts = this.list(new LambdaQueryWrapper<SysPayDepart>()
|
List<SysPayDepart> allDepts = this.list(new LambdaQueryWrapper<SysPayDepart>()
|
||||||
.eq(SysPayDepart::getParentId, deptId)
|
|
||||||
.eq(SysPayDepart::getDelFlag, "0"));
|
.eq(SysPayDepart::getDelFlag, "0"));
|
||||||
|
|
||||||
// 3. 对每个子部门递归查询其下属部门
|
// 2. 构建部门父子关系Map
|
||||||
for (SysPayDepart child : childDepts) {
|
Map<String, List<String>> parentToChildrenMap = allDepts.stream()
|
||||||
String childId = child.getId();
|
.collect(Collectors.groupingBy(
|
||||||
// 递归处理子部门,会自动添加子部门及其下级
|
SysPayDepart::getParentId,
|
||||||
recursiveQueryDeptIds(childId, result);
|
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