diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/system/service/impl/SysPayDepartServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/system/service/impl/SysPayDepartServiceImpl.java
index 7fa845c..76324d9 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/system/service/impl/SysPayDepartServiceImpl.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/system/service/impl/SysPayDepartServiceImpl.java
@@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
+import java.util.stream.Collectors;
/**
*
@@ -39,48 +40,82 @@ public class SysPayDepartServiceImpl extends ServiceImpl getAllCascadeDeptIds(String deptId) {
- List 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 result) {
- // 1. 先查询当前部门信息并添加到结果集(去重)
- if (!result.contains(deptId)) {
- // 验证当前部门是否存在且有效
- SysPayDepart currentDept = this.getOne(new LambdaQueryWrapper()
- .eq(SysPayDepart::getId, deptId)
- .eq(SysPayDepart::getDelFlag, "0"));
-
- if (currentDept != null) {
- result.add(deptId);
- } else {
- // 当前部门不存在或已删除,终止递归
- return;
- }
+ return Collections.emptyList();
}
- // 2. 查询当前部门的直接子部门
- List childDepts = this.list(new LambdaQueryWrapper()
- .eq(SysPayDepart::getParentId, deptId)
+ // 1. 一次性查询所有有效部门
+ List allDepts = this.list(new LambdaQueryWrapper()
.eq(SysPayDepart::getDelFlag, "0"));
- // 3. 对每个子部门递归查询其下属部门
- for (SysPayDepart child : childDepts) {
- String childId = child.getId();
- // 递归处理子部门,会自动添加子部门及其下级
- recursiveQueryDeptIds(childId, result);
+ // 2. 构建部门父子关系Map
+ Map> parentToChildrenMap = allDepts.stream()
+ .collect(Collectors.groupingBy(
+ SysPayDepart::getParentId,
+ Collectors.mapping(SysPayDepart::getId, Collectors.toList())
+ ));
+
+ // 3. 在内存中递归查找
+ List result = new ArrayList<>();
+ recursiveFindDeptIds(deptId, parentToChildrenMap, result);
+ return result;
+ }
+
+ private void recursiveFindDeptIds(String currentDeptId,
+ Map> parentToChildrenMap,
+ List result) {
+ result.add(currentDeptId);
+ List children = parentToChildrenMap.get(currentDeptId);
+ if (children != null) {
+ for (String childId : children) {
+ recursiveFindDeptIds(childId, parentToChildrenMap, result);
+ }
}
}
+//
+// public List getAllCascadeDeptIds(String deptId) {
+// List 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 result) {
+// // 1. 先查询当前部门信息并添加到结果集(去重)
+// if (!result.contains(deptId)) {
+// // 验证当前部门是否存在且有效
+// SysPayDepart currentDept = this.getOne(new LambdaQueryWrapper()
+// .eq(SysPayDepart::getId, deptId)
+// .eq(SysPayDepart::getDelFlag, "0"));
+//
+// if (currentDept != null) {
+// result.add(deptId);
+// } else {
+// // 当前部门不存在或已删除,终止递归
+// return;
+// }
+// }
+//
+// // 2. 查询当前部门的直接子部门
+// List childDepts = this.list(new LambdaQueryWrapper()
+// .eq(SysPayDepart::getParentId, deptId)
+// .eq(SysPayDepart::getDelFlag, "0"));
+//
+// // 3. 对每个子部门递归查询其下属部门
+// for (SysPayDepart child : childDepts) {
+// String childId = child.getId();
+// // 递归处理子部门,会自动添加子部门及其下级
+// recursiveQueryDeptIds(childId, result);
+// }
+// }
/**