From 6d02b77aa50d7c1d9f4d6e33b4580134e31181cd Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Mon, 16 May 2022 18:04:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=B0=8F=E8=AF=B4?= =?UTF-8?q?=E7=B1=BB=E5=88=AB=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=20&=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B0=8F=E8=AF=B4=E6=90=9C=E7=B4=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/front/BookController.java | 8 ++++ .../novel/core/constant/CacheConsts.java | 7 ++++ .../novel/core/constant/DatabaseConsts.java | 20 +++++++++ .../novel/dto/req/BookSearchReqDto.java | 15 ++++--- .../novel/dto/resp/BookCategoryRespDto.java | 26 ++++++++++++ .../manager/BookCategoryCacheManager.java | 42 +++++++++++++++++++ .../xxyopen/novel/service/BookService.java | 7 ++++ .../novel/service/impl/BookServiceImpl.java | 12 ++++-- src/main/resources/mapper/BookInfoMapper.xml | 14 +++---- 9 files changed, 135 insertions(+), 16 deletions(-) create mode 100644 src/main/java/io/github/xxyopen/novel/dto/resp/BookCategoryRespDto.java create mode 100644 src/main/java/io/github/xxyopen/novel/manager/BookCategoryCacheManager.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 334f226..65d53d5 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 @@ -25,6 +25,14 @@ public class BookController { private final BookService bookService; + /** + * 小说分类列表查询接口 + */ + @GetMapping("categoryList") + public RestResp> listCategory(Integer workDirection) { + return bookService.listCategory(workDirection); + } + /** * 小说搜索接口 */ 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 f70f351..0c80e70 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,11 @@ public class CacheConsts { */ public static final String HOME_FRIEND_LINK_CACHE_NAME = "homeFriendLinkCache"; + /** + * 小说分类列表缓存 + * */ + public static final String BOOK_CATEGORY_LIST_CACHE_NAME = "bookCategoryListCache"; + /** * 小说信息缓存 */ @@ -92,6 +97,8 @@ public class CacheConsts { HOME_FRIEND_LINK_CACHE(2, HOME_FRIEND_LINK_CACHE_NAME, 0, 1), + BOOK_CATEGORY_LIST_CACHE(0,BOOK_CATEGORY_LIST_CACHE_NAME,0,2), + BOOK_INFO_CACHE(0, BOOK_INFO_CACHE_NAME, 60 * 60 * 18, 500), BOOK_CHAPTER_CACHE(0,BOOK_CHAPTER_CACHE_NAME,60 * 60 * 6,5000), diff --git a/src/main/java/io/github/xxyopen/novel/core/constant/DatabaseConsts.java b/src/main/java/io/github/xxyopen/novel/core/constant/DatabaseConsts.java index 265573b..03a61f4 100644 --- a/src/main/java/io/github/xxyopen/novel/core/constant/DatabaseConsts.java +++ b/src/main/java/io/github/xxyopen/novel/core/constant/DatabaseConsts.java @@ -10,6 +10,26 @@ import lombok.Getter; */ public class DatabaseConsts { + /** + * 小说类别 + */ + public static class BookCategoryTable { + + @Getter + public enum ColumnEnum { + + WORK_DIRECTION("work_direction"); + + private String name; + + ColumnEnum(String name) { + this.name = name; + } + + } + + } + /** * 小说表 */ diff --git a/src/main/java/io/github/xxyopen/novel/dto/req/BookSearchReqDto.java b/src/main/java/io/github/xxyopen/novel/dto/req/BookSearchReqDto.java index be78a96..b9a6e09 100644 --- a/src/main/java/io/github/xxyopen/novel/dto/req/BookSearchReqDto.java +++ b/src/main/java/io/github/xxyopen/novel/dto/req/BookSearchReqDto.java @@ -1,7 +1,9 @@ package io.github.xxyopen.novel.dto.req; +import com.fasterxml.jackson.annotation.JsonFormat; import io.github.xxyopen.novel.core.common.req.PageReqDto; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; @@ -49,12 +51,15 @@ public class BookSearchReqDto extends PageReqDto { */ private Integer wordCountMax; - private Date updateTimeMin; - /** - * 更新时间(单位:天) - */ - private Long updatePeriod; + * 最小更新时间 + * 如果使用Get请求,直接使用对象接收,则可以使用@DateTimeFormat注解进行格式化; + * 如果使用Post请求,@RequestBody接收请求体参数,默认解析日期格式为yyyy-MM-dd HH:mm:ss , + * 如果需要接收其他格式的参数,则可以使用@JsonFormat注解 + * */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date updateTimeMin; /** * 排序字段 diff --git a/src/main/java/io/github/xxyopen/novel/dto/resp/BookCategoryRespDto.java b/src/main/java/io/github/xxyopen/novel/dto/resp/BookCategoryRespDto.java new file mode 100644 index 0000000..410a4b9 --- /dev/null +++ b/src/main/java/io/github/xxyopen/novel/dto/resp/BookCategoryRespDto.java @@ -0,0 +1,26 @@ +package io.github.xxyopen.novel.dto.resp; + +import lombok.Builder; +import lombok.Data; + +/** + * 小说分类 响应DTO + * + * @author xiongxiaoyang + * @date 2022/5/16 + */ +@Data +@Builder +public class BookCategoryRespDto { + + /** + * 类别ID + */ + private Long id; + + /** + * 类别名 + */ + private String name; + +} diff --git a/src/main/java/io/github/xxyopen/novel/manager/BookCategoryCacheManager.java b/src/main/java/io/github/xxyopen/novel/manager/BookCategoryCacheManager.java new file mode 100644 index 0000000..909698f --- /dev/null +++ b/src/main/java/io/github/xxyopen/novel/manager/BookCategoryCacheManager.java @@ -0,0 +1,42 @@ +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.core.constant.DatabaseConsts; +import io.github.xxyopen.novel.dao.entity.BookCategory; +import io.github.xxyopen.novel.dao.mapper.BookCategoryMapper; +import io.github.xxyopen.novel.dto.resp.BookCategoryRespDto; +import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 小说分类 缓存管理类 + * + * @author xiongxiaoyang + * @date 2022/5/12 + */ +@Component +@RequiredArgsConstructor +public class BookCategoryCacheManager { + + private final BookCategoryMapper bookCategoryMapper; + + /** + * 根据作品方向查询小说分类列表,并放入缓存中 + */ + @Cacheable(cacheManager = CacheConsts.CAFFEINE_CACHE_MANAGER + , value = CacheConsts.BOOK_CATEGORY_LIST_CACHE_NAME) + public List listCategory(Integer workDirection) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(DatabaseConsts.BookCategoryTable.ColumnEnum.WORK_DIRECTION.getName(), workDirection); + return bookCategoryMapper.selectList(queryWrapper).stream().map(v -> + BookCategoryRespDto.builder() + .id(v.getId()) + .name(v.getName()) + .build()).toList(); + } + +} 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 422f68a..ecf8552 100644 --- a/src/main/java/io/github/xxyopen/novel/service/BookService.java +++ b/src/main/java/io/github/xxyopen/novel/service/BookService.java @@ -96,4 +96,11 @@ public interface BookService { * @return 小说章节列表 * */ RestResp> listChapters(Long bookId); + + /** + * 小说分类列表查询 + * @param workDirection 作品方向;0-男频 1-女频 + * @return 分类列表 + * */ + RestResp> listCategory(Integer workDirection); } 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 5c6f467..6bf79df 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 @@ -11,10 +11,7 @@ import io.github.xxyopen.novel.dao.mapper.BookChapterMapper; import io.github.xxyopen.novel.dao.mapper.BookInfoMapper; import io.github.xxyopen.novel.dto.req.BookSearchReqDto; import io.github.xxyopen.novel.dto.resp.*; -import io.github.xxyopen.novel.manager.BookChapterCacheManager; -import io.github.xxyopen.novel.manager.BookContentCacheManager; -import io.github.xxyopen.novel.manager.BookInfoCacheManager; -import io.github.xxyopen.novel.manager.BookRankCacheManager; +import io.github.xxyopen.novel.manager.*; import io.github.xxyopen.novel.service.BookService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -38,6 +35,8 @@ import java.util.Random; @Slf4j public class BookServiceImpl implements BookService { + private final BookCategoryCacheManager bookCategoryCacheManager; + private final BookRankCacheManager bookRankCacheManager; private final BookInfoCacheManager bookInfoCacheManager; @@ -193,6 +192,11 @@ public class BookServiceImpl implements BookService { .build()).toList()); } + @Override + public RestResp> listCategory(Integer workDirection) { + return RestResp.ok(bookCategoryCacheManager.listCategory(workDirection)); + } + @Override public RestResp getBookContentAbout(Long chapterId) { // 查询章节信息 diff --git a/src/main/resources/mapper/BookInfoMapper.xml b/src/main/resources/mapper/BookInfoMapper.xml index b99c98f..28d6d3c 100644 --- a/src/main/resources/mapper/BookInfoMapper.xml +++ b/src/main/resources/mapper/BookInfoMapper.xml @@ -13,25 +13,25 @@ and work_direction = #{condition.workDirection} - and condition.category_id = #{condition.categoryId} + and category_id = #{condition.categoryId} - and condition.is_vip = #{condition.isVip} + and is_vip = #{condition.isVip} - and condition.book_status = #{condition.bookStatus} + and book_status = #{condition.bookStatus} - and condition.word_count >= #{condition.wordCountMin} + and word_count >= #{condition.wordCountMin} - and condition.word_count #{condition.wordCountMax} + and word_count #{condition.wordCountMax} - and condition.last_chapter_update_time >= #{condition.updateTimeMin} + and last_chapter_update_time >= #{condition.updateTimeMin} - order by #{condition.sort} + order by ${condition.sort}