Browse Source

0605 书籍类别接口和查询接口优化

Qing 1 year ago
parent
commit
e58d8558d0
22 changed files with 699 additions and 14 deletions
  1. 29 6
      novel-demo/src/main/java/com/sf/controller/BookInfoController.java
  2. 1 1
      novel-demo/src/main/java/com/sf/controller/HomeBookController.java
  3. 34 0
      novel-demo/src/main/java/com/sf/controller/HomeFriendLinkController.java
  4. 29 0
      novel-demo/src/main/java/com/sf/dto/resp/BookCategoryRespDto.java
  5. 84 0
      novel-demo/src/main/java/com/sf/dto/resp/BookRankRespDto.java
  6. 32 0
      novel-demo/src/main/java/com/sf/dto/resp/HomeFriendLinkRespDto.java
  7. 109 0
      novel-demo/src/main/java/com/sf/entity/BookCategory.java
  8. 123 0
      novel-demo/src/main/java/com/sf/entity/HomeFriendLink.java
  9. 16 0
      novel-demo/src/main/java/com/sf/mapper/BookCategoryMapper.java
  10. 16 0
      novel-demo/src/main/java/com/sf/mapper/HomeFriendLinkMapper.java
  11. 16 0
      novel-demo/src/main/java/com/sf/service/IBookCategoryService.java
  12. 28 0
      novel-demo/src/main/java/com/sf/service/IBookInfoService.java
  13. 3 0
      novel-demo/src/main/java/com/sf/service/IHomeBookService.java
  14. 16 0
      novel-demo/src/main/java/com/sf/service/IHomeFriendLinkService.java
  15. 20 0
      novel-demo/src/main/java/com/sf/service/impl/BookCategoryServiceImpl.java
  16. 67 1
      novel-demo/src/main/java/com/sf/service/impl/BookInfoServiceImpl.java
  17. 19 0
      novel-demo/src/main/java/com/sf/service/impl/HomeBookServiceImpl.java
  18. 20 0
      novel-demo/src/main/java/com/sf/service/impl/HomeFriendLinkServiceImpl.java
  19. 4 2
      novel-demo/src/main/java/com/sf/util/GeneUtils.java
  20. 5 0
      novel-demo/src/main/resources/mapper/BookCategoryMapper.xml
  21. 23 4
      novel-demo/src/main/resources/mapper/BookInfoMapper.xml
  22. 5 0
      novel-demo/src/main/resources/mapper/HomeFriendLinkMapper.xml

+ 29 - 6
novel-demo/src/main/java/com/sf/controller/BookInfoController.java

@@ -1,19 +1,17 @@
 package com.sf.controller;
 
+import com.sf.dto.resp.BookCategoryRespDto;
 import com.sf.dto.RestResp;
 import com.sf.dto.req.BookSearchReqDto;
-import com.sf.dto.resp.BookChapterRespDto;
-import com.sf.dto.resp.BookContentAboutRespDto;
 import com.sf.dto.resp.BookInfoRespDto;
+import com.sf.dto.resp.BookRankRespDto;
 import com.sf.dto.resp.PageRespDto;
 import com.sf.entity.BookInfo;
-import com.sf.service.IBookChapterService;
-import com.sf.service.IBookContentService;
 import com.sf.service.IBookInfoService;
+import io.swagger.v3.oas.annotations.Parameter;
 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.util.List;
 
@@ -58,11 +56,36 @@ public class BookInfoController {
         return RestResp.ok(bookInfoRespDto);
     }
 
-
     // http://127.0.0.1:8888/api/front/search/books?keyword=&pageSize=10&pageNum=2
     @GetMapping("/api/front/search/books")
     public RestResp<PageRespDto<BookInfoRespDto>> searchBooks(BookSearchReqDto bookSearchReqDto){
         PageRespDto<BookInfoRespDto> pageRespDto = bookInfoService.searchBooks(bookSearchReqDto);
         return RestResp.ok(pageRespDto);
     }
+
+    @GetMapping("/api/front/book/category/list")
+    public RestResp<List<BookCategoryRespDto>> listCategory(
+            @Parameter(description = "作品方向", required = false) Integer workDirection) {
+        List<BookCategoryRespDto> bookCategoryRespDtos = bookInfoService.listCategory(workDirection);
+        return RestResp.ok(bookCategoryRespDtos);
+    }
+
+    @GetMapping("/api/front/book/visit_rank")
+    public RestResp<List<BookRankRespDto>> listVisitRankBooks() {
+        List<BookRankRespDto> bookRankRespDtos = bookInfoService.listVisitRankBooks();
+        return RestResp.ok(bookRankRespDtos);
+    }
+
+    @GetMapping("/api/front/book/newest_rank")
+    public RestResp<List<BookRankRespDto>> listNewestRankBooks() {
+        List<BookRankRespDto> bookRankRespDtos = bookInfoService.listNewestRankBooks();
+        return RestResp.ok(bookRankRespDtos);
+    }
+
+    @GetMapping("/api/front/book/update_rank")
+    public RestResp<List<BookRankRespDto>> listUpdateRankBooks() {
+        List<BookRankRespDto> bookRankRespDtos = bookInfoService.listUpdateRankBooks();
+        return RestResp.ok(bookRankRespDtos);
+    }
+
 }

+ 1 - 1
novel-demo/src/main/java/com/sf/controller/HomeBookController.java

@@ -34,7 +34,7 @@ public class HomeBookController {
     // http://127.0.0.1:8888/api/front/home/books
     @GetMapping(value = "/books")
     public RestResp<List<HomeBookRespDto>> books(){
-        System.out.println("start");
+        System.out.println("HomeBookController books start");
         // 将实际的数据处理 给到service
         List<HomeBookRespDto> books = homeBookService.allHomeBook();
         // code message data

+ 34 - 0
novel-demo/src/main/java/com/sf/controller/HomeFriendLinkController.java

@@ -0,0 +1,34 @@
+package com.sf.controller;
+
+import com.sf.dto.RestResp;
+import com.sf.dto.resp.HomeFriendLinkRespDto;
+import com.sf.service.IHomeBookService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 友情链接 前端控制器
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-05
+ */
+@RestController
+@RequestMapping("/api/front/home")
+public class HomeFriendLinkController {
+
+    @Autowired
+    private IHomeBookService homeBookService;
+
+    @GetMapping("friend_Link/list")
+    public RestResp<List<HomeFriendLinkRespDto>> listHomeFriendLinks() {
+        List<HomeFriendLinkRespDto> homeFriendLinkRespDtos = homeBookService.listHomeFriendLinks();
+        return RestResp.ok(homeFriendLinkRespDtos);
+    }
+}

+ 29 - 0
novel-demo/src/main/java/com/sf/dto/resp/BookCategoryRespDto.java

@@ -0,0 +1,29 @@
+package com.sf.dto.resp;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * 小说分类 响应DTO
+ *
+ * @author xiongxiaoyang
+ * @date 2022/5/16
+ */
+@Data
+@Builder
+public class BookCategoryRespDto {
+
+    /**
+     * 类别ID
+     */
+    @Schema(description = "类别ID")
+    private Long id;
+
+    /**
+     * 类别名
+     */
+    @Schema(description = "类别名")
+    private String name;
+
+}

+ 84 - 0
novel-demo/src/main/java/com/sf/dto/resp/BookRankRespDto.java

@@ -0,0 +1,84 @@
+package com.sf.dto.resp;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 小说排行榜 响应DTO
+ *
+ * @author xiongxiaoyang
+ * @date 2022/5/14
+ */
+@Data
+public class BookRankRespDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @Schema(description = "小说ID")
+    private Long id;
+
+    /**
+     * 类别ID
+     */
+    @Schema(description = "类别ID")
+    private Long categoryId;
+
+    /**
+     * 类别名
+     */
+    @Schema(description = "类别名")
+    private String categoryName;
+
+    /**
+     * 小说封面地址
+     */
+    @Schema(description = "小说封面地址")
+    private String picUrl;
+
+    /**
+     * 小说名
+     */
+    @Schema(description = "小说名")
+    private String bookName;
+
+    /**
+     * 作家名
+     */
+    @Schema(description = "作家名")
+    private String authorName;
+
+    /**
+     * 书籍描述
+     */
+    @Schema(description = "书籍描述")
+    private String bookDesc;
+
+    /**
+     * 总字数
+     */
+    @Schema(description = "总字数")
+    private Integer wordCount;
+
+    /**
+     * 最新章节名
+     */
+    @Schema(description = "最新章节名")
+    private String lastChapterName;
+
+    /**
+     * 最新章节更新时间
+     */
+    @Schema(description = "最新章节更新时间")
+    @JsonFormat(pattern = "MM/dd HH:mm")
+    private LocalDateTime lastChapterUpdateTime;
+
+}

+ 32 - 0
novel-demo/src/main/java/com/sf/dto/resp/HomeFriendLinkRespDto.java

@@ -0,0 +1,32 @@
+package com.sf.dto.resp;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 首页友情链接 响应DTO
+ *
+ * @author xiongxiaoyang
+ * @date 2022/5/14
+ */
+@Data
+public class HomeFriendLinkRespDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 链接名
+     */
+    @Schema(description = "链接名")
+    private String linkName;
+
+    /**
+     * 链接url
+     */
+    @Schema(description = "链接url")
+    private String linkUrl;
+}

+ 109 - 0
novel-demo/src/main/java/com/sf/entity/BookCategory.java

@@ -0,0 +1,109 @@
+package com.sf.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;
+
+/**
+ * <p>
+ * 小说类别
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-05
+ */
+@TableName("book_category")
+public class BookCategory implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 作品方向;0-男频 1-女频
+     */
+    private Byte workDirection;
+
+    /**
+     * 类别名
+     */
+    private String name;
+
+    /**
+     * 排序
+     */
+    private Byte sort;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Byte getWorkDirection() {
+        return workDirection;
+    }
+
+    public void setWorkDirection(Byte workDirection) {
+        this.workDirection = workDirection;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Byte getSort() {
+        return sort;
+    }
+
+    public void setSort(Byte sort) {
+        this.sort = sort;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public LocalDateTime getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(LocalDateTime updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "BookCategory{" +
+            "id = " + id +
+            ", workDirection = " + workDirection +
+            ", name = " + name +
+            ", sort = " + sort +
+            ", createTime = " + createTime +
+            ", updateTime = " + updateTime +
+        "}";
+    }
+}

+ 123 - 0
novel-demo/src/main/java/com/sf/entity/HomeFriendLink.java

@@ -0,0 +1,123 @@
+package com.sf.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;
+
+/**
+ * <p>
+ * 友情链接
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-05
+ */
+@TableName("home_friend_link")
+public class HomeFriendLink implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 链接名
+     */
+    private String linkName;
+
+    /**
+     * 链接url
+     */
+    private String linkUrl;
+
+    /**
+     * 排序号
+     */
+    private Byte sort;
+
+    /**
+     * 是否开启;0-不开启 1-开启
+     */
+    private Byte isOpen;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getLinkName() {
+        return linkName;
+    }
+
+    public void setLinkName(String linkName) {
+        this.linkName = linkName;
+    }
+
+    public String getLinkUrl() {
+        return linkUrl;
+    }
+
+    public void setLinkUrl(String linkUrl) {
+        this.linkUrl = linkUrl;
+    }
+
+    public Byte getSort() {
+        return sort;
+    }
+
+    public void setSort(Byte sort) {
+        this.sort = sort;
+    }
+
+    public Byte getIsOpen() {
+        return isOpen;
+    }
+
+    public void setIsOpen(Byte isOpen) {
+        this.isOpen = isOpen;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+
+    public LocalDateTime getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(LocalDateTime updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return "HomeFriendLink{" +
+            "id = " + id +
+            ", linkName = " + linkName +
+            ", linkUrl = " + linkUrl +
+            ", sort = " + sort +
+            ", isOpen = " + isOpen +
+            ", createTime = " + createTime +
+            ", updateTime = " + updateTime +
+        "}";
+    }
+}

+ 16 - 0
novel-demo/src/main/java/com/sf/mapper/BookCategoryMapper.java

@@ -0,0 +1,16 @@
+package com.sf.mapper;
+
+import com.sf.entity.BookCategory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 小说类别 Mapper 接口
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-05
+ */
+public interface BookCategoryMapper extends BaseMapper<BookCategory> {
+
+}

+ 16 - 0
novel-demo/src/main/java/com/sf/mapper/HomeFriendLinkMapper.java

@@ -0,0 +1,16 @@
+package com.sf.mapper;
+
+import com.sf.entity.HomeFriendLink;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 友情链接 Mapper 接口
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-05
+ */
+public interface HomeFriendLinkMapper extends BaseMapper<HomeFriendLink> {
+
+}

+ 16 - 0
novel-demo/src/main/java/com/sf/service/IBookCategoryService.java

@@ -0,0 +1,16 @@
+package com.sf.service;
+
+import com.sf.entity.BookCategory;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 小说类别 服务类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-05
+ */
+public interface IBookCategoryService extends IService<BookCategory> {
+
+}

+ 28 - 0
novel-demo/src/main/java/com/sf/service/IBookInfoService.java

@@ -1,11 +1,15 @@
 package com.sf.service;
 
+import com.sf.dto.resp.BookCategoryRespDto;
 import com.sf.dto.req.BookSearchReqDto;
 import com.sf.dto.resp.BookInfoRespDto;
+import com.sf.dto.resp.BookRankRespDto;
 import com.sf.dto.resp.PageRespDto;
 import com.sf.entity.BookInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 小说信息 服务类
@@ -18,4 +22,28 @@ import com.baomidou.mybatisplus.extension.service.IService;
 public interface IBookInfoService extends IService<BookInfo> {
 
     PageRespDto<BookInfoRespDto> searchBooks(BookSearchReqDto bookSearchReqDto);
+
+    List<BookCategoryRespDto> listCategory(Integer workDirection);
+
+
+    /**
+     * 小说点击榜查询
+     *
+     * @return 小说点击排行列表
+     */
+    List<BookRankRespDto> listVisitRankBooks();
+
+    /**
+     * 小说新书榜查询
+     *
+     * @return 小说新书排行列表
+     */
+    List<BookRankRespDto> listNewestRankBooks();
+
+    /**
+     * 小说更新榜查询
+     *
+     * @return 小说更新排行列表
+     */
+    List<BookRankRespDto> listUpdateRankBooks();
 }

+ 3 - 0
novel-demo/src/main/java/com/sf/service/IHomeBookService.java

@@ -1,6 +1,7 @@
 package com.sf.service;
 
 import com.sf.dto.resp.HomeBookRespDto;
+import com.sf.dto.resp.HomeFriendLinkRespDto;
 import com.sf.entity.HomeBook;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -17,4 +18,6 @@ import java.util.List;
 public interface IHomeBookService extends IService<HomeBook> {
 
     List<HomeBookRespDto> allHomeBook();
+
+    List<HomeFriendLinkRespDto> listHomeFriendLinks();
 }

+ 16 - 0
novel-demo/src/main/java/com/sf/service/IHomeFriendLinkService.java

@@ -0,0 +1,16 @@
+package com.sf.service;
+
+import com.sf.entity.HomeFriendLink;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 友情链接 服务类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-05
+ */
+public interface IHomeFriendLinkService extends IService<HomeFriendLink> {
+
+}

+ 20 - 0
novel-demo/src/main/java/com/sf/service/impl/BookCategoryServiceImpl.java

@@ -0,0 +1,20 @@
+package com.sf.service.impl;
+
+import com.sf.entity.BookCategory;
+import com.sf.mapper.BookCategoryMapper;
+import com.sf.service.IBookCategoryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 小说类别 服务实现类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-05
+ */
+@Service
+public class BookCategoryServiceImpl extends ServiceImpl<BookCategoryMapper, BookCategory> implements IBookCategoryService {
+
+}

+ 67 - 1
novel-demo/src/main/java/com/sf/service/impl/BookInfoServiceImpl.java

@@ -2,10 +2,14 @@ package com.sf.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sf.dto.resp.BookCategoryRespDto;
 import com.sf.dto.req.BookSearchReqDto;
 import com.sf.dto.resp.BookInfoRespDto;
+import com.sf.dto.resp.BookRankRespDto;
 import com.sf.dto.resp.PageRespDto;
+import com.sf.entity.BookCategory;
 import com.sf.entity.BookInfo;
+import com.sf.mapper.BookCategoryMapper;
 import com.sf.mapper.BookInfoMapper;
 import com.sf.service.IBookInfoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -31,6 +35,9 @@ public class BookInfoServiceImpl extends ServiceImpl<BookInfoMapper, BookInfo>
     @Autowired
     private BookInfoMapper bookInfoMapper;
 
+    @Autowired
+    private BookCategoryMapper bookCategoryMapper;
+
     // 分页的本质是limit  select * from book_info
     @Override
     public PageRespDto<BookInfoRespDto> searchBooks(BookSearchReqDto bookSearchReqDto) {
@@ -58,7 +65,66 @@ public class BookInfoServiceImpl extends ServiceImpl<BookInfoMapper, BookInfo>
             return bookInfoRespDto;
         }).toList();
         PageRespDto<BookInfoRespDto> pageRespDto = PageRespDto.of(
-                bookSearchReqDto.getPageNum(), bookSearchReqDto.getPageSize(), 0, bookInfoRespDtos);
+                bookSearchReqDto.getPageNum(), bookSearchReqDto.getPageSize(), page.getTotal(), bookInfoRespDtos);
         return pageRespDto;
     }
+
+    @Override
+    public List<BookCategoryRespDto> listCategory(Integer workDirection) {
+        LambdaQueryWrapper<BookCategory> queryWrapper = new LambdaQueryWrapper<>();
+        if (workDirection != null) {
+            queryWrapper.eq(BookCategory::getWorkDirection, workDirection);
+        }
+        return bookCategoryMapper.selectList(queryWrapper).stream().map(bookCategory ->
+                BookCategoryRespDto.builder()
+                        .id(bookCategory.getId())
+                        .name(bookCategory.getName())
+                        .build()).toList();
+    }
+
+    @Override
+    public List<BookRankRespDto> listVisitRankBooks() {
+        LambdaQueryWrapper<BookInfo> bookInfoQueryWrapper = new LambdaQueryWrapper<>();
+        bookInfoQueryWrapper.orderByDesc(BookInfo::getVisitCount);
+        return listRankBooks(bookInfoQueryWrapper);
+    }
+
+    /**
+     * 查询小说新书榜列表,并放入缓存中
+     */
+    @Override
+    public List<BookRankRespDto> listNewestRankBooks() {
+        LambdaQueryWrapper<BookInfo> bookInfoQueryWrapper = new LambdaQueryWrapper<>();
+        bookInfoQueryWrapper.orderByDesc(BookInfo::getCreateTime);
+        return listRankBooks(bookInfoQueryWrapper);
+    }
+
+    /**
+     * 查询小说更新榜列表,并放入缓存中
+     */
+    @Override
+    public List<BookRankRespDto> listUpdateRankBooks() {
+        LambdaQueryWrapper<BookInfo> bookInfoQueryWrapper = new LambdaQueryWrapper<>();
+        bookInfoQueryWrapper.orderByDesc(BookInfo::getUpdateTime);
+        return listRankBooks(bookInfoQueryWrapper);
+    }
+
+    private List<BookRankRespDto> listRankBooks(LambdaQueryWrapper<BookInfo> bookInfoQueryWrapper) {
+        bookInfoQueryWrapper.gt(BookInfo::getWordCount, 0).last("limit 30");
+        return bookInfoMapper.selectList(bookInfoQueryWrapper).stream().map(v -> {
+            BookRankRespDto respDto = new BookRankRespDto();
+            respDto.setId(v.getId());
+            respDto.setCategoryId(v.getCategoryId());
+            respDto.setCategoryName(v.getCategoryName());
+            respDto.setBookName(v.getBookName());
+            respDto.setAuthorName(v.getAuthorName());
+            respDto.setPicUrl(v.getPicUrl());
+            respDto.setBookDesc(v.getBookDesc());
+            respDto.setLastChapterName(v.getLastChapterName());
+            respDto.setLastChapterUpdateTime(v.getLastChapterUpdateTime());
+            respDto.setWordCount(v.getWordCount());
+            return respDto;
+        }).toList();
+    }
+
 }

+ 19 - 0
novel-demo/src/main/java/com/sf/service/impl/HomeBookServiceImpl.java

@@ -1,11 +1,15 @@
 package com.sf.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.sf.dto.resp.HomeBookRespDto;
+import com.sf.dto.resp.HomeFriendLinkRespDto;
 import com.sf.entity.BookInfo;
 import com.sf.entity.HomeBook;
+import com.sf.entity.HomeFriendLink;
 import com.sf.mapper.BookInfoMapper;
 import com.sf.mapper.HomeBookMapper;
+import com.sf.mapper.HomeFriendLinkMapper;
 import com.sf.service.IHomeBookService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +37,9 @@ public class HomeBookServiceImpl extends ServiceImpl<HomeBookMapper, HomeBook> i
     @Autowired
     private BookInfoMapper bookInfoMapper;
 
+    @Autowired
+    private HomeFriendLinkMapper homeFriendLinkMapper;
+
     // 去到home_book表中取数据
     // 再使用book_id去book_info表中找到关联数据
     @Override
@@ -74,4 +81,16 @@ public class HomeBookServiceImpl extends ServiceImpl<HomeBookMapper, HomeBook> i
 
         return list;
     }
+
+    @Override
+    public List<HomeFriendLinkRespDto> listHomeFriendLinks() {
+        LambdaQueryWrapper<HomeFriendLink> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.orderByAsc(HomeFriendLink::getSort);
+        return homeFriendLinkMapper.selectList(queryWrapper).stream().map(v -> {
+            HomeFriendLinkRespDto respDto = new HomeFriendLinkRespDto();
+            respDto.setLinkName(v.getLinkName());
+            respDto.setLinkUrl(v.getLinkUrl());
+            return respDto;
+        }).toList();
+    }
 }

+ 20 - 0
novel-demo/src/main/java/com/sf/service/impl/HomeFriendLinkServiceImpl.java

@@ -0,0 +1,20 @@
+package com.sf.service.impl;
+
+import com.sf.entity.HomeFriendLink;
+import com.sf.mapper.HomeFriendLinkMapper;
+import com.sf.service.IHomeFriendLinkService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 友情链接 服务实现类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2024-06-05
+ */
+@Service
+public class HomeFriendLinkServiceImpl extends ServiceImpl<HomeFriendLinkMapper, HomeFriendLink> implements IHomeFriendLinkService {
+
+}

+ 4 - 2
novel-demo/src/main/java/com/sf/util/GeneUtils.java

@@ -19,8 +19,10 @@ public class GeneUtils {
 //        list.add("book_info");  // 书籍表
 //        list.add("book_chapter"); // 书籍章节表
 //        list.add("book_content"); // 章节内容表
-        list.add("news_info"); // 新闻列表
-        list.add("news_content"); // 新闻内容表
+//        list.add("news_info"); // 新闻列表
+//        list.add("news_content"); // 新闻内容表
+//        list.add("book_category"); // 书籍种类表
+        list.add("home_friend_link"); // 首页友情链接表
 
         // 快速生成器
         FastAutoGenerator.create("jdbc:mysql://localhost:3306/novel-cloud?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai",

+ 5 - 0
novel-demo/src/main/resources/mapper/BookCategoryMapper.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.mapper.BookCategoryMapper">
+
+</mapper>

+ 23 - 4
novel-demo/src/main/resources/mapper/BookInfoMapper.xml

@@ -3,17 +3,36 @@
 <mapper namespace="com.sf.mapper.BookInfoMapper">
 
     <select id="searchBooks" resultType="com.sf.entity.BookInfo">
-        select *
-        from book_info
-        where word_count > 0
+        select
+        id,category_id,category_name,book_name,author_id,author_name,word_count,last_chapter_name
+        from book_info where word_count > 0
+        <if test="dto.keyword != null and dto.keyword != ''">
+            and (book_name like concat('%',#{dto.keyword},'%') or author_name like
+            concat('%',#{dto.keyword},'%'))
+        </if>
         <if test="dto.workDirection != null">
             and work_direction = #{dto.workDirection}
         </if>
+        <if test="dto.categoryId != null">
+            and category_id = #{dto.categoryId}
+        </if>
+        <if test="dto.isVip != null">
+            and is_vip = #{dto.isVip}
+        </if>
+        <if test="dto.bookStatus != null">
+            and book_status = #{dto.bookStatus}
+        </if>
         <if test="dto.wordCountMin != null">
-            and word_count > #{dto.wordCountMin}
+            and word_count >= #{dto.wordCountMin}
         </if>
         <if test="dto.wordCountMax != null">
             and word_count <![CDATA[ < ]]> #{dto.wordCountMax}
         </if>
+        <if test="dto.updateTimeMin != null">
+            and last_chapter_update_time >= #{dto.updateTimeMin}
+        </if>
+        <if test="dto.sort != null">
+            order by ${dto.sort}
+        </if>
     </select>
 </mapper>

+ 5 - 0
novel-demo/src/main/resources/mapper/HomeFriendLinkMapper.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.mapper.HomeFriendLinkMapper">
+
+</mapper>