From 61acde27fad36108c7eae85a80d55ce0a5a5c10c Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 2 Apr 2025 18:31:07 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A6=85=E9=81=93#950=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/user/UserController.java | 11 +++- .../system/service/dept/DeptService.java | 8 +++ .../system/service/dept/DeptServiceImpl.java | 52 +++++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java index 63dc8cfe1..ed5b21f2d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java @@ -39,6 +39,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -133,8 +134,16 @@ public class UserController { public CommonResult> getDivideUser(@Valid UserPageReqVO pageReqVO) { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - return getUserPage(pageReqVO); + CommonResult> userPage = getUserPage(pageReqVO); + List userList = userPage.getCheckedData().getList(); + // 获取所有无效部门 + Set allInvalidDeptIds = deptService.getAllInvalidDeptIds(pageReqVO.getOrganId()); + if (CollUtil.isNotEmpty(allInvalidDeptIds)) { + userList.removeIf(u -> allInvalidDeptIds.contains(u.getDeptId())); + } + + return success(new PageResult<>(userList, Long.valueOf(userList.size()))); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptService.java index 391d5816b..c46ad74bf 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptService.java @@ -120,4 +120,12 @@ public interface DeptService { * @return */ List removeUnowndDept(List deptDOS); + + /** + * 获取所有无效部门id + * + * @param organId + * @return + */ + Set getAllInvalidDeptIds(Long organId); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptServiceImpl.java index cb03cae4b..0e93d9b1f 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dept/DeptServiceImpl.java @@ -2,11 +2,14 @@ package com.cf.imes.module.system.service.dept; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.cf.imes.framework.common.enums.CommonStatusEnum; import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; import com.cf.imes.framework.common.util.json.JsonUtils; import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.datapermission.core.annotation.DataPermission; +import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.system.controller.admin.dept.vo.dept.DeptListReqVO; @@ -420,4 +423,53 @@ public class DeptServiceImpl implements DeptService { topLevelCache.put(deptDO.getId(), false); return false; // 默认返回false } + + @Override + public Set getAllInvalidDeptIds(Long organId) { + if (ObjectUtils.isNull(organId)) { + organId = OrganContextHolder.getOrganId(); + } + + // 一次性加载当前 organ 下的所有部门 + List allDepts = deptMapper.selectList( + new LambdaQueryWrapper().eq(DeptDO::getOrganId, organId) + ); + + // 构建 parentId → 子部门列表 的内存映射关系 + Map> deptTree = allDepts.stream() + .collect(Collectors.groupingBy(DeptDO::getParentId)); + + Set invalidDeptIds = new HashSet<>(); + // 获取所有根部门(parentId=0) + List topDepts = deptTree.getOrDefault(0L, Collections.emptyList()); + for (DeptDO topDept : topDepts) { + collectInvalidDeptIdsOptimized(topDept, + topDept.getStatus().equals(CommonStatusEnum.DISABLE.getStatus()), + deptTree, + invalidDeptIds + ); + } + return invalidDeptIds; + } + + /** + * 优化后的递归方法(内存操作,无数据库查询) + */ + private void collectInvalidDeptIdsOptimized(DeptDO currentDept, + boolean parentClosed, + Map> deptTree, + Set result) { + boolean currentClosed = parentClosed || + currentDept.getStatus().equals(CommonStatusEnum.DISABLE.getStatus()); + + if (currentClosed) { + result.add(currentDept.getId()); + } + + // 直接从内存映射中获取子部门(无需查数据库) + List children = deptTree.getOrDefault(currentDept.getId(), Collections.emptyList()); + for (DeptDO child : children) { + collectInvalidDeptIdsOptimized(child, currentClosed, deptTree, result); + } + } }