diff --git a/novel-book/book-api/src/main/java/com/java2nb/novel/book/api/BookApi.java b/novel-book/book-api/src/main/java/com/java2nb/novel/book/api/BookApi.java index 00fe5f5..b47a68b 100644 --- a/novel-book/book-api/src/main/java/com/java2nb/novel/book/api/BookApi.java +++ b/novel-book/book-api/src/main/java/com/java2nb/novel/book/api/BookApi.java @@ -2,6 +2,7 @@ package com.java2nb.novel.book.api; import com.java2nb.novel.book.entity.Book; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.Date; @@ -23,4 +24,14 @@ public interface BookApi { * */ @GetMapping("api/book/queryBookByMinUpdateTime") List queryBookByMinUpdateTime(@RequestParam("minDate") Date minDate,@RequestParam("limit") int limit); + + /** + * 根据小说ID集合查询书籍列表 + * @param ids 小说ID集合 + * @return 书籍列表 + * */ + @GetMapping("api/book/queryBookByIds") + List queryBookByIds(@RequestBody List ids); + + } diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/controller/api/BookApi.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/controller/api/BookApi.java index 6b6fede..d8c3970 100644 --- a/novel-book/book-service/src/main/java/com/java2nb/novel/book/controller/api/BookApi.java +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/controller/api/BookApi.java @@ -5,9 +5,7 @@ import com.java2nb.novel.book.service.BookService; import io.swagger.annotations.Api; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import java.util.Date; @@ -39,5 +37,16 @@ public class BookApi { return bookService.queryBookByMinUpdateTime(minDate,limit); } + /** + * 根据小说ID集合查询书籍列表 + * @param ids 小说ID集合 + * @return 书籍列表 + * */ + @GetMapping("queryBookByIds") + List queryBookByIds(@RequestBody List ids){ + + return bookService.queryBookByIds(ids); + } + } diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/service/BookService.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/service/BookService.java index 1b51c3b..56ce0ee 100644 --- a/novel-book/book-service/src/main/java/com/java2nb/novel/book/service/BookService.java +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/service/BookService.java @@ -21,4 +21,11 @@ public interface BookService { * @return 书籍列表 * */ List queryBookByMinUpdateTime(Date minDate, int limit); + + /** + * 根据小说ID集合查询书籍列表 + * @param ids 小说ID集合 + * @return 书籍列表 + * */ + List queryBookByIds(List ids); } diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/service/impl/BookServiceImpl.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/service/impl/BookServiceImpl.java index 238a616..faf3d11 100644 --- a/novel-book/book-service/src/main/java/com/java2nb/novel/book/service/impl/BookServiceImpl.java +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/service/impl/BookServiceImpl.java @@ -13,6 +13,7 @@ import java.util.List; import static com.java2nb.novel.book.mapper.BookDynamicSqlSupport.book; import static org.mybatis.dynamic.sql.SqlBuilder.isGreaterThan; +import static org.mybatis.dynamic.sql.SqlBuilder.isIn; import static org.mybatis.dynamic.sql.select.SelectDSL.select; /** @@ -37,4 +38,15 @@ public class BookServiceImpl implements BookService { .build() .render(RenderingStrategies.MYBATIS3)); } + + @Override + public List queryBookByIds(List ids) { + return bookMapper.selectMany(select(BookDynamicSqlSupport.id,BookDynamicSqlSupport.bookName,BookDynamicSqlSupport.authorName, + BookDynamicSqlSupport.picUrl,BookDynamicSqlSupport.bookDesc,BookDynamicSqlSupport.score) + .from(book) + .where(BookDynamicSqlSupport.id,isIn(ids)) + .build() + .render(RenderingStrategies.MYBATIS3) + ); + } } diff --git a/novel-common/pom.xml b/novel-common/pom.xml index b387cfb..949be9c 100644 --- a/novel-common/pom.xml +++ b/novel-common/pom.xml @@ -109,7 +109,11 @@ lombok - + + + io.github.openfeign + feign-httpclient + diff --git a/novel-common/src/main/java/com/java2nb/novel/common/utils/Constants.java b/novel-common/src/main/java/com/java2nb/novel/common/utils/Constants.java new file mode 100644 index 0000000..e3f1b5d --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/common/utils/Constants.java @@ -0,0 +1,38 @@ +package com.java2nb.novel.common.utils; + +/** + * 常量类 + * @author Administrator + */ +public class Constants { + + /** + * 模板路径前缀保存key + * */ + public static final String TEMPLATE_PATH_PREFIX_KEY = "templatePathPrefixKey"; + + /** + * 保存图片到自己的存储介质路径前缀 + * */ + public static final String LOCAL_PIC_PREFIX = "/localPic/"; + + /** + * 用户客户端标识保存key + * */ + public static final String USER_CLIENT_MARK_KEY = "userClientMarkKey"; + + /** + * Object Json 缓存存在的最小长度 + * */ + public static final int OBJECT_JSON_CACHE_EXIST_LENGTH = 5; + + /** + * 首页设置的小说数量 + * */ + public static final int INDEX_BOOK_SETTING_NUM = 32; + + /** + * 累积的最大点击量 + * */ + public static final Integer ADD_MAX_VISIT_COUNT = 10; +} diff --git a/novel-common/src/main/resources/application-common.yml b/novel-common/src/main/resources/application-common.yml index aec7f32..7ae9510 100644 --- a/novel-common/src/main/resources/application-common.yml +++ b/novel-common/src/main/resources/application-common.yml @@ -15,6 +15,11 @@ logging: config: classpath:logback-boot.xml +feign: + httpclient: + enabled: true + + diff --git a/novel-home/pom.xml b/novel-home/pom.xml index dd02534..346ec6c 100644 --- a/novel-home/pom.xml +++ b/novel-home/pom.xml @@ -14,7 +14,11 @@ com.java2nb.novel - novel-common + book-api + + + com.java2nb.novel + news-api diff --git a/novel-home/src/main/java/com/java2nb/novel/home/HomeController.java b/novel-home/src/main/java/com/java2nb/novel/home/HomeController.java deleted file mode 100644 index a50b636..0000000 --- a/novel-home/src/main/java/com/java2nb/novel/home/HomeController.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.java2nb.novel.home; - -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class HomeController { -} diff --git a/novel-home/src/main/java/com/java2nb/novel/home/controller/HomeController.java b/novel-home/src/main/java/com/java2nb/novel/home/controller/HomeController.java new file mode 100644 index 0000000..ce41af2 --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/controller/HomeController.java @@ -0,0 +1,61 @@ +package com.java2nb.novel.home.controller; + +import com.java2nb.novel.common.bean.PageBean; +import com.java2nb.novel.common.bean.ResultBean; +import com.java2nb.novel.home.entity.HomeFriendLink; +import com.java2nb.novel.home.service.HomeService; +import com.java2nb.novel.home.vo.HomeBookVO; +import com.java2nb.novel.news.entity.News; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 首页微服务对外接口 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/28 + */ +@RestController +@RequestMapping("home") +@RequiredArgsConstructor +@Slf4j +@Api(tags = "首页相关接口") +public class HomeController { + + private final HomeService homeService; + + /** + * 首页小说推荐数据查询接口 + * */ + @ApiOperation("首页小说推荐列表查询接口") + @GetMapping("book") + public ResultBean> listHomeBook(){ + return ResultBean.ok(homeService.listHomeBook()); + } + + /** + * 首页友情链接查询接口 + * */ + @ApiOperation("首页友情链接查询接口") + @GetMapping("friendLink") + public ResultBean> listIndexLink(){ + return ResultBean.ok(homeService.listFriendLink()); + } + + /** + * 首页新闻查询接口 + * */ + @ApiOperation("首页新闻查询接口") + @GetMapping("news") + public ResultBean> listIndexNews(){ + return ResultBean.ok(homeService.listIndexNews()); + } + + +} diff --git a/novel-home/src/main/java/com/java2nb/novel/home/feign/BookFeignClient.java b/novel-home/src/main/java/com/java2nb/novel/home/feign/BookFeignClient.java new file mode 100644 index 0000000..ca544f6 --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/feign/BookFeignClient.java @@ -0,0 +1,15 @@ +package com.java2nb.novel.home.feign; + +import com.java2nb.novel.book.api.BookApi; +import org.springframework.cloud.openfeign.FeignClient; + +/** + * 小说服务Feign客户端 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/28 + */ +@FeignClient("book-service") +public interface BookFeignClient extends BookApi { + +} diff --git a/novel-home/src/main/java/com/java2nb/novel/home/feign/NewsFeignClient.java b/novel-home/src/main/java/com/java2nb/novel/home/feign/NewsFeignClient.java new file mode 100644 index 0000000..11d426f --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/feign/NewsFeignClient.java @@ -0,0 +1,16 @@ +package com.java2nb.novel.home.feign; + +import com.java2nb.novel.book.api.BookApi; +import com.java2nb.novel.news.api.NewsApi; +import org.springframework.cloud.openfeign.FeignClient; + +/** + * 新闻服务Feign客户端 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/28 + */ +@FeignClient("news-service") +public interface NewsFeignClient extends NewsApi { + +} diff --git a/novel-home/src/main/java/com/java2nb/novel/home/service/HomeService.java b/novel-home/src/main/java/com/java2nb/novel/home/service/HomeService.java new file mode 100644 index 0000000..395fe3b --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/service/HomeService.java @@ -0,0 +1,37 @@ +package com.java2nb.novel.home.service; + + +import com.java2nb.novel.home.entity.HomeBook; +import com.java2nb.novel.home.entity.HomeFriendLink; +import com.java2nb.novel.home.vo.HomeBookVO; +import com.java2nb.novel.news.entity.News; + +import java.util.List; + +/** + * 首页服务接口 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/28 + */ +public interface HomeService { + + /** + * 首页小说推荐数据查询 + * @return 首页推荐的小说数据 + * */ + List listHomeBook(); + + + /** + * 首页友情链接查询 + * @return 友情链接集合 + * */ + List listFriendLink(); + + /** + * 查询首页新闻 + * @return 新闻列表集合 + * */ + List listIndexNews(); +} diff --git a/novel-home/src/main/java/com/java2nb/novel/home/service/impl/HomeServiceImpl.java b/novel-home/src/main/java/com/java2nb/novel/home/service/impl/HomeServiceImpl.java new file mode 100644 index 0000000..8ba7cb8 --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/service/impl/HomeServiceImpl.java @@ -0,0 +1,114 @@ +package com.java2nb.novel.home.service.impl; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.java2nb.novel.book.entity.Book; +import com.java2nb.novel.common.cache.CacheKey; +import com.java2nb.novel.common.cache.CacheService; +import com.java2nb.novel.common.utils.Constants; +import com.java2nb.novel.home.entity.HomeBook; +import com.java2nb.novel.home.entity.HomeFriendLink; +import com.java2nb.novel.home.feign.BookFeignClient; +import com.java2nb.novel.home.feign.NewsFeignClient; +import com.java2nb.novel.home.mapper.HomeBookDynamicSqlSupport; +import com.java2nb.novel.home.mapper.HomeBookMapper; +import com.java2nb.novel.home.mapper.HomeFriendLinkDynamicSqlSupport; +import com.java2nb.novel.home.mapper.HomeFriendLinkMapper; +import com.java2nb.novel.home.service.HomeService; +import com.java2nb.novel.home.vo.HomeBookVO; +import com.java2nb.novel.news.entity.News; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.mybatis.dynamic.sql.render.RenderingStrategies; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; +import static org.mybatis.dynamic.sql.select.SelectDSL.select; + +/** + * 首页服务接口实现 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/28 + */ +@Service +@RequiredArgsConstructor +public class HomeServiceImpl implements HomeService { + + private final CacheService cacheService; + + private final BookFeignClient bookFeignClient; + + private final HomeBookMapper homeBookMapper; + + private final HomeFriendLinkMapper homeFriendLinkMapper; + + private final NewsFeignClient newsFeignClient; + + @SneakyThrows + @Override + public List listHomeBook() { + String result = cacheService.get(CacheKey.INDEX_BOOK_SETTINGS_KEY); + if (result == null || result.length() < Constants.OBJECT_JSON_CACHE_EXIST_LENGTH) { + List list = homeBookMapper.selectMany( + select(HomeBookDynamicSqlSupport.bookId,HomeBookDynamicSqlSupport.type) + .from(HomeBookDynamicSqlSupport.homeBook) + .orderBy(HomeBookDynamicSqlSupport.type,HomeBookDynamicSqlSupport.sort) + .build() + .render(RenderingStrategies.MYBATIS3)); + List books = bookFeignClient.queryBookByIds(list.stream().map(HomeBook::getBookId).collect(Collectors.toList())); + Map booksById = books.stream().collect(Collectors.toMap(Book::getId, Function.identity(),(key1, key2) -> key2)); + + List resultList = new ArrayList<>(booksById.size()); + for(HomeBook homeBook : list){ + HomeBookVO homeBookVO = new HomeBookVO(); + BeanUtils.copyProperties(homeBook,homeBookVO); + Book book = booksById.get(homeBook.getBookId()); + if(book != null){ + BeanUtils.copyProperties(book,homeBookVO); + resultList.add(homeBookVO); + } + + } + + result = new ObjectMapper().writeValueAsString(resultList); + cacheService.set(CacheKey.INDEX_BOOK_SETTINGS_KEY, result); + } + return new ObjectMapper().readValue(result, List.class); + } + + @Override + public List listFriendLink() { + List result = (List) cacheService.getObject(CacheKey.INDEX_LINK_KEY); + if(result == null || result.size() == 0) { + SelectStatementProvider selectStatement = + select(HomeFriendLinkDynamicSqlSupport.linkName,HomeFriendLinkDynamicSqlSupport.linkUrl) + .from(HomeFriendLinkDynamicSqlSupport.homeFriendLink) + .where(HomeFriendLinkDynamicSqlSupport.isOpen,isEqualTo((byte)1)) + .orderBy(HomeFriendLinkDynamicSqlSupport.sort) + .build() + .render(RenderingStrategies.MYBATIS3); + result = homeFriendLinkMapper.selectMany(selectStatement); + cacheService.setObject(CacheKey.INDEX_LINK_KEY,result); + } + return result; + } + + @Override + public List listIndexNews() { + List result = (List) cacheService.getObject(CacheKey.INDEX_NEWS_KEY); + if(result == null || result.size() == 0) { + result = newsFeignClient.listLastIndexNews(2); + cacheService.setObject(CacheKey.INDEX_NEWS_KEY,result); + } + return result; + } +} diff --git a/novel-home/src/main/java/com/java2nb/novel/home/vo/HomeBookVO.java b/novel-home/src/main/java/com/java2nb/novel/home/vo/HomeBookVO.java new file mode 100644 index 0000000..c587f96 --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/vo/HomeBookVO.java @@ -0,0 +1,35 @@ +package com.java2nb.novel.home.vo; + +import com.java2nb.novel.home.entity.HomeBook; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 11797 + */ +@Data +public class HomeBookVO extends HomeBook implements Serializable { + + @ApiModelProperty(value = "小说名") + private String bookName; + + @ApiModelProperty(value = "小说封面") + private String picUrl; + + @ApiModelProperty(value = "作者名") + private String authorName; + + @ApiModelProperty(value = "小说简介") + private String bookDesc; + + @ApiModelProperty(value = "小说评分") + private Float score; + + + @Override + public String toString() { + return super.toString(); + } +} diff --git a/novel-news/news-api/src/main/java/com/java2nb/novel/news/api/NewsApi.java b/novel-news/news-api/src/main/java/com/java2nb/novel/news/api/NewsApi.java new file mode 100644 index 0000000..7b7e33e --- /dev/null +++ b/novel-news/news-api/src/main/java/com/java2nb/novel/news/api/NewsApi.java @@ -0,0 +1,26 @@ +package com.java2nb.novel.news.api; + +import com.java2nb.novel.news.entity.News; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * 新闻微服务API接口定义(内部) + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/28 + */ +public interface NewsApi { + + /** + * 查询最新新闻集合 + * @param limit 查询条数 + * @return 新闻集合 + * */ + @GetMapping("api/news/listLastIndexNews") + List listLastIndexNews(@RequestParam("limit") int limit); + + +} diff --git a/novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/News.java b/novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/News.java index c0492e1..db4adf2 100644 --- a/novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/News.java +++ b/novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/News.java @@ -3,9 +3,10 @@ package com.java2nb.novel.news.entity; import io.swagger.annotations.ApiModelProperty; import javax.annotation.Generated; +import java.io.Serializable; import java.util.Date; -public class News { +public class News implements Serializable { @ApiModelProperty(value = "主键") @Generated("org.mybatis.generator.api.MyBatisGenerator") private Long id; diff --git a/novel-news/news-api/src/main/java/com/java2nb/novel/news/vo/NewsVO.java b/novel-news/news-api/src/main/java/com/java2nb/novel/news/vo/NewsVO.java new file mode 100644 index 0000000..3b32368 --- /dev/null +++ b/novel-news/news-api/src/main/java/com/java2nb/novel/news/vo/NewsVO.java @@ -0,0 +1,19 @@ +package com.java2nb.novel.news.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.java2nb.novel.news.entity.News; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @author Administrator + */ +@Data +public class NewsVO extends News { + + @ApiModelProperty(value = "新闻发布时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + private Date createTime; +} diff --git a/novel-news/news-service/src/main/java/com/java2nb/novel/news/controller/NewsController.java b/novel-news/news-service/src/main/java/com/java2nb/novel/news/controller/NewsController.java new file mode 100644 index 0000000..f35fb5e --- /dev/null +++ b/novel-news/news-service/src/main/java/com/java2nb/novel/news/controller/NewsController.java @@ -0,0 +1,56 @@ +package com.java2nb.novel.news.controller; + +import com.github.pagehelper.PageInfo; +import com.java2nb.novel.common.bean.ResultBean; +import com.java2nb.novel.news.entity.News; +import com.java2nb.novel.news.service.NewsService; +import com.java2nb.novel.news.vo.NewsVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author 11797 + */ +@RestController +@RequestMapping("news") +@RequiredArgsConstructor +@Slf4j +@Api(tags = "新闻相关接口") +public class NewsController { + + private final NewsService newsService; + + + /** + * 分页查询新闻列表接口 + * */ + @ApiOperation("分页查询新闻列表接口") + @GetMapping("listByPage") + public ResultBean> listByPage(@ApiParam("当前页码") @RequestParam(value = "curr", defaultValue = "1") int page, @ApiParam("每页大小") @RequestParam(value = "limit", defaultValue = "5") int pageSize){ + return ResultBean.ok(new PageInfo<>(newsService.listByPage(page,pageSize))); + } + + /** + * 新闻内容查询接口 + * */ + @ApiOperation("新闻内容查询接口") + @GetMapping("{newsId}") + public ResultBean newsInfo(@ApiParam("新闻ID") @PathVariable("newsId") Long newsId) { + News news = newsService.queryNewsInfo(newsId); + NewsVO newsVO = new NewsVO(); + BeanUtils.copyProperties(news,newsVO); + return ResultBean.ok(newsVO); + } + + + + +} diff --git a/novel-news/news-service/src/main/java/com/java2nb/novel/news/controller/api/NewsApi.java b/novel-news/news-service/src/main/java/com/java2nb/novel/news/controller/api/NewsApi.java new file mode 100644 index 0000000..3d694ab --- /dev/null +++ b/novel-news/news-service/src/main/java/com/java2nb/novel/news/controller/api/NewsApi.java @@ -0,0 +1,41 @@ +package com.java2nb.novel.news.controller.api; + +import com.java2nb.novel.news.entity.News; +import com.java2nb.novel.news.service.NewsService; +import com.java2nb.novel.news.vo.NewsVO; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.Date; +import java.util.List; + +/** + * 新闻微服务API接口(内部调用) + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/27 + */ +@RestController +@RequestMapping(("api/news")) +@ApiIgnore +@RequiredArgsConstructor +public class NewsApi { + + private final NewsService newsService; + + /** + * 查询最新新闻集合 + * @param limit 查询条数 + * @return 新闻集合 + * */ + @GetMapping("listLastIndexNews") + List listLastIndexNews(@RequestParam("limit") int limit){ + + return newsService.listLastIndexNews(limit); + + } + + + +} diff --git a/novel-news/news-service/src/main/java/com/java2nb/novel/news/service/NewsService.java b/novel-news/news-service/src/main/java/com/java2nb/novel/news/service/NewsService.java new file mode 100644 index 0000000..c4c568b --- /dev/null +++ b/novel-news/news-service/src/main/java/com/java2nb/novel/news/service/NewsService.java @@ -0,0 +1,38 @@ +package com.java2nb.novel.news.service; + + +import com.java2nb.novel.news.entity.News; +import com.java2nb.novel.news.vo.NewsVO; + +import java.util.List; + +/** + * 新闻服务接口 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/28 + */ +public interface NewsService { + + /** + * 分页查询新闻列表接口 + * @param page 查询页码 + * @param pageSize 分页大小 + * @return 新闻列表集合 + * */ + List listByPage(int page, int pageSize); + + /** + * 查询最新新闻集合 + * @param limit 查询条数 + * @return 新闻集合 + * */ + List listLastIndexNews(int limit); + + /** + * 查询新闻 + * @param newsId 新闻id + * @return 新闻 + * */ + News queryNewsInfo(Long newsId); +} diff --git a/novel-news/news-service/src/main/java/com/java2nb/novel/news/service/impl/NewsServiceImpl.java b/novel-news/news-service/src/main/java/com/java2nb/novel/news/service/impl/NewsServiceImpl.java new file mode 100644 index 0000000..d7de3f3 --- /dev/null +++ b/novel-news/news-service/src/main/java/com/java2nb/novel/news/service/impl/NewsServiceImpl.java @@ -0,0 +1,70 @@ +package com.java2nb.novel.news.service.impl; + +import com.github.pagehelper.PageHelper; +import com.java2nb.novel.common.utils.BeanUtil; +import com.java2nb.novel.news.entity.News; +import com.java2nb.novel.news.mapper.NewsDynamicSqlSupport; +import com.java2nb.novel.news.mapper.NewsMapper; +import com.java2nb.novel.news.service.NewsService; +import com.java2nb.novel.news.vo.NewsVO; +import lombok.RequiredArgsConstructor; +import org.mybatis.dynamic.sql.render.RenderingStrategies; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; +import static org.mybatis.dynamic.sql.select.SelectDSL.select; + +/** + * 新闻服务接口实现 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/28 + */ +@Service +@RequiredArgsConstructor +public class NewsServiceImpl implements NewsService { + + private final NewsMapper newsMapper; + + + + @Override + public List listByPage(int page, int pageSize) { + PageHelper.startPage(page,pageSize); + SelectStatementProvider selectStatement = + select(NewsDynamicSqlSupport.id, NewsDynamicSqlSupport.catName, + NewsDynamicSqlSupport.catId, NewsDynamicSqlSupport.title,NewsDynamicSqlSupport.createTime) + .from(NewsDynamicSqlSupport.news) + .orderBy(NewsDynamicSqlSupport.createTime.descending()) + .build() + .render(RenderingStrategies.MYBATIS3); + + return BeanUtil.copyList(newsMapper.selectMany(selectStatement), NewsVO.class); + } + + @Override + public List listLastIndexNews(int limit) { + SelectStatementProvider selectStatement = + select(NewsDynamicSqlSupport.id, NewsDynamicSqlSupport.catName, + NewsDynamicSqlSupport.catId, NewsDynamicSqlSupport.title) + .from(NewsDynamicSqlSupport.news) + .orderBy(NewsDynamicSqlSupport.createTime.descending()) + .limit(limit) + .build() + .render(RenderingStrategies.MYBATIS3); + return newsMapper.selectMany(selectStatement); + } + + @Override + public News queryNewsInfo(Long newsId) { + SelectStatementProvider selectStatement = select(NewsDynamicSqlSupport.news.allColumns()) + .from(NewsDynamicSqlSupport.news) + .where(NewsDynamicSqlSupport.id,isEqualTo(newsId)) + .build() + .render(RenderingStrategies.MYBATIS3); + return newsMapper.selectMany(selectStatement).get(0); + } +} diff --git a/novel-search/src/main/java/com/java2nb/novel/search/controller/SearchController.java b/novel-search/src/main/java/com/java2nb/novel/search/controller/SearchController.java index c8258f5..dc81d16 100644 --- a/novel-search/src/main/java/com/java2nb/novel/search/controller/SearchController.java +++ b/novel-search/src/main/java/com/java2nb/novel/search/controller/SearchController.java @@ -14,14 +14,16 @@ import org.springframework.web.bind.annotation.*; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** - * @author 11797 + * 搜索微服务对外接口 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/28 */ @RestController @RequestMapping("search") @RequiredArgsConstructor @Slf4j @Api(tags = "搜索相关接口") - public class SearchController { private final SearchService searchService;