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); +// } +// } /**