1.0.25 用户查询回显角色

dev
yinq 1 month ago
parent 2340f948c0
commit 2a989b7355

@ -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<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) {
Page<SysUserVo> page = baseMapper.selectVoPage(pageQuery.build(), this.buildQueryWrapper(user));
// 批量填充角色信息
if (CollUtil.isNotEmpty(page.getRecords())) {
List<Long> userIds = StreamUtils.toList(page.getRecords(), SysUserVo::getUserId);
// 批量查询用户角色关联关系
List<SysUserRole> userRoles = userRoleMapper.selectList(
new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds));
// 获取所有角色ID
List<Long> roleIds = StreamUtils.toList(userRoles, SysUserRole::getRoleId);
// 批量查询角色信息
List<SysRoleVo> allRoles = CollUtil.isEmpty(roleIds) ? new ArrayList<>() :
roleMapper.selectVoList(new LambdaQueryWrapper<SysRole>().in(SysRole::getRoleId, roleIds));
Map<Long, SysRoleVo> roleMap = StreamUtils.toIdentityMap(allRoles, SysRoleVo::getRoleId);
// 按用户ID分组用户角色关联关系
Map<Long, List<SysUserRole>> userRoleMap = StreamUtils.groupByKey(userRoles, SysUserRole::getUserId);
// 为每个用户填充角色信息
page.getRecords().forEach(userVo -> {
List<SysUserRole> userRoleList = userRoleMap.get(userVo.getUserId());
if (CollUtil.isNotEmpty(userRoleList)) {
List<SysRoleVo> 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);
}

Loading…
Cancel
Save