diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java index c0d7b0eff2..aa6c8f076f 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java @@ -5,6 +5,8 @@ import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; +import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; @@ -18,6 +20,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import jakarta.annotation.Resource; + import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -164,9 +167,39 @@ public class DeptServiceImpl implements DeptService { @Override public List getDeptList(DeptListReqVO reqVO) { - List list = deptMapper.selectList(reqVO); - list.sort(Comparator.comparing(DeptDO::getSort)); - return list; + List list = DataPermissionUtils.executeIgnore(() -> { + return deptMapper.selectList(reqVO); + }); + Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId(); + //从当前登录的部门开始,递归获取子部门 + // 从当前登录的部门开始, 递归获取所有子部门 + List allSubDepts = new ArrayList<>(); + if (loginUserDeptId != null) { + DeptDO currentDept = deptMapper.selectById(loginUserDeptId); + if (currentDept != null) { + allSubDepts.add(currentDept); + collectAllSubDept(allSubDepts, currentDept.getId(), list); + } + } + // 合并所有子部门到结果列表中 + allSubDepts.sort(Comparator.comparing(DeptDO::getSort)); + return allSubDepts; + } + + /** + * 递归收集所有子部门. + * + * @param allSubDepts 收集所有子部门的列表 + * @param parentId 父部门ID + * @param allDepts 所有部门的列表 + */ + private void collectAllSubDept(List allSubDepts, Long parentId, List allDepts) { + for (DeptDO dept : allDepts) { + if (parentId.equals(dept.getParentId())) { + allSubDepts.add(dept); + collectAllSubDept(allSubDepts, dept.getId(), allDepts); // 递归收集子部门 + } + } } @Override