Kaynağa Gözat

优化代码,添加接口

liuchengsen 1 ay önce
ebeveyn
işleme
4f1e1c8fdd

+ 2 - 0
zhijiayun-test/src/main/resources/static/invite-test.html

@@ -842,6 +842,8 @@ const FIELD_DESC = {
     'membership': [
         ['id', 'Long', '会员记录ID'],
         ['userId', 'Long', '用户ID'],
+        ['phone', 'String', '用户手机号'],
+        ['nickname', 'String', '用户昵称'],
         ['level', 'String', '会员等级(PLUS/PRO/ULTRA)'],
         ['levelName', 'String', '等级中文名'],
         ['source', 'String', '来源(ADMIN_GRANT/RECHARGE/SYSTEM)'],

+ 6 - 0
zhijiayun-user/src/main/java/com/xuekairui/user/dto/MembershipResponse.java

@@ -22,6 +22,12 @@ public class MembershipResponse {
     /** 用户ID */
     private Long userId;
 
+    /** 用户手机号 */
+    private String phone;
+
+    /** 用户昵称 */
+    private String nickname;
+
     /** 会员等级:PLUS/PRO/ULTRA */
     private String level;
 

+ 23 - 1
zhijiayun-user/src/main/java/com/xuekairui/user/service/MembershipService.java

@@ -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())