From a2567220cb0b3c8fb0adb3a2b456711905eb4a2e Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Sun, 15 May 2022 07:49:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=B0=8F=E8=AF=B4?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/front/BookController.java | 10 +++ .../novel/core/constant/CacheConsts.java | 7 +- .../novel/dto/resp/BookInfoRespDto.java | 81 +++++++++++++++++++ .../novel/manager/BookInfoCacheManager.java | 62 ++++++++++++++ .../xxyopen/novel/service/BookService.java | 6 ++ .../novel/service/impl/BookServiceImpl.java | 9 +++ 6 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/github/xxyopen/novel/dto/resp/BookInfoRespDto.java create mode 100644 src/main/java/io/github/xxyopen/novel/manager/BookInfoCacheManager.java diff --git a/src/main/java/io/github/xxyopen/novel/controller/front/BookController.java b/src/main/java/io/github/xxyopen/novel/controller/front/BookController.java index dc16df2..8de5b3f 100644 --- a/src/main/java/io/github/xxyopen/novel/controller/front/BookController.java +++ b/src/main/java/io/github/xxyopen/novel/controller/front/BookController.java @@ -2,10 +2,12 @@ package io.github.xxyopen.novel.controller.front; import io.github.xxyopen.novel.core.common.constant.ApiRouterConsts; import io.github.xxyopen.novel.core.common.resp.RestResp; +import io.github.xxyopen.novel.dto.resp.BookInfoRespDto; import io.github.xxyopen.novel.dto.resp.BookRankRespDto; import io.github.xxyopen.novel.service.BookService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -24,6 +26,14 @@ public class BookController { private final BookService bookService; + /** + * 小说信息查询接口 + * */ + @GetMapping("{bookId}") + public RestResp getById(@PathVariable("bookId") Long bookId){ + return bookService.getById(bookId); + } + /** * 小说点击榜查询接口 * */ diff --git a/src/main/java/io/github/xxyopen/novel/core/constant/CacheConsts.java b/src/main/java/io/github/xxyopen/novel/core/constant/CacheConsts.java index 6508610..8ee0317 100644 --- a/src/main/java/io/github/xxyopen/novel/core/constant/CacheConsts.java +++ b/src/main/java/io/github/xxyopen/novel/core/constant/CacheConsts.java @@ -54,6 +54,9 @@ public class CacheConsts { * */ public static final String HOME_FRIEND_LINK_CACHE_NAME = "homeFriendLinkCache"; + /**小说信息缓存*/ + public static final String BOOK_INFO_CACHE_NAME = "bookInfoCache"; + /** * 缓存配置常量 @@ -70,7 +73,9 @@ public class CacheConsts { BOOK_UPDATE_RANK_CACHE(0,BOOK_UPDATE_RANK_CACHE_NAME,60,1), - HOME_FRIEND_LINK_CACHE(2,HOME_FRIEND_LINK_CACHE_NAME,0,1) + HOME_FRIEND_LINK_CACHE(2,HOME_FRIEND_LINK_CACHE_NAME,0,1), + + BOOK_INFO_CACHE(0,BOOK_INFO_CACHE_NAME,60 * 60 * 18, 500) ; /** diff --git a/src/main/java/io/github/xxyopen/novel/dto/resp/BookInfoRespDto.java b/src/main/java/io/github/xxyopen/novel/dto/resp/BookInfoRespDto.java new file mode 100644 index 0000000..943bc8e --- /dev/null +++ b/src/main/java/io/github/xxyopen/novel/dto/resp/BookInfoRespDto.java @@ -0,0 +1,81 @@ +package io.github.xxyopen.novel.dto.resp; + +import lombok.Builder; +import lombok.Data; + +/** + * 小说信息 响应DTO + * @author xiongxiaoyang + * @date 2022/5/15 + */ +@Data +@Builder +public class BookInfoRespDto { + + /** + * ID + */ + private Long id; + + /** + * 类别ID + */ + private Long categoryId; + + /** + * 类别名 + */ + private String categoryName; + + /** + * 小说封面地址 + */ + private String picUrl; + + /** + * 小说名 + */ + private String bookName; + + /** + * 作家id + */ + private Long authorId; + + /** + * 作家名 + */ + private String authorName; + + /** + * 书籍描述 + */ + private String bookDesc; + + /** + * 书籍状态;0-连载中 1-已完结 + */ + private Integer bookStatus; + + /** + * 点击量 + */ + private Long visitCount; + + /** + * 总字数 + */ + private Integer wordCount; + + /** + * 评论数 + */ + private Integer commentCount; + + /** + * 首章节ID + * */ + private Long firstChapterId; + + +} diff --git a/src/main/java/io/github/xxyopen/novel/manager/BookInfoCacheManager.java b/src/main/java/io/github/xxyopen/novel/manager/BookInfoCacheManager.java new file mode 100644 index 0000000..ce5cf0b --- /dev/null +++ b/src/main/java/io/github/xxyopen/novel/manager/BookInfoCacheManager.java @@ -0,0 +1,62 @@ +package io.github.xxyopen.novel.manager; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.github.xxyopen.novel.core.constant.CacheConsts; +import io.github.xxyopen.novel.dao.entity.BookChapter; +import io.github.xxyopen.novel.dao.entity.BookInfo; +import io.github.xxyopen.novel.dao.mapper.BookChapterMapper; +import io.github.xxyopen.novel.dao.mapper.BookInfoMapper; +import io.github.xxyopen.novel.dto.resp.BookInfoRespDto; +import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; + +/** + * 小说信息 缓存管理类 + * + * @author xiongxiaoyang + * @date 2022/5/12 + */ +@Component +@RequiredArgsConstructor +public class BookInfoCacheManager { + + private final BookInfoMapper bookInfoMapper; + + private final BookChapterMapper bookChapterMapper; + + /** + * 查询小说信息,并放入缓存中 + */ + @Cacheable(cacheManager = CacheConsts.CAFFEINE_CACHE_MANAGER + , value = CacheConsts.BOOK_INFO_CACHE_NAME) + public BookInfoRespDto getBookInfo(Long id) { + // 查询基础信息 + BookInfo bookInfo = bookInfoMapper.selectById(id); + // 查询最新章节ID + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper + .eq("book_id", id) + .orderByAsc("chapter_num") + .last("limit 1"); + BookChapter firstBookChapter = bookChapterMapper.selectOne(queryWrapper); + // 组装响应对象 + return BookInfoRespDto.builder() + .id(bookInfo.getId()) + .bookName(bookInfo.getBookName()) + .bookDesc(bookInfo.getBookDesc()) + .bookStatus(bookInfo.getBookStatus()) + .authorId(bookInfo.getAuthorId()) + .authorName(bookInfo.getAuthorName()) + .categoryId(bookInfo.getCategoryId()) + .categoryName(bookInfo.getCategoryName()) + .commentCount(bookInfo.getCommentCount()) + .firstChapterId(firstBookChapter.getId()) + .picUrl(bookInfo.getPicUrl()) + .visitCount(bookInfo.getVisitCount()) + .wordCount(bookInfo.getWordCount()) + .build(); + } + + +} diff --git a/src/main/java/io/github/xxyopen/novel/service/BookService.java b/src/main/java/io/github/xxyopen/novel/service/BookService.java index 34e1357..1a197b2 100644 --- a/src/main/java/io/github/xxyopen/novel/service/BookService.java +++ b/src/main/java/io/github/xxyopen/novel/service/BookService.java @@ -1,6 +1,7 @@ package io.github.xxyopen.novel.service; import io.github.xxyopen.novel.core.common.resp.RestResp; +import io.github.xxyopen.novel.dto.resp.BookInfoRespDto; import io.github.xxyopen.novel.dto.resp.BookRankRespDto; import java.util.List; @@ -27,4 +28,9 @@ public interface BookService { * 小说更新榜查询 * */ RestResp> listUpdateRankBooks(); + + /** + * 小说信息查询 + * */ + RestResp getById(Long bookId); } diff --git a/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java b/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java index 30e1144..480eb50 100644 --- a/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java +++ b/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java @@ -1,7 +1,9 @@ package io.github.xxyopen.novel.service.impl; import io.github.xxyopen.novel.core.common.resp.RestResp; +import io.github.xxyopen.novel.dto.resp.BookInfoRespDto; import io.github.xxyopen.novel.dto.resp.BookRankRespDto; +import io.github.xxyopen.novel.manager.BookInfoCacheManager; import io.github.xxyopen.novel.manager.BookRankCacheManager; import io.github.xxyopen.novel.service.BookService; import lombok.RequiredArgsConstructor; @@ -21,6 +23,8 @@ public class BookServiceImpl implements BookService { private final BookRankCacheManager bookRankCacheManager; + private final BookInfoCacheManager bookInfoCacheManager; + @Override public RestResp> listVisitRankBooks() { return RestResp.ok(bookRankCacheManager.listVisitRankBooks()); @@ -35,4 +39,9 @@ public class BookServiceImpl implements BookService { public RestResp> listUpdateRankBooks() { return RestResp.ok(bookRankCacheManager.listUpdateRankBooks()); } + + @Override + public RestResp getById(Long bookId) { + return RestResp.ok(bookInfoCacheManager.getBookInfo(bookId)); + } }