Qing 9 месяцев назад
Родитель
Сommit
42f4cec043

+ 2 - 0
novel-cloud-demo/novel-book/novel-book-api/src/main/java/com/sf/book/dto/BookCommentRespDto.java

@@ -22,6 +22,8 @@ public class BookCommentRespDto {
     @Schema(description = "评论小说名字")
     private String commentBook;
 
+    // openfeign在传输localdatetime时需要特殊处理
+    // 使用注解 明确反序列化的格式
     @Schema(description = "评论时间")
 //    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)

+ 0 - 3
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/NovelBookServiceApplication.java

@@ -1,9 +1,6 @@
 package com.sf.book;
 
-import com.sf.book.task.RankTask;
 import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.openfeign.EnableFeignClients;

+ 15 - 11
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/service/impl/BookCommentServiceImpl.java

@@ -1,7 +1,6 @@
 package com.sf.book.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.sf.book.dto.inner.InnerBookCommentRespDto;
 import com.sf.book.dto.resp.BookCommentRespDto;
 import com.sf.book.dto.resp.CommentInfoRespDto;
 import com.sf.book.entity.BookComment;
@@ -10,7 +9,7 @@ import com.sf.book.service.IBookCommentService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sf.core.dto.RestResp;
 import com.sf.user.client.UserFeign;
-import com.sf.user.client.dto.InnerUserCommentRespDto;
+import com.sf.user.client.dto.UserCommentRespDto;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -43,21 +42,26 @@ public class BookCommentServiceImpl extends ServiceImpl<BookCommentMapper, BookC
         List<BookComment> bookComments = bookCommentMapper.selectList(queryWrapper);
         int count = bookComments.size();
 
-        Set<Long> userSet = new HashSet<>();
-        for (BookComment bookComment : bookComments) {
-            userSet.add(bookComment.getUserId());
+        if (count == 0) {
+            // 如果当前书籍没有评论 直接返回空
+            return BookCommentRespDto.builder()
+                    .commentTotal(0L).comments(new ArrayList<>()).build();
         }
 
-        List<CommentInfoRespDto> commentInfoRespDtoList = new ArrayList<>();
-        RestResp<List<InnerUserCommentRespDto>> listRestResp = userFeign.listUserInfoByIds(userSet);
-        List<InnerUserCommentRespDto> data = listRestResp.getData();
-        Map<Long, InnerUserCommentRespDto> collected =
-                data.stream().collect(Collectors.toMap(InnerUserCommentRespDto::getUserId, t -> t));
+        // 汇总需要是userId 传递给novel-user的接口 将返回结果映射为map
+        List<Long> userIds = bookComments.stream().map(BookComment::getUserId).toList();
+        RestResp<List<UserCommentRespDto>> listRestResp = userFeign.listUserInfoByIds(userIds);
+        List<UserCommentRespDto> data = listRestResp.getData();
+        Map<Long, UserCommentRespDto> collected =
+                data.stream().collect(Collectors.toMap(UserCommentRespDto::getUserId, t -> t));
 
+        // 组装数据
+        List<CommentInfoRespDto> commentInfoRespDtoList = new ArrayList<>();
         for (BookComment bookComment : bookComments) {
             // select * from user_info where id = ''
 //            UserInfo userInfo = userInfoMapper.selectById(bookComment.getUserId());
-            InnerUserCommentRespDto commentRespDto = collected.get(bookComment.getUserId());
+            // 将原来从数据库中拿数据的逻辑 变成从map中拿数据
+            UserCommentRespDto commentRespDto = collected.get(bookComment.getUserId());
             CommentInfoRespDto commentInfoRespDto = CommentInfoRespDto.builder()
                     .id(bookComment.getId()).commentContent(bookComment.getCommentContent())
                     .commentUserId(bookComment.getUserId())

+ 3 - 3
novel-cloud-demo/novel-user/novel-user-api/src/main/java/com/sf/user/client/UserFeign.java

@@ -1,17 +1,17 @@
 package com.sf.user.client;
 
 import com.sf.core.dto.RestResp;
-import com.sf.user.client.dto.InnerUserCommentRespDto;
+import com.sf.user.client.dto.UserCommentRespDto;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
-import java.util.Set;
 
+// 使用微服务名称
 @FeignClient("novel-user-service")
 public interface UserFeign {
 
     @PostMapping("/api/inner/user/listUserInfoByIds")
-    RestResp<List<InnerUserCommentRespDto>> listUserInfoByIds(@RequestBody Set<Long> userSet);
+    RestResp<List<UserCommentRespDto>> listUserInfoByIds(@RequestBody List<Long> userIds);
 }

+ 1 - 1
novel-cloud-demo/novel-user/novel-user-api/src/main/java/com/sf/user/client/dto/InnerUserCommentRespDto.java → novel-cloud-demo/novel-user/novel-user-api/src/main/java/com/sf/user/client/dto/UserCommentRespDto.java

@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class InnerUserCommentRespDto {
+public class UserCommentRespDto {
 
     private Long userId;
     private String username;

+ 0 - 10
novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/controller/UserInfoController.java

@@ -106,16 +106,6 @@ public class UserInfoController {
 //        return RestResp.ok(commentList);
         RestResp<PageRespDto<BookCommentRespDto>> listComments =
                 bookFeign.listCommentsByUserId(userId, pageReqDto.getPageNum(), pageReqDto.getPageSize());
-        // 做一个类型转换
-//        PageRespDto<BookCommentRespDto> data = listComments.getData();
-//        List<? extends BookCommentRespDto> list = data.getList();
-//        List<UserCommentRespDto> respDtoList = list.stream().map(bookCommentRespDto -> {
-//            UserCommentRespDto userCommentRespDto = new UserCommentRespDto();
-//            BeanUtils.copyProperties(bookCommentRespDto, userCommentRespDto);
-//            return userCommentRespDto;
-//        }).toList();
-//        PageRespDto<UserCommentRespDto> userCommentRespDtos = PageRespDto.of(
-//                data.getPageNum(), data.getPageSize(), data.getTotal(), respDtoList);
         return listComments;
     }
 

+ 4 - 5
novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/controller/inner/InnerUserController.java

@@ -4,24 +4,23 @@ import com.sf.core.dto.RestResp;
 import com.sf.user.dto.inner.InnerUserCommentRespDto;
 import com.sf.user.service.IInnerUserService;
 import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
-import java.util.Set;
 
+// 内部被调用的控制器
 @RestController
 @RequiredArgsConstructor
 public class InnerUserController {
 
-    private final IInnerUserService iInnerUserService;
+    private final IInnerUserService innerUserService;
 
     //根据一系列用户id返回用户信息
     @PostMapping("/api/inner/user/listUserInfoByIds")
-    RestResp<List<InnerUserCommentRespDto>> listUserInfoByIds(@RequestBody Set<Long> userSet) {
-        List<InnerUserCommentRespDto> userCommentRespDtos = iInnerUserService.listUserInfoByIds(userSet);
+    RestResp<List<InnerUserCommentRespDto>> listUserInfoByIds(@RequestBody List<Long> userIds) {
+        List<InnerUserCommentRespDto> userCommentRespDtos = innerUserService.listUserInfoByIds(userIds);
         return RestResp.ok(userCommentRespDtos);
     }
 }

+ 1 - 0
novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/dto/inner/InnerUserCommentRespDto.java

@@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 public class InnerUserCommentRespDto {
 
+    // 用户id 用户名 用户头像
     private Long userId;
     private String username;
     private String userPhoto;

+ 1 - 3
novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/service/IInnerUserService.java

@@ -1,12 +1,10 @@
 package com.sf.user.service;
 
 import com.sf.user.dto.inner.InnerUserCommentRespDto;
-import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
-import java.util.Set;
 
 public interface IInnerUserService {
 
-    List<InnerUserCommentRespDto> listUserInfoByIds(Set<Long> userSet);
+    List<InnerUserCommentRespDto> listUserInfoByIds(List<Long> userIds);
 }

+ 8 - 9
novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/service/impl/InnerUserServiceImpl.java

@@ -6,11 +6,9 @@ import com.sf.user.entity.UserInfo;
 import com.sf.user.mapper.UserInfoMapper;
 import com.sf.user.service.IInnerUserService;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
-import java.util.Set;
 
 @Service
 @RequiredArgsConstructor
@@ -19,15 +17,16 @@ public class InnerUserServiceImpl implements IInnerUserService {
     private final UserInfoMapper userInfoMapper;
 
     @Override
-    public List<InnerUserCommentRespDto> listUserInfoByIds(Set<Long> userSet) {
-        // select * from book_info where id in ('','','');
+    public List<InnerUserCommentRespDto> listUserInfoByIds(List<Long> userIds) {
+        // select * from user_info where id in ('','','');
         LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.in(UserInfo::getId, userSet);
+        queryWrapper.in(UserInfo::getId, userIds);
         List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
-        List<InnerUserCommentRespDto> userCommentRespDtos = userInfoList.stream().map(
-                userInfo -> InnerUserCommentRespDto.builder()
-                        .userId(userInfo.getId()).username(userInfo.getUsername()).userPhoto(userInfo.getUserPhoto())
-                        .build()).toList();
+        List<InnerUserCommentRespDto> userCommentRespDtos =
+                userInfoList.stream().map(
+                        userInfo -> InnerUserCommentRespDto.builder()
+                                .userId(userInfo.getId()).username(userInfo.getUsername()).userPhoto(userInfo.getUserPhoto())
+                                .build()).toList();
         return userCommentRespDtos;
     }
 }