Browse Source

获取有权限用户列表

24282 1 year ago
parent
commit
129a40169d

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -227,4 +227,9 @@ public interface ISysUserService extends IService<SysUser> {
      */
      */
     List<SysUser> getListByRoleId(Long roleId);
     List<SysUser> getListByRoleId(Long roleId);
 
 
+    /**
+     * 获取有权限查看的用户列表
+     */
+    List<SysUser> getAuthUserList();
+
 }
 }

+ 60 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -1,11 +1,15 @@
 package com.ruoyi.system.service.impl;
 package com.ruoyi.system.service.impl;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.annotation.TenantIgnore;
 import com.ruoyi.common.annotation.TenantIgnore;
 import com.ruoyi.common.constant.BaseSourceConstant;
 import com.ruoyi.common.constant.BaseSourceConstant;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.exception.ServiceException;
@@ -18,6 +22,7 @@ import com.ruoyi.system.domain.SysUserPost;
 import com.ruoyi.system.domain.SysUserRole;
 import com.ruoyi.system.domain.SysUserRole;
 import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysConfigService;
+import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.ISysUserService;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -28,8 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 
 
 import javax.validation.Validator;
 import javax.validation.Validator;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -55,6 +59,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     private SysUserPostMapper userPostMapper;
     private SysUserPostMapper userPostMapper;
     @Autowired
     @Autowired
     private ISysConfigService configService;
     private ISysConfigService configService;
+    @Autowired
+    private ISysDeptService sysDeptService;
 
 
     /**
     /**
      * 根据条件分页查询用户列表
      * 根据条件分页查询用户列表
@@ -501,4 +507,56 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return baseMapper.getListByRoleId(roleId);
         return baseMapper.getListByRoleId(roleId);
     }
     }
 
 
+    @Override
+    public List<SysUser> getAuthUserList() {
+        DynamicDataSourceContextHolder.push(BaseSourceConstant.BASE);
+
+        Long userId = SecurityUtils.getUserId();
+
+        List<SysDept> sysDeptList = sysDeptService.list(Wrappers.<SysDept>lambdaQuery()
+                .and(q -> q.eq(SysDept::getDirectorId, userId).or().eq(SysDept::getLeaderId, userId)));
+
+        if (sysDeptList.size() == 0) {
+            SysUser sysUser = getById(userId);
+            sysUser.setPassword(null);
+            return Collections.singletonList(sysUser);
+        }
+
+        Set<Long> deptSet = new HashSet<>();
+        List<SysDept> list = sysDeptService.list();
+        Map<Long, List<SysDept>> parentDeptMap = list.stream().collect(Collectors.groupingBy(SysDept::getParentId));
+
+        for (SysDept sysDept : sysDeptList) {
+            Long deptId = sysDept.getDeptId();
+
+            if (Objects.equals(sysDept.getDirectorId(), userId)) {
+                subordinateDeptId(deptId, deptSet, parentDeptMap);
+            } else {
+                deptSet.add(deptId);
+            }
+        }
+
+        List<SysUser> sysUserList = list(Wrappers.<SysUser>lambdaQuery()
+                .and(q -> q.in(SysUser::getDeptId, deptSet).or().eq(SysUser::getUserId, userId)));
+
+        sysUserList.forEach(item -> item.setPassword(null));
+
+        DynamicDataSourceContextHolder.poll();
+        return sysUserList;
+    }
+
+    private void subordinateDeptId(Long deptId, Set<Long> deptSet, Map<Long, List<SysDept>> parentDeptMap) {
+        deptSet.add(deptId);
+
+        // 获取子部门
+        List<SysDept> sysDeptList = parentDeptMap.get(deptId);
+        if (ObjectUtil.isEmpty(sysDeptList)) {
+            return;
+        }
+
+        for (SysDept sysDept : sysDeptList) {
+            subordinateDeptId(sysDept.getDeptId(), deptSet, parentDeptMap);
+        }
+    }
+
 }
 }

+ 14 - 0
ruoyi-system/src/main/java/com/ruoyi/system/utils/UserUtil.java

@@ -43,4 +43,18 @@ public class UserUtil {
         list.forEach(item -> setNickNameMap.accept(item, nickNameMapByIds.get(idMapper.apply(item))));
         list.forEach(item -> setNickNameMap.accept(item, nickNameMapByIds.get(idMapper.apply(item))));
     }
     }
 
 
+    /**
+     * 获取有权限用户列表
+     */
+    public static List<SysUser> getAuthUserList() {
+        return sysUserService.getAuthUserList();
+    }
+
+    /**
+     * 获取有权限用户id列表
+     */
+    public static List<Long> getAuthUserIdList() {
+        return getAuthUserList().stream().map(SysUser::getUserId).collect(Collectors.toList());
+    }
+
 }
 }