mirror of
https://github.com/201206030/novel-cloud.git
synced 2025-06-24 05:56:38 +00:00
新闻微服务开发完成,首页微服务开发中
This commit is contained in:
@ -14,7 +14,11 @@
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.java2nb.novel</groupId>
|
||||
<artifactId>novel-common</artifactId>
|
||||
<artifactId>book-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.java2nb.novel</groupId>
|
||||
<artifactId>news-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
@ -1,7 +0,0 @@
|
||||
package com.java2nb.novel.home;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
public class HomeController {
|
||||
}
|
@ -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<List<HomeBookVO>> listHomeBook(){
|
||||
return ResultBean.ok(homeService.listHomeBook());
|
||||
}
|
||||
|
||||
/**
|
||||
* 首页友情链接查询接口
|
||||
* */
|
||||
@ApiOperation("首页友情链接查询接口")
|
||||
@GetMapping("friendLink")
|
||||
public ResultBean<List<HomeFriendLink>> listIndexLink(){
|
||||
return ResultBean.ok(homeService.listFriendLink());
|
||||
}
|
||||
|
||||
/**
|
||||
* 首页新闻查询接口
|
||||
* */
|
||||
@ApiOperation("首页新闻查询接口")
|
||||
@GetMapping("news")
|
||||
public ResultBean<List<News>> listIndexNews(){
|
||||
return ResultBean.ok(homeService.listIndexNews());
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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 {
|
||||
|
||||
}
|
@ -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 {
|
||||
|
||||
}
|
@ -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<HomeBookVO> listHomeBook();
|
||||
|
||||
|
||||
/**
|
||||
* 首页友情链接查询
|
||||
* @return 友情链接集合
|
||||
* */
|
||||
List<HomeFriendLink> listFriendLink();
|
||||
|
||||
/**
|
||||
* 查询首页新闻
|
||||
* @return 新闻列表集合
|
||||
* */
|
||||
List<News> listIndexNews();
|
||||
}
|
@ -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<HomeBookVO> listHomeBook() {
|
||||
String result = cacheService.get(CacheKey.INDEX_BOOK_SETTINGS_KEY);
|
||||
if (result == null || result.length() < Constants.OBJECT_JSON_CACHE_EXIST_LENGTH) {
|
||||
List<HomeBook> list = homeBookMapper.selectMany(
|
||||
select(HomeBookDynamicSqlSupport.bookId,HomeBookDynamicSqlSupport.type)
|
||||
.from(HomeBookDynamicSqlSupport.homeBook)
|
||||
.orderBy(HomeBookDynamicSqlSupport.type,HomeBookDynamicSqlSupport.sort)
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
List<Book> books = bookFeignClient.queryBookByIds(list.stream().map(HomeBook::getBookId).collect(Collectors.toList()));
|
||||
Map<Long, Book> booksById = books.stream().collect(Collectors.toMap(Book::getId, Function.identity(),(key1, key2) -> key2));
|
||||
|
||||
List<HomeBookVO> 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<HomeFriendLink> listFriendLink() {
|
||||
List<HomeFriendLink> result = (List<HomeFriendLink>) 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<News> listIndexNews() {
|
||||
List<News> result = (List<News>) 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;
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user