diff --git a/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java b/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java index 96172af7..64e6220e 100644 --- a/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java @@ -641,11 +641,38 @@ public class UserServiceImpl extends ServiceImpl impleme Page page) { Page mapPage = sysUserMapper.queryUsers(orgid, username, tenantId, page); - mapPage.getRecords().forEach(record -> { - String id = record.getId(); - List sysRoles = sysRoleMapper.getRoleByUserId(id); - record.setRoles(sysRoles); - }); + List records = mapPage.getRecords(); + if (records.isEmpty()) { + return mapPage; + } + + // 收集所有用户ID,一次批量查询角色(替代 N+1 查询) + List userIds = records.stream() + .map(SysUser::getId) + .collect(Collectors.toList()); + List> allRoleMaps = sysRoleMapper.getUserRolesByUserIds(userIds); + + // 按 userId 分组,将 Map 转为 SysRole 对象 + Map> userRoleMap = new HashMap<>(); + if (allRoleMaps != null) { + for (Map roleMap : allRoleMaps) { + String userId = (String) roleMap.get("userId"); + if (userId == null) continue; + SysRole role = new SysRole(); + role.setId((String) roleMap.get("id")); + role.setRolecode((String) roleMap.get("rolecode")); + role.setRolename((String) roleMap.get("rolename")); + role.setLevel((String) roleMap.get("level")); + role.setDescription((String) roleMap.get("description")); + role.setIsvaild((String) roleMap.get("isvaild")); + role.setOrgscope((String) roleMap.get("orgscope")); + role.setOptscope((String) roleMap.get("optscope")); + role.setBusscope((String) roleMap.get("busscope")); + userRoleMap.computeIfAbsent(userId, k -> new ArrayList<>()).add(role); + } + } + + records.forEach(r -> r.setRoles(userRoleMap.getOrDefault(r.getId(), Collections.emptyList()))); return mapPage; }