|
|
@@ -22,8 +22,10 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -250,13 +252,31 @@ public class MembershipService {
|
|
|
|
|
|
Page<UserMembership> result = userMembershipMapper.selectPage(page, wrapper);
|
|
|
Page<MembershipResponse> responsePage = new Page<>(result.getCurrent(), result.getSize(), result.getTotal());
|
|
|
+
|
|
|
+ // 批量查询用户,避免N+1
|
|
|
+ List<Long> userIds = result.getRecords().stream()
|
|
|
+ .map(UserMembership::getUserId)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ Map<Long, User> userMap = userIds.isEmpty() ? new HashMap<>()
|
|
|
+ : userMapper.selectBatchIds(userIds).stream()
|
|
|
+ .collect(Collectors.toMap(User::getId, u -> u));
|
|
|
+
|
|
|
responsePage.setRecords(result.getRecords().stream()
|
|
|
- .map(this::toResponse)
|
|
|
+ .map(m -> toResponse(m, userMap.get(m.getUserId())))
|
|
|
.collect(Collectors.toList()));
|
|
|
return responsePage;
|
|
|
}
|
|
|
|
|
|
private MembershipResponse toResponse(UserMembership membership) {
|
|
|
+ if (membership == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ User user = membership.getUserId() != null ? userMapper.selectById(membership.getUserId()) : null;
|
|
|
+ return toResponse(membership, user);
|
|
|
+ }
|
|
|
+
|
|
|
+ private MembershipResponse toResponse(UserMembership membership, User user) {
|
|
|
if (membership == null) {
|
|
|
return null;
|
|
|
}
|
|
|
@@ -264,6 +284,8 @@ public class MembershipService {
|
|
|
return MembershipResponse.builder()
|
|
|
.id(membership.getId())
|
|
|
.userId(membership.getUserId())
|
|
|
+ .phone(user != null ? user.getPhone() : null)
|
|
|
+ .nickname(user != null ? user.getNickname() : null)
|
|
|
.level(level != null ? level.getCode() : null)
|
|
|
.levelName(level != null ? level.getDescription() : null)
|
|
|
.source(membership.getSource())
|