diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index b06c152c..acc867a6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -22,6 +22,7 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUserPost; import org.dromara.system.domain.SysUserRole; +import org.dromara.system.domain.SysRole; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysPostVo; import org.dromara.system.domain.vo.SysRoleVo; @@ -59,6 +60,32 @@ public class SysUserServiceImpl implements ISysUserService { @Override public TableDataInfo selectPageUserList(SysUserBo user, PageQuery pageQuery) { Page page = baseMapper.selectVoPage(pageQuery.build(), this.buildQueryWrapper(user)); + // 批量填充角色信息 + if (CollUtil.isNotEmpty(page.getRecords())) { + List userIds = StreamUtils.toList(page.getRecords(), SysUserVo::getUserId); + // 批量查询用户角色关联关系 + List userRoles = userRoleMapper.selectList( + new LambdaQueryWrapper().in(SysUserRole::getUserId, userIds)); + // 获取所有角色ID + List roleIds = StreamUtils.toList(userRoles, SysUserRole::getRoleId); + // 批量查询角色信息 + List allRoles = CollUtil.isEmpty(roleIds) ? new ArrayList<>() : + roleMapper.selectVoList(new LambdaQueryWrapper().in(SysRole::getRoleId, roleIds)); + Map roleMap = StreamUtils.toIdentityMap(allRoles, SysRoleVo::getRoleId); + // 按用户ID分组用户角色关联关系 + Map> userRoleMap = StreamUtils.groupByKey(userRoles, SysUserRole::getUserId); + // 为每个用户填充角色信息 + page.getRecords().forEach(userVo -> { + List userRoleList = userRoleMap.get(userVo.getUserId()); + if (CollUtil.isNotEmpty(userRoleList)) { + List userRoleVoList = StreamUtils.toList(userRoleList, ur -> roleMap.get(ur.getRoleId())) + .stream().filter(ObjectUtil::isNotNull).toList(); + userVo.setRoles(userRoleVoList); + } else { + userVo.setRoles(new ArrayList<>()); + } + }); + } return TableDataInfo.build(page); }