diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java index 774f26a3..87185c94 100644 --- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -23,6 +23,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.web.core.BaseController; +import org.dromara.system.domain.SysUser; import org.dromara.system.domain.bo.SysDeptBo; import org.dromara.system.domain.bo.SysPostBo; import org.dromara.system.domain.bo.SysRoleBo; @@ -85,7 +86,8 @@ public class SysUserController extends BaseController { @SaCheckPermission("system:user:import") @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public R importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception { - ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport)); + ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, + new SysUserImportListener(updateSupport)); return R.ok(result.getAnalysis()); } @@ -126,7 +128,7 @@ public class SysUserController extends BaseController { * @param userId 用户ID */ @SaCheckPermission("system:user:query") - @GetMapping(value = {"/", "/{userId}"}) + @GetMapping(value = { "/", "/{userId}" }) public R getInfo(@PathVariable(value = "userId", required = false) Long userId) { SysUserInfoVo userInfoVo = new SysUserInfoVo(); if (ObjectUtil.isNotNull(userId)) { @@ -145,7 +147,8 @@ public class SysUserController extends BaseController { SysRoleBo roleBo = new SysRoleBo(); roleBo.setStatus(SystemConstants.NORMAL); List roles = roleService.selectRoleList(roleBo); - userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin())); + userInfoVo + .setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin())); return R.ok(userInfoVo); } @@ -217,7 +220,7 @@ public class SysUserController extends BaseController { @SaCheckPermission("system:user:query") @GetMapping("/optionselect") public R> optionselect(@RequestParam(required = false) Long[] userIds, - @RequestParam(required = false) Long deptId) { + @RequestParam(required = false) Long deptId) { return R.ok(userService.selectUserByIds(ArrayUtil.isEmpty(userIds) ? null : List.of(userIds), deptId)); } @@ -260,7 +263,8 @@ public class SysUserController extends BaseController { List roles = roleService.selectRolesAuthByUserId(userId); SysUserInfoVo userInfoVo = new SysUserInfoVo(); userInfoVo.setUser(user); - userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin())); + userInfoVo + .setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin())); return R.ok(userInfoVo); } @@ -297,4 +301,14 @@ public class SysUserController extends BaseController { return R.ok(userService.selectUserListByDept(deptId)); } + /** + * 根据权限标识获取用户列表 + */ + @SaCheckPermission("system:user:list") + @GetMapping("/list-by-permission") + public R> listUsersByPermission( + @RequestParam("permission") String permission, + @RequestParam(value = "tenantId", required = false) String tenantId) { + return R.ok(userService.selectUserListByPermission(permission, tenantId)); + } } diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java index 46695aa4..a266b23b 100644 --- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java +++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -20,104 +21,138 @@ import java.util.List; */ public interface SysUserMapper extends BaseMapperPlus { - /** - * 分页查询用户列表,并进行数据权限控制 - * - * @param page 分页参数 - * @param queryWrapper 查询条件 - * @return 分页的用户信息 - */ - @DataPermission({ - @DataColumn(key = "deptName", value = "u.dept_id"), - @DataColumn(key = "userName", value = "u.user_id") - }) - Page selectPageUserList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + /** + * 分页查询用户列表,并进行数据权限控制 + * + * @param page 分页参数 + * @param queryWrapper 查询条件 + * @return 分页的用户信息 + */ + @DataPermission({ + @DataColumn(key = "deptName", value = "u.dept_id"), + @DataColumn(key = "userName", value = "u.user_id") + }) + Page selectPageUserList(@Param("page") Page page, + @Param(Constants.WRAPPER) Wrapper queryWrapper); - /** - * 查询用户列表,并进行数据权限控制 - * - * @param queryWrapper 查询条件 - * @return 用户信息集合 - */ - @DataPermission({ - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") - }) - List selectUserList(@Param(Constants.WRAPPER) Wrapper queryWrapper); + /** + * 查询用户列表,并进行数据权限控制 + * + * @param queryWrapper 查询条件 + * @return 用户信息集合 + */ + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) + List selectUserList(@Param(Constants.WRAPPER) Wrapper queryWrapper); - /** - * 根据条件分页查询用户列表 - * - * @param queryWrapper 查询条件 - * @return 用户信息集合信息 - */ - @DataPermission({ - @DataColumn(key = "deptName", value = "d.dept_id"), - @DataColumn(key = "userName", value = "u.user_id") - }) - List selectUserExportList(@Param(Constants.WRAPPER) Wrapper queryWrapper); + /** + * 根据条件分页查询用户列表 + * + * @param queryWrapper 查询条件 + * @return 用户信息集合信息 + */ + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id"), + @DataColumn(key = "userName", value = "u.user_id") + }) + List selectUserExportList(@Param(Constants.WRAPPER) Wrapper queryWrapper); - /** - * 根据条件分页查询已配用户角色列表 - * - * @param queryWrapper 查询条件 - * @return 用户信息集合信息 - */ - @DataPermission({ - @DataColumn(key = "deptName", value = "d.dept_id"), - @DataColumn(key = "userName", value = "u.user_id") - }) - Page selectAllocatedList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + /** + * 根据条件分页查询已配用户角色列表 + * + * @param queryWrapper 查询条件 + * @return 用户信息集合信息 + */ + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id"), + @DataColumn(key = "userName", value = "u.user_id") + }) + Page selectAllocatedList(@Param("page") Page page, + @Param(Constants.WRAPPER) Wrapper queryWrapper); - /** - * 根据条件分页查询未分配用户角色列表 - * - * @param queryWrapper 查询条件 - * @return 用户信息集合信息 - */ - @DataPermission({ - @DataColumn(key = "deptName", value = "d.dept_id"), - @DataColumn(key = "userName", value = "u.user_id") - }) - Page selectUnallocatedList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param queryWrapper 查询条件 + * @return 用户信息集合信息 + */ + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id"), + @DataColumn(key = "userName", value = "u.user_id") + }) + Page selectUnallocatedList(@Param("page") Page page, + @Param(Constants.WRAPPER) Wrapper queryWrapper); - /** - * 根据用户ID统计用户数量 - * - * @param userId 用户ID - * @return 用户数量 - */ - @DataPermission({ - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") - }) - long countUserById(Long userId); + /** + * 根据用户ID统计用户数量 + * + * @param userId 用户ID + * @return 用户数量 + */ + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) + long countUserById(Long userId); - /** - * 根据条件更新用户数据 - * - * @param user 要更新的用户实体 - * @param updateWrapper 更新条件封装器 - * @return 更新操作影响的行数 - */ - @Override - @DataPermission({ - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") - }) - int update(@Param(Constants.ENTITY) SysUser user, @Param(Constants.WRAPPER) Wrapper updateWrapper); + /** + * 根据权限标识获取用户列表 + * + * @param permission 权限标识 + * @param tenantId 租户ID + * @return 用户列表 + */ + @Select(""" + SELECT DISTINCT + su.* + FROM + sys_user su + INNER JOIN sys_user_role sur ON su.user_id = sur.user_id + INNER JOIN sys_role sr ON sur.role_id = sr.role_id + INNER JOIN sys_role_menu srm ON sr.role_id = srm.role_id + INNER JOIN sys_menu sm ON srm.menu_id = sm.menu_id + WHERE + su.del_flag = '0' + AND su.status = '0' + AND sr.del_flag = '0' + AND sr.status = '0' + AND sm.perms = #{permission} + + AND su.tenant_id = #{tenantId} + + ORDER BY + su.user_id + """) + List selectUserListByPermission(@Param("permission") String permission, + @Param("tenantId") String tenantId); - /** - * 根据用户ID更新用户数据 - * - * @param user 要更新的用户实体 - * @return 更新操作影响的行数 - */ - @Override - @DataPermission({ - @DataColumn(key = "deptName", value = "dept_id"), - @DataColumn(key = "userName", value = "user_id") - }) - int updateById(@Param(Constants.ENTITY) SysUser user); + /** + * 根据条件更新用户数据 + * + * @param user 要更新的用户实体 + * @param updateWrapper 更新条件封装器 + * @return 更新操作影响的行数 + */ + @Override + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) + int update(@Param(Constants.ENTITY) SysUser user, @Param(Constants.WRAPPER) Wrapper updateWrapper); + + /** + * 根据用户ID更新用户数据 + * + * @param user 要更新的用户实体 + * @return 更新操作影响的行数 + */ + @Override + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "user_id") + }) + int updateById(@Param(Constants.ENTITY) SysUser user); } diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java index 1fe55454..1c1a2bc8 100644 --- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.domain.SysUser; import java.util.List; @@ -15,7 +16,6 @@ import java.util.List; */ public interface ISysUserService { - /** * 根据条件分页查询用户列表 * @@ -228,4 +228,13 @@ public interface ISysUserService { * @return 结果 */ List selectUserListByDept(Long deptId); + + /** + * 根据权限标识获取用户列表 + * + * @param permission 权限标识 + * @param tenantId 租户ID + * @return 用户列表 + */ + List selectUserListByPermission(String permission, String tenantId); } diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index cc2cc88a..b7c463e4 100644 --- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -76,20 +76,21 @@ public class SysUserServiceImpl implements ISysUserService, UserService { Map params = user.getParams(); QueryWrapper wrapper = Wrappers.query(); wrapper.eq("u.del_flag", SystemConstants.NORMAL) - .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId()) - .in(StringUtils.isNotBlank(user.getUserIds()), "u.user_id", StringUtils.splitTo(user.getUserIds(), Convert::toLong)) - .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) - .like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName()) - .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus()) - .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) - .between(params.get("beginTime") != null && params.get("endTime") != null, - "u.create_time", params.get("beginTime"), params.get("endTime")) - .and(ObjectUtil.isNotNull(user.getDeptId()), w -> { - List deptList = deptMapper.selectListByParentId(user.getDeptId()); - List ids = StreamUtils.toList(deptList, SysDept::getDeptId); - ids.add(user.getDeptId()); - w.in("u.dept_id", ids); - }).orderByAsc("u.user_id"); + .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId()) + .in(StringUtils.isNotBlank(user.getUserIds()), "u.user_id", + StringUtils.splitTo(user.getUserIds(), Convert::toLong)) + .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) + .like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName()) + .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus()) + .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) + .between(params.get("beginTime") != null && params.get("endTime") != null, + "u.create_time", params.get("beginTime"), params.get("endTime")) + .and(ObjectUtil.isNotNull(user.getDeptId()), w -> { + List deptList = deptMapper.selectListByParentId(user.getDeptId()); + List ids = StreamUtils.toList(deptList, SysDept::getDeptId); + ids.add(user.getDeptId()); + w.in("u.dept_id", ids); + }).orderByAsc("u.user_id"); if (StringUtils.isNotBlank(user.getExcludeUserIds())) { wrapper.notIn("u.user_id", StringUtils.splitTo(user.getExcludeUserIds(), Convert::toLong)); } @@ -106,11 +107,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService { public TableDataInfo selectAllocatedList(SysUserBo user, PageQuery pageQuery) { QueryWrapper wrapper = Wrappers.query(); wrapper.eq("u.del_flag", SystemConstants.NORMAL) - .eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId()) - .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) - .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus()) - .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) - .orderByAsc("u.user_id"); + .eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId()) + .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) + .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus()) + .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) + .orderByAsc("u.user_id"); Page page = baseMapper.selectAllocatedList(pageQuery.build(), wrapper); return TableDataInfo.build(page); } @@ -126,11 +127,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService { List userIds = userRoleMapper.selectUserIdsByRoleId(user.getRoleId()); QueryWrapper wrapper = Wrappers.query(); wrapper.eq("u.del_flag", SystemConstants.NORMAL) - .and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id")) - .notIn(CollUtil.isNotEmpty(userIds), "u.user_id", userIds) - .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) - .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) - .orderByAsc("u.user_id"); + .and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id")) + .notIn(CollUtil.isNotEmpty(userIds), "u.user_id", userIds) + .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) + .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) + .orderByAsc("u.user_id"); Page page = baseMapper.selectUnallocatedList(pageQuery.build(), wrapper); return TableDataInfo.build(page); } @@ -183,10 +184,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public List selectUserByIds(List userIds, Long deptId) { return baseMapper.selectUserList(new LambdaQueryWrapper() - .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName) - .eq(SysUser::getStatus, SystemConstants.NORMAL) - .eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId) - .in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds)); + .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName) + .eq(SysUser::getStatus, SystemConstants.NORMAL) + .eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId) + .in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds)); } /** @@ -228,8 +229,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public boolean checkUserNameUnique(SysUserBo user) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() - .eq(SysUser::getUserName, user.getUserName()) - .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); + .eq(SysUser::getUserName, user.getUserName()) + .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); return !exist; } @@ -241,8 +242,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public boolean checkPhoneUnique(SysUserBo user) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() - .eq(SysUser::getPhonenumber, user.getPhonenumber()) - .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); + .eq(SysUser::getPhonenumber, user.getPhonenumber()) + .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); return !exist; } @@ -254,8 +255,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public boolean checkEmailUnique(SysUserBo user) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() - .eq(SysUser::getEmail, user.getEmail()) - .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); + .eq(SysUser::getEmail, user.getEmail()) + .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); return !exist; } @@ -369,9 +370,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public int updateUserStatus(Long userId, String status) { return baseMapper.update(null, - new LambdaUpdateWrapper() - .set(SysUser::getStatus, status) - .eq(SysUser::getUserId, userId)); + new LambdaUpdateWrapper() + .set(SysUser::getStatus, status) + .eq(SysUser::getUserId, userId)); } /** @@ -384,12 +385,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public int updateUserProfile(SysUserBo user) { return baseMapper.update(null, - new LambdaUpdateWrapper() - .set(ObjectUtil.isNotNull(user.getNickName()), SysUser::getNickName, user.getNickName()) - .set(SysUser::getPhonenumber, user.getPhonenumber()) - .set(SysUser::getEmail, user.getEmail()) - .set(SysUser::getSex, user.getSex()) - .eq(SysUser::getUserId, user.getUserId())); + new LambdaUpdateWrapper() + .set(ObjectUtil.isNotNull(user.getNickName()), SysUser::getNickName, user.getNickName()) + .set(SysUser::getPhonenumber, user.getPhonenumber()) + .set(SysUser::getEmail, user.getEmail()) + .set(SysUser::getSex, user.getSex()) + .eq(SysUser::getUserId, user.getUserId())); } /** @@ -402,9 +403,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public boolean updateUserAvatar(Long userId, Long avatar) { return baseMapper.update(null, - new LambdaUpdateWrapper() - .set(SysUser::getAvatar, avatar) - .eq(SysUser::getUserId, userId)) > 0; + new LambdaUpdateWrapper() + .set(SysUser::getAvatar, avatar) + .eq(SysUser::getUserId, userId)) > 0; } /** @@ -417,9 +418,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public int resetUserPwd(Long userId, String password) { return baseMapper.update(null, - new LambdaUpdateWrapper() - .set(SysUser::getPassword, password) - .eq(SysUser::getUserId, userId)); + new LambdaUpdateWrapper() + .set(SysUser::getPassword, password) + .eq(SysUser::getUserId, userId)); } /** @@ -443,7 +444,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService { if (ArrayUtil.isNotEmpty(posts)) { if (clear) { // 删除用户与岗位关联 - userPostMapper.delete(new LambdaQueryWrapper().eq(SysUserPost::getUserId, user.getUserId())); + userPostMapper + .delete(new LambdaQueryWrapper().eq(SysUserPost::getUserId, user.getUserId())); } // 新增用户与岗位管理 List list = StreamUtils.toList(List.of(posts), postId -> { @@ -471,7 +473,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } // 判断是否具有此角色的操作权限 List roles = roleMapper.selectRoleList( - new QueryWrapper().in("r.role_id", roleList)); + new QueryWrapper().in("r.role_id", roleList)); if (CollUtil.isEmpty(roles)) { throw new ServiceException("没有权限访问角色的数据"); } @@ -561,7 +563,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public String selectUserNameById(Long userId) { SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper() - .select(SysUser::getUserName).eq(SysUser::getUserId, userId)); + .select(SysUser::getUserName).eq(SysUser::getUserId, userId)); return ObjectUtils.notNullGetter(sysUser, SysUser::getUserName); } @@ -575,7 +577,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Cacheable(cacheNames = CacheNames.SYS_NICKNAME, key = "#userId") public String selectNicknameById(Long userId) { SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper() - .select(SysUser::getNickName).eq(SysUser::getUserId, userId)); + .select(SysUser::getNickName).eq(SysUser::getUserId, userId)); return ObjectUtils.notNullGetter(sysUser, SysUser::getNickName); } @@ -606,7 +608,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public String selectPhonenumberById(Long userId) { SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper() - .select(SysUser::getPhonenumber).eq(SysUser::getUserId, userId)); + .select(SysUser::getPhonenumber).eq(SysUser::getUserId, userId)); return ObjectUtils.notNullGetter(sysUser, SysUser::getPhonenumber); } @@ -619,7 +621,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public String selectEmailById(Long userId) { SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper() - .select(SysUser::getEmail).eq(SysUser::getUserId, userId)); + .select(SysUser::getEmail).eq(SysUser::getUserId, userId)); return ObjectUtils.notNullGetter(sysUser, SysUser::getEmail); } @@ -635,9 +637,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return List.of(); } List list = baseMapper.selectVoList(new LambdaQueryWrapper() - .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber) - .eq(SysUser::getStatus, SystemConstants.NORMAL) - .in(SysUser::getUserId, userIds)); + .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, + SysUser::getPhonenumber) + .eq(SysUser::getStatus, SystemConstants.NORMAL) + .in(SysUser::getUserId, userIds)); return BeanUtil.copyToList(list, UserDTO.class); } @@ -653,7 +656,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return List.of(); } List userRoles = userRoleMapper.selectList( - new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds)); + new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds)); return StreamUtils.toList(userRoles, SysUserRole::getUserId); } @@ -671,7 +674,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { // 通过角色ID获取用户角色信息 List userRoles = userRoleMapper.selectList( - new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds)); + new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds)); // 获取用户ID列表 Set userIds = StreamUtils.toSet(userRoles, SysUserRole::getUserId); @@ -691,9 +694,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return List.of(); } List list = baseMapper.selectVoList(new LambdaQueryWrapper() - .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber) - .eq(SysUser::getStatus, SystemConstants.NORMAL) - .in(SysUser::getDeptId, deptIds)); + .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, + SysUser::getPhonenumber) + .eq(SysUser::getStatus, SystemConstants.NORMAL) + .in(SysUser::getDeptId, deptIds)); return BeanUtil.copyToList(list, UserDTO.class); } @@ -711,7 +715,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { // 通过岗位ID获取用户岗位信息 List userPosts = userPostMapper.selectList( - new LambdaQueryWrapper().in(SysUserPost::getPostId, postIds)); + new LambdaQueryWrapper().in(SysUserPost::getPostId, postIds)); // 获取用户ID列表 Set userIds = StreamUtils.toSet(userPosts, SysUserPost::getUserId); @@ -732,10 +736,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } return baseMapper.selectList( new LambdaQueryWrapper() - .select(SysUser::getUserId, SysUser::getNickName) - .in(SysUser::getUserId, userIds) - ).stream() - .collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName)); + .select(SysUser::getUserId, SysUser::getNickName) + .in(SysUser::getUserId, userIds)) + .stream() + .collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName)); } /** @@ -751,10 +755,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } return roleMapper.selectList( new LambdaQueryWrapper() - .select(SysRole::getRoleId, SysRole::getRoleName) - .in(SysRole::getRoleId, roleIds) - ).stream() - .collect(Collectors.toMap(SysRole::getRoleId, SysRole::getRoleName)); + .select(SysRole::getRoleId, SysRole::getRoleName) + .in(SysRole::getRoleId, roleIds)) + .stream() + .collect(Collectors.toMap(SysRole::getRoleId, SysRole::getRoleName)); } /** @@ -770,10 +774,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } return deptMapper.selectList( new LambdaQueryWrapper() - .select(SysDept::getDeptId, SysDept::getDeptName) - .in(SysDept::getDeptId, deptIds) - ).stream() - .collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName)); + .select(SysDept::getDeptId, SysDept::getDeptName) + .in(SysDept::getDeptId, deptIds)) + .stream() + .collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName)); } /** @@ -789,10 +793,22 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } return postMapper.selectList( new LambdaQueryWrapper() - .select(SysPost::getPostId, SysPost::getPostName) - .in(SysPost::getPostId, postIds) - ).stream() - .collect(Collectors.toMap(SysPost::getPostId, SysPost::getPostName)); + .select(SysPost::getPostId, SysPost::getPostName) + .in(SysPost::getPostId, postIds)) + .stream() + .collect(Collectors.toMap(SysPost::getPostId, SysPost::getPostName)); + } + + /** + * 根据权限标识获取用户列表 + * + * @param permission 权限标识 + * @param tenantId 租户ID + * @return 用户列表 + */ + @Override + public List selectUserListByPermission(String permission, String tenantId) { + return baseMapper.selectUserListByPermission(permission, tenantId); } } diff --git a/docs/开发文档/API/用户认证登录API.md b/docs/开发文档/API/用户认证登录API.md index 532e3391..593ffe98 100644 --- a/docs/开发文档/API/用户认证登录API.md +++ b/docs/开发文档/API/用户认证登录API.md @@ -1,4 +1,9 @@ -# 用户认证登录 API +# 用户认证登录API文档 + +## 目录 +1. [用户登录](#用户登录) +2. [获取用户信息](#获取用户信息) +3. [获取具有指定权限的用户列表](#获取具有指定权限的用户列表) ## 📋 文档说明 @@ -660,3 +665,88 @@ methods: { **📝 维护**: 用户认证登录 API 文档 **🔄 更新**: 2025-01-03 **📁 文件**: 用户认证登录 API.md + +## 获取具有指定权限的用户列表 + +### 基本信息 +- **接口URL**: `/system/user/list-by-permission` +- **请求方式**: GET +- **接口描述**: 获取具有指定权限的用户列表 +- **权限标识**: `system:user:list` + +### 请求参数 +#### Query参数 +| 参数名 | 类型 | 是否必须 | 说明 | 示例值 | +|--------|------|----------|------|--------| +| permission | string | 是 | 权限标识符 | hq:hallAudit:list | + +### 响应参数 +```typescript +{ + code: number; // 状态码 + msg: string; // 提示信息 + rows: { + userId: string; // 用户ID + userName: string; // 用户名 + nickName: string; // 昵称 + dept: { + deptId: string; // 部门ID + deptName: string; // 部门名称 + }; + avatar: string; // 头像URL + }[]; + total: number; // 总记录数 +} +``` + +### 响应示例 +```json +{ + "code": 200, + "msg": "操作成功", + "rows": [ + { + "userId": "1", + "userName": "admin", + "nickName": "管理员", + "dept": { + "deptId": "1", + "deptName": "后勤部" + }, + "avatar": "http://example.com/avatar.jpg" + } + ], + "total": 1 +} +``` + +### 错误码 +| 错误码 | 说明 | +|--------|------| +| 401 | 未登录或登录超时 | +| 403 | 没有权限 | +| 500 | 服务器内部错误 | + +### 注意事项 +1. 该接口需要用户登录后才能访问 +2. 返回的用户信息已过滤敏感字段 +3. 建议前端对结果进行缓存,避免频繁请求 +4. 返回结果按照用户ID升序排序 + +### 使用示例 +```typescript +// 前端调用示例 +import { listUsersByPermission } from '@/api/system/user'; + +async function getAuditors() { + try { + const res = await listUsersByPermission('hq:hallAudit:list'); + if (res.code === 200) { + return res.rows; + } + } catch (error) { + console.error('获取审核人员列表失败:', error); + return []; + } +} +``` diff --git a/web/src/api/system/user/index.ts b/web/src/api/system/user/index.ts index 51ac917d..d957b189 100644 --- a/web/src/api/system/user/index.ts +++ b/web/src/api/system/user/index.ts @@ -209,6 +209,19 @@ export const deptTreeSelect = (): AxiosPromise => { }); }; +/** 获取具有指定权限的用户列表 */ +export function listUsersByPermission(permission: string, tenantId?: string): AxiosPromise { + return request({ + url: '/system/user/list-by-permission', + method: 'get', + params: { + permission, + tenantId + } + }); +} + + export default { listUser, getUser, @@ -225,5 +238,6 @@ export default { getAuthRole, updateAuthRole, deptTreeSelect, - listUserByDeptId + listUserByDeptId, + listUsersByPermission }; diff --git a/web/src/views/hq/hallInfo/index.vue b/web/src/views/hq/hallInfo/index.vue index 4a3125a6..18905621 100644 --- a/web/src/views/hq/hallInfo/index.vue +++ b/web/src/views/hq/hallInfo/index.vue @@ -40,7 +40,7 @@ - +