Ver código fonte

0806 整合我的评论接口

Qing 9 meses atrás
pai
commit
b2c8ce6273
22 arquivos alterados com 441 adições e 15 exclusões
  1. 7 0
      novel-cloud-demo/novel-book/novel-book-api/src/main/java/com/sf/book/client/BookFeign.java
  2. 27 0
      novel-cloud-demo/novel-book/novel-book-api/src/main/java/com/sf/book/dto/BookCommentRespDto.java
  3. 4 1
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/NovelBookServiceApplication.java
  4. 18 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/controller/BookCommentController.java
  5. 11 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/controller/inner/InnerBookController.java
  6. 27 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/dto/inner/BookCommentRespDto.java
  7. 66 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/entity/BookComment.java
  8. 16 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/mapper/BookCommentMapper.java
  9. 16 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/service/IBookCommentService.java
  10. 5 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/service/IInnerBookService.java
  11. 20 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/service/impl/BookCommentServiceImpl.java
  12. 40 1
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/service/impl/InnerBookServiceImpl.java
  13. 18 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/task/MyCommandLineRunner.java
  14. 88 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/task/RankTask.java
  15. 5 0
      novel-cloud-demo/novel-book/novel-book-service/src/main/resources/mapper/BookCommentMapper.xml
  16. 1 0
      novel-cloud-demo/novel-core/src/main/java/com/sf/core/util/GeneUtils.java
  17. BIN
      novel-cloud-demo/novel-gateway/src/main/resources/static/images/9338815f3b444c69a84367a25cb9a8f2.jpeg
  18. 7 0
      novel-cloud-demo/novel-user/novel-user-service/pom.xml
  19. 2 0
      novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/NovelUserServiceApplication.java
  20. 31 13
      novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/controller/UserInfoController.java
  21. 31 0
      novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/dto/resp/UserCommentRespDto.java
  22. 1 0
      novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/service/impl/UserInfoServiceImpl.java

+ 7 - 0
novel-cloud-demo/novel-book/novel-book-api/src/main/java/com/sf/book/client/BookFeign.java

@@ -1,6 +1,9 @@
 package com.sf.book.client;
 
+import com.sf.book.dto.BookCommentRespDto;
 import com.sf.book.dto.BookInfoRespDto;
+import com.sf.core.dto.PageReqDto;
+import com.sf.core.dto.PageRespDto;
 import com.sf.core.dto.RestResp;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -15,4 +18,8 @@ public interface BookFeign {
 
     @PostMapping("/api/inner/book/listBookInfoByIds")
     RestResp<List<BookInfoRespDto>> listBookInfoByIds(List<Long> bookIds);
+
+    @GetMapping("/api/inner/book/listCommentsByUserId")
+    RestResp<PageRespDto<BookCommentRespDto>> listCommentsByUserId(
+            @RequestParam("userId") Long userId, @RequestParam("pageNum")Integer pageNum, @RequestParam("pageSize")Integer pageSize);
 }

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

@@ -0,0 +1,27 @@
+package com.sf.book.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@Builder
+public class BookCommentRespDto {
+
+    @Schema(description = "评论内容")
+    private String commentContent;
+
+    @Schema(description = "评论小说封面")
+    private String commentBookPic;
+
+    @Schema(description = "评论小说名字")
+    private String commentBook;
+
+    @Schema(description = "评论时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime commentTime;
+
+}

+ 4 - 1
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/NovelBookServiceApplication.java

@@ -1,6 +1,9 @@
 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;
 
@@ -8,7 +11,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 // 设定扫描包范围 要包含novel-core中config所在的包路径
 @SpringBootApplication(scanBasePackages = {"com.sf"})
 @MapperScan("com.sf.book.mapper")
-public class NovelBookServiceApplication {
+public class NovelBookServiceApplication{
 
 	public static void main(String[] args) {
 		SpringApplication.run(NovelBookServiceApplication.class, args);

+ 18 - 0
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/controller/BookCommentController.java

@@ -0,0 +1,18 @@
+package com.sf.book.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 小说评论 前端控制器
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-08-06
+ */
+@Controller
+@RequestMapping("/bookComment")
+public class BookCommentController {
+
+}

+ 11 - 0
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/controller/inner/InnerBookController.java

@@ -1,7 +1,10 @@
 package com.sf.book.controller.inner;
 
+import com.sf.book.dto.inner.BookCommentRespDto;
 import com.sf.book.dto.resp.BookInfoRespDto;
 import com.sf.book.service.IInnerBookService;
+import com.sf.core.dto.PageReqDto;
+import com.sf.core.dto.PageRespDto;
 import com.sf.core.dto.RestResp;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
@@ -22,4 +25,12 @@ public class InnerBookController {
         List<BookInfoRespDto> bookInfoRespDtos = innerBookService.listBookInfoByIds(bookIds);
         return RestResp.ok(bookInfoRespDtos);
     }
+
+    // 传递用户id 返回相关的评论信息
+    @GetMapping("/api/inner/book/listCommentsByUserId")
+    public RestResp<PageRespDto<BookCommentRespDto>> listCommentsByUserId(
+            @RequestParam("userId") Long userId, @RequestParam("pageNum") Integer pageNum, @RequestParam("pageSize") Integer pageSize) {
+        PageRespDto<BookCommentRespDto> commentList = innerBookService.getCommentList(userId, pageNum, pageSize);
+        return RestResp.ok(commentList);
+    }
 }

+ 27 - 0
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/dto/inner/BookCommentRespDto.java

@@ -0,0 +1,27 @@
+package com.sf.book.dto.inner;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@Builder
+public class BookCommentRespDto {
+
+    @Schema(description = "评论内容")
+    private String commentContent;
+
+    @Schema(description = "评论小说封面")
+    private String commentBookPic;
+
+    @Schema(description = "评论小说名字")
+    private String commentBook;
+
+    @Schema(description = "评论时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime commentTime;
+
+}

+ 66 - 0
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/entity/BookComment.java

@@ -0,0 +1,66 @@
+package com.sf.book.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 小说评论
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-08-06
+ */
+@Getter
+@Setter
+@TableName("book_comment")
+public class BookComment implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 评论小说ID
+     */
+    private Long bookId;
+
+    /**
+     * 评论用户ID
+     */
+    private Long userId;
+
+    /**
+     * 评价内容
+     */
+    private String commentContent;
+
+    /**
+     * 回复数量
+     */
+    private Integer replyCount;
+
+    /**
+     * 审核状态;0-待审核 1-审核通过 2-审核不通过
+     */
+    private Integer auditStatus;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

+ 16 - 0
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/mapper/BookCommentMapper.java

@@ -0,0 +1,16 @@
+package com.sf.book.mapper;
+
+import com.sf.book.entity.BookComment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 小说评论 Mapper 接口
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-08-06
+ */
+public interface BookCommentMapper extends BaseMapper<BookComment> {
+
+}

+ 16 - 0
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/service/IBookCommentService.java

@@ -0,0 +1,16 @@
+package com.sf.book.service;
+
+import com.sf.book.entity.BookComment;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 小说评论 服务类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-08-06
+ */
+public interface IBookCommentService extends IService<BookComment> {
+
+}

+ 5 - 0
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/service/IInnerBookService.java

@@ -1,10 +1,15 @@
 package com.sf.book.service;
 
+import com.sf.book.dto.inner.BookCommentRespDto;
 import com.sf.book.dto.resp.BookInfoRespDto;
+import com.sf.core.dto.PageReqDto;
+import com.sf.core.dto.PageRespDto;
 
 import java.util.List;
 
 public interface IInnerBookService {
 
     List<BookInfoRespDto> listBookInfoByIds(List<Long> bookIds);
+
+    PageRespDto<BookCommentRespDto> getCommentList(Long userId, Integer pageNum, Integer pageSize);
 }

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

@@ -0,0 +1,20 @@
+package com.sf.book.service.impl;
+
+import com.sf.book.entity.BookComment;
+import com.sf.book.mapper.BookCommentMapper;
+import com.sf.book.service.IBookCommentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 小说评论 服务实现类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-08-06
+ */
+@Service
+public class BookCommentServiceImpl extends ServiceImpl<BookCommentMapper, BookComment> implements IBookCommentService {
+
+}

+ 40 - 1
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/service/impl/InnerBookServiceImpl.java

@@ -1,11 +1,17 @@
 package com.sf.book.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sf.book.dto.inner.BookCommentRespDto;
 import com.sf.book.dto.resp.BookInfoRespDto;
+import com.sf.book.entity.BookComment;
 import com.sf.book.entity.BookInfo;
+import com.sf.book.mapper.BookCommentMapper;
 import com.sf.book.mapper.BookInfoMapper;
 import com.sf.book.service.IInnerBookService;
-import com.sf.core.dto.RestResp;
+import com.sf.core.dto.PageReqDto;
+import com.sf.core.dto.PageRespDto;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -17,6 +23,7 @@ import java.util.List;
 public class InnerBookServiceImpl implements IInnerBookService {
 
     private final BookInfoMapper bookInfoMapper;
+    private final BookCommentMapper bookCommentMapper;
 
     @Override
     public List<BookInfoRespDto> listBookInfoByIds(List<Long> bookIds) {
@@ -31,4 +38,36 @@ public class InnerBookServiceImpl implements IInnerBookService {
         }).toList();
         return bookInfoRespDtos;
     }
+
+    @Override
+    public PageRespDto<BookCommentRespDto> getCommentList(Long userId, Integer pageNum, Integer pageSize) {
+        // 根据userId获取评论信息
+        LambdaQueryWrapper<BookComment> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BookComment::getUserId, userId);
+        queryWrapper.orderByDesc(BookComment::getCreateTime);
+        // 传入分页的参数 当前页和每页的大小
+        IPage page = new Page(pageNum, pageSize);
+        // 进行分页查询  select * from book_comment where userId = '' order by create_time limit 0,10
+        IPage selected = bookCommentMapper.selectPage(page, queryWrapper);
+        List<BookComment> bookComments = selected.getRecords();
+
+        // 将每一个查询到的book_comment 映射成最终要返回的dto
+        List<BookCommentRespDto> userCommentRespDtos = bookComments.stream().map(bookComment -> {
+            // 映射的逻辑是
+            // 先通过查询到的book_id 找到book信息
+            BookInfo bookInfo = bookInfoMapper.selectById(bookComment.getBookId());
+            // 将book_info中的名字和封皮放入对应参数
+            // 将book_comment中评论的内容和时间 放入对应参数
+            return BookCommentRespDto.builder()
+                    .commentBook(bookInfo.getBookName())
+                    .commentBookPic(bookInfo.getPicUrl())
+                    .commentContent(bookComment.getCommentContent())
+                    .commentTime(bookComment.getCreateTime())
+                    .build();
+        }).toList();
+        // 再将数据赋值给要返回的分页对象
+        PageRespDto<BookCommentRespDto> pageRespDto = PageRespDto.of(
+                pageNum, pageSize, page.getTotal(), userCommentRespDtos);
+        return pageRespDto;
+    }
 }

+ 18 - 0
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/task/MyCommandLineRunner.java

@@ -0,0 +1,18 @@
+package com.sf.book.task;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+@Component
+public class MyCommandLineRunner implements CommandLineRunner {
+    // 是一个支持回调机制的接口CommandLineRunner
+    // 在容器或者说项目启动完成后 可以执行的逻辑
+    @Autowired
+    private RankTask rankTask;
+
+    @Override
+    public void run(String... args) throws Exception {
+        rankTask.updateRank();
+    }
+}

+ 88 - 0
novel-cloud-demo/novel-book/novel-book-service/src/main/java/com/sf/book/task/RankTask.java

@@ -0,0 +1,88 @@
+package com.sf.book.task;
+
+import com.google.gson.Gson;
+
+import com.sf.book.entity.BookInfo;
+import com.sf.book.mapper.BookInfoMapper;
+import com.sf.core.cons.RedisKeyConst;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ZSetOperations;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.List;
+import java.util.Random;
+
+// 榜单相关的定时任务
+// 设定为组件
+@Component
+@RequiredArgsConstructor
+public class RankTask {
+
+    private final RedisTemplate redisTemplate;
+    private final BookInfoMapper bookInfoMapper;
+    private final Gson gson;
+
+    // 进行任务的调度
+    // 参数是cron表达式  是使用一个字符串来描述要定期执行的任务
+    // https://cron.ciding.cc/  cron表达式生成器
+    // 生成一个每5s执行一次的  0/5 * * * * ? * 要将最后一个*去掉
+    // 生成一个每1min执行一次的 0 0/1 * * * ?
+    // 生成一个每天凌晨执行的   0 0 0 1/1 * ?
+//    @Scheduled(cron = "0 0/1 * * * ?")
+    @Scheduled(cron = "0 0 0 1/1 * ?")
+    public void updateRank() {
+        System.out.println("updateRank " + LocalDateTime.now());
+        // 可以三个榜单都更新
+        String key = RedisKeyConst.VISIT_ZSET;
+        redisTemplate.delete(key);
+
+        String key2 = RedisKeyConst.NEW_ZSET;
+        redisTemplate.delete(key2);
+
+        String key3 = RedisKeyConst.UPDATE_ZSET;
+        redisTemplate.delete(key3);
+
+        // 合并三个榜单的初始化
+        List<BookInfo> bookInfos = bookInfoMapper.selectList(null);
+        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
+        Random random = new Random();
+        for (BookInfo bookInfo : bookInfos) {
+            // 点击量榜单中value的分数
+            Long visitCount = bookInfo.getVisitCount();
+
+            // 新书榜榜单中value的分数
+            LocalDateTime createTime = bookInfo.getCreateTime();
+            long epochMilli;
+            if (createTime != null) {
+                // 获取一个实例 通过时区ZoneOffset +8东八区 转化为毫秒级
+                epochMilli = createTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
+            } else {
+                // 如果数据为空 使用当前时间 再随机一个参数
+                epochMilli = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
+                epochMilli += random.nextInt(100);
+            }
+
+            // 更新榜榜单中value的分数
+            LocalDateTime updateTime = bookInfo.getUpdateTime();
+            long epochMilliUpdate;
+            if (updateTime != null) {
+                epochMilliUpdate = updateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
+            } else {
+                epochMilliUpdate = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
+                epochMilliUpdate += random.nextInt(100);
+            }
+
+            // 通用的value
+            String bookInfoJson = gson.toJson(bookInfo);
+
+            zSetOperations.add(key, bookInfoJson, visitCount);
+            zSetOperations.add(key2, bookInfoJson, epochMilli);
+            zSetOperations.add(key3, bookInfoJson, epochMilliUpdate);
+        }
+
+    }
+}

+ 5 - 0
novel-cloud-demo/novel-book/novel-book-service/src/main/resources/mapper/BookCommentMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sf.book.mapper.BookCommentMapper">
+
+</mapper>

+ 1 - 0
novel-cloud-demo/novel-core/src/main/java/com/sf/core/util/GeneUtils.java

@@ -43,6 +43,7 @@ public class GeneUtils {
 //                list.add("book_chapter"); // 书籍章节表
 //                list.add("book_content"); // 章节内容表
 //                list.add("book_category"); // 书籍种类表
+                list.add("book_comment"); // 书籍评论表
                 break;
             case "news":
                 projectPathTmp = "novel-news/";

BIN
novel-cloud-demo/novel-gateway/src/main/resources/static/images/9338815f3b444c69a84367a25cb9a8f2.jpeg


+ 7 - 0
novel-cloud-demo/novel-user/novel-user-service/pom.xml

@@ -46,6 +46,13 @@
             <artifactId>jjwt-jackson</artifactId>
             <scope>runtime</scope>
         </dependency>
+
+        <dependency>
+            <groupId>com.sf</groupId>
+            <artifactId>novel-book-api</artifactId>
+            <version>${parent.version}</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 2 - 0
novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/NovelUserServiceApplication.java

@@ -3,8 +3,10 @@ package com.sf.user;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 
 @MapperScan("com.sf.user.mapper")
+@EnableFeignClients(basePackages = {"com.sf.book.client"})
 @SpringBootApplication(scanBasePackages = {"com.sf"})
 public class NovelUserServiceApplication {
 

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

@@ -1,22 +1,26 @@
 package com.sf.user.controller;
 
+import com.sf.book.client.BookFeign;
+import com.sf.book.dto.BookCommentRespDto;
+import com.sf.core.dto.PageReqDto;
+import com.sf.core.dto.PageRespDto;
 import com.sf.core.dto.RestResp;
 import com.sf.user.dto.req.UserLoginReqDto;
 import com.sf.user.dto.req.UserRegisterReqDto;
-import com.sf.user.dto.resp.ImgVerifyCodeRespDto;
-import com.sf.user.dto.resp.UserInfoRespDto;
-import com.sf.user.dto.resp.UserLoginRespDto;
-import com.sf.user.dto.resp.UserRegisterRespDto;
+import com.sf.user.dto.resp.*;
 import com.sf.user.entity.UserInfo;
 import com.sf.user.service.IUserInfoService;
 import com.sf.user.util.UserHolder;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.stereotype.Controller;
 
 import java.io.IOException;
+import java.util.List;
 
 /**
  * <p>
@@ -28,11 +32,11 @@ import java.io.IOException;
  */
 @Tag(name = "UserInfoController", description = "用户信息模块")
 @RestController
-//@RequestMapping("/userInfo")
+@RequiredArgsConstructor
 public class UserInfoController {
 
-    @Autowired
-    private IUserInfoService userInfoService;
+    private final IUserInfoService userInfoService;
+    private final BookFeign bookFeign;
 
 //    @Autowired
 //    private IBookCommentService bookCommentService;
@@ -92,13 +96,27 @@ public class UserInfoController {
         return RestResp.ok(userInfoRespDto);
     }
 
-//    // 查询我的评论
-//    @Operation(summary = "查询我的评论接口")
-//    @GetMapping("/api/front/user/comments")
-//    public RestResp<PageRespDto<UserCommentRespDto>> listComments(PageReqDto pageReqDto) {
-//        Long userId = UserHolder.getUserId();
+    // 查询我的评论
+    @Operation(summary = "查询我的评论接口")
+    @GetMapping("/api/front/user/comments")
+    public RestResp<PageRespDto<UserCommentRespDto>> listComments(PageReqDto pageReqDto) {
+        Long userId = UserHolder.getUserId();
+        // 将原来直接从book_comment表中匹配的数据 变成调用novel_book微服务
 //        PageRespDto<UserCommentRespDto> commentList = bookCommentService.getCommentList(userId, pageReqDto);
 //        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 RestResp.ok(userCommentRespDtos);
+    }
 
 }

+ 31 - 0
novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/dto/resp/UserCommentRespDto.java

@@ -0,0 +1,31 @@
+package com.sf.user.dto.resp;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserCommentRespDto {
+
+    @Schema(description = "评论内容")
+    private String commentContent;
+
+    @Schema(description = "评论小说封面")
+    private String commentBookPic;
+
+    @Schema(description = "评论小说名字")
+    private String commentBook;
+
+    @Schema(description = "评论时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime commentTime;
+
+}

+ 1 - 0
novel-cloud-demo/novel-user/novel-user-service/src/main/java/com/sf/user/service/impl/UserInfoServiceImpl.java

@@ -102,6 +102,7 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> i
                 .username(reqDto.getUsername())
                 .password(DigestUtils.md5DigestAsHex(bytes))  // 使用spring中的工具类进行加密
                 .nickName(reqDto.getUsername())
+                .userSex(1) // 设置初始值为男
                 .salt("0")
                 .accountBalance(0L)
                 .status(0)