diff --git a/playedu-api/src/main/java/xyz/playedu/api/controller/backend/DepartmentController.java b/playedu-api/src/main/java/xyz/playedu/api/controller/backend/DepartmentController.java index 8572688..317055b 100644 --- a/playedu-api/src/main/java/xyz/playedu/api/controller/backend/DepartmentController.java +++ b/playedu-api/src/main/java/xyz/playedu/api/controller/backend/DepartmentController.java @@ -38,6 +38,7 @@ import xyz.playedu.common.domain.Department; import xyz.playedu.common.domain.User; import xyz.playedu.common.exception.NotFoundException; import xyz.playedu.common.service.DepartmentService; +import xyz.playedu.common.service.UserDepartmentService; import xyz.playedu.common.service.UserService; import xyz.playedu.common.types.JsonResponse; import xyz.playedu.common.types.paginate.PaginationResult; @@ -71,12 +72,39 @@ public class DepartmentController { @Autowired private LDAPBus ldapBus; + @Autowired private UserDepartmentService userDepartmentService; + @GetMapping("/index") @Log(title = "部门-列表", businessType = BusinessTypeConstant.GET) public JsonResponse index() { HashMap data = new HashMap<>(); data.put("departments", departmentService.groupByParent()); - data.put("dep_user_count", departmentService.getDepartmentsUserCount()); + + HashMap depUserCount = new HashMap<>(); + List allDepartmentList = departmentService.all(); + if (StringUtil.isNotEmpty(allDepartmentList)) { + for (Department dep : allDepartmentList) { + List depIds = new ArrayList<>(); + depIds.add(dep.getId()); + String parentChain = ""; + if (StringUtil.isEmpty(dep.getParentChain())) { + parentChain = dep.getId() + ""; + } else { + parentChain = dep.getParentChain() + "," + dep.getId(); + } + // 获取所有子部门ID + List childDepartmentList = + departmentService.getChildDepartmentsByParentChain( + dep.getId(), parentChain); + if (StringUtil.isNotEmpty(childDepartmentList)) { + depIds.addAll(childDepartmentList.stream().map(Department::getId).toList()); + } + List departmentUserIds = userDepartmentService.getUserIdsByDepIds(depIds); + depUserCount.put( + dep.getId(), departmentUserIds.stream().distinct().toList().size()); + } + } + data.put("dep_user_count", depUserCount); data.put("user_total", userService.total()); return JsonResponse.data(data); } diff --git a/playedu-api/src/main/java/xyz/playedu/api/controller/backend/UserController.java b/playedu-api/src/main/java/xyz/playedu/api/controller/backend/UserController.java index 6c1e56a..8b4e906 100644 --- a/playedu-api/src/main/java/xyz/playedu/api/controller/backend/UserController.java +++ b/playedu-api/src/main/java/xyz/playedu/api/controller/backend/UserController.java @@ -107,11 +107,31 @@ public class UserController { String createdAt = MapUtils.getString(params, "created_at"); String depIdsStr = MapUtils.getString(params, "dep_ids"); List depIds = null; - if (depIdsStr != null && !depIdsStr.trim().isEmpty()) { - if ("0".equals(depIdsStr)) { - depIds = new ArrayList<>(); - } else { - depIds = Arrays.stream(depIdsStr.split(",")).map(Integer::valueOf).toList(); + if (StringUtil.isNotEmpty(depIdsStr)) { + depIds = new ArrayList<>(); + if (!"0".equals(depIdsStr)) { + List departmentList = + departmentService.chunk( + Arrays.stream(depIdsStr.split(",")).map(Integer::valueOf).toList()); + if (StringUtil.isNotEmpty(departmentList)) { + for (Department dep : departmentList) { + depIds.add(dep.getId()); + String parentChain = ""; + if (StringUtil.isEmpty(dep.getParentChain())) { + parentChain = dep.getId() + ""; + } else { + parentChain = dep.getParentChain() + "," + dep.getId(); + } + // 获取所有子部门ID + List childDepartmentList = + departmentService.getChildDepartmentsByParentChain( + dep.getId(), parentChain); + if (StringUtil.isNotEmpty(childDepartmentList)) { + depIds.addAll( + childDepartmentList.stream().map(Department::getId).toList()); + } + } + } } } diff --git a/playedu-common/src/main/java/xyz/playedu/common/service/DepartmentService.java b/playedu-common/src/main/java/xyz/playedu/common/service/DepartmentService.java index cc0e090..989aefd 100644 --- a/playedu-common/src/main/java/xyz/playedu/common/service/DepartmentService.java +++ b/playedu-common/src/main/java/xyz/playedu/common/service/DepartmentService.java @@ -70,4 +70,6 @@ public interface DepartmentService extends IService { Department findByName(String name, Integer parentId); List getChildDepartmentsByParentId(Integer parentId); + + List getChildDepartmentsByParentChain(Integer parentId, String parentChain); } diff --git a/playedu-common/src/main/java/xyz/playedu/common/service/impl/DepartmentServiceImpl.java b/playedu-common/src/main/java/xyz/playedu/common/service/impl/DepartmentServiceImpl.java index 6f8cf25..b96cc91 100644 --- a/playedu-common/src/main/java/xyz/playedu/common/service/impl/DepartmentServiceImpl.java +++ b/playedu-common/src/main/java/xyz/playedu/common/service/impl/DepartmentServiceImpl.java @@ -32,6 +32,7 @@ import xyz.playedu.common.mapper.DepartmentMapper; import xyz.playedu.common.service.DepartmentService; import xyz.playedu.common.service.UserDepartmentService; import xyz.playedu.common.types.mapper.DepartmentsUserCountMapRes; +import xyz.playedu.common.util.StringUtil; import java.util.*; import java.util.stream.Collectors; @@ -302,4 +303,16 @@ public class DepartmentServiceImpl extends ServiceImpl getChildDepartmentsByParentChain(Integer parentId, String parentChain) { + if (StringUtil.isEmpty(parentChain)) { + return new ArrayList<>(); + } + return list( + query().getWrapper() + .eq("parent_id", parentId) + .or() + .likeRight("parent_chain", parentChain + ",")); + } }