package com.java2nb.novel.service.impl;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageHelper;
import com.java2nb.novel.core.cache.CacheKey;
import com.java2nb.novel.core.cache.CacheService;
import com.java2nb.novel.core.config.BookPriceProperties;
import com.java2nb.novel.core.enums.ResponseStatus;
import io.github.xxyopen.web.util.BeanUtil;
import com.java2nb.novel.core.utils.Constants;
import com.java2nb.novel.core.utils.StringUtil;
import com.java2nb.novel.entity.Book;
import com.java2nb.novel.entity.*;
import com.java2nb.novel.mapper.*;
import com.java2nb.novel.service.AuthorService;
import com.java2nb.novel.service.BookService;
import com.java2nb.novel.service.FileService;
import com.java2nb.novel.service.SearchService;
import com.java2nb.novel.vo.BookCommentVO;
import com.java2nb.novel.vo.BookSettingVO;
import com.java2nb.novel.vo.BookSpVO;
import com.java2nb.novel.vo.BookVO;
import io.github.xxyopen.model.page.PageBean;
import io.github.xxyopen.model.page.builder.pagehelper.PageBuilder;
import io.github.xxyopen.util.IdWorker;
import io.github.xxyopen.web.exception.BusinessException;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.dynamic.sql.SortSpecification;
import org.mybatis.dynamic.sql.render.RenderingStrategies;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.orderbyhelper.OrderByHelper;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.java2nb.novel.mapper.BookCategoryDynamicSqlSupport.bookCategory;
import static com.java2nb.novel.mapper.BookCommentDynamicSqlSupport.bookComment;
import static com.java2nb.novel.mapper.BookContentDynamicSqlSupport.bookContent;
import static com.java2nb.novel.mapper.BookContentDynamicSqlSupport.content;
import static com.java2nb.novel.mapper.BookDynamicSqlSupport.*;
import static com.java2nb.novel.mapper.BookIndexDynamicSqlSupport.bookIndex;
import static org.mybatis.dynamic.sql.SqlBuilder.*;
import static org.mybatis.dynamic.sql.select.SelectDSL.select;
/**
* @author 11797
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class BookServiceImpl implements BookService {
/**
* 本地图片保存路径
*/
@Value("${pic.save.path}")
private String picSavePath;
@Value("${spring.elasticsearch.enable}")
private Integer esEnable;
private final FrontBookSettingMapper bookSettingMapper;
private final FrontBookMapper bookMapper;
private final BookCategoryMapper bookCategoryMapper;
private final BookIndexMapper bookIndexMapper;
private final BookContentMapper bookContentMapper;
private final FrontBookCommentMapper bookCommentMapper;
private final BookAuthorMapper bookAuthorMapper;
private final CacheService cacheService;
private final AuthorService authorService;
private final SearchService searchService;
private final FileService fileService;
private final BookPriceProperties bookPriceConfig;
@SneakyThrows
@Override
public Map<Byte, List<BookSettingVO>> listBookSettingVO() {
String result = cacheService.get(CacheKey.INDEX_BOOK_SETTINGS_KEY);
if (result == null || result.length() < Constants.OBJECT_JSON_CACHE_EXIST_LENGTH) {
List<BookSettingVO> list = bookSettingMapper.listVO();
if (list.size() == 0) {
//如果首页小说没有被设置,则初始化首页小说设置
list = initIndexBookSetting();
}
result = new ObjectMapper().writeValueAsString(list.stream().collect(Collectors.groupingBy(BookSettingVO::getType)));
cacheService.set(CacheKey.INDEX_BOOK_SETTINGS_KEY, result);
}
return new ObjectMapper().readValue(result, Map.class);
}
/**
* 初始化首页小说设置
*/
private List<BookSettingVO> initIndexBookSetting() {
Date currentDate = new Date();
List<Book> books = bookMapper.selectIdsByScoreAndRandom(Constants.INDEX_BOOK_SETTING_NUM);
if (books.size() == Constants.INDEX_BOOK_SETTING_NUM) {
List<BookSetting> bookSettingList = new ArrayList<>(Constants.INDEX_BOOK_SETTING_NUM);
List<BookSettingVO> bookSettingVOList = new ArrayList<>(Constants.INDEX_BOOK_SETTING_NUM);
for (int i = 0; i < books.size(); i++) {
Book book = books.get(i);
byte type;
if (i < 4) {
type = 0;
} else if (i < 14) {
type = 1;
} else if (i < 19) {
type = 2;
} else if (i < 25) {
type = 3;
} else {
type = 4;
}
BookSettingVO bookSettingVO = new BookSettingVO();
BookSetting bookSetting = new BookSetting();
bookSetting.setType(type);
bookSetting.setSort((byte) i);
bookSetting.setBookId(book.getId());
bookSetting.setCreateTime(currentDate);
bookSetting.setUpdateTime(currentDate);
bookSettingList.add(bookSetting);
BeanUtils.copyProperties(book, bookSettingVO);
BeanUtils.copyProperties(bookSetting, bookSettingVO);
bookSettingVOList.add(bookSettingVO);
}
bookSettingMapper.insertMultiple(bookSettingList);
return bookSettingVOList;
}
return new ArrayList<>(0);
}
@Override
public List<Book> listClickRank() {
List<Book> result = (List<Book>) cacheService.getObject(CacheKey.INDEX_CLICK_BANK_BOOK_KEY);
if (result == null || result.size() == 0) {
result = listRank((byte) 0, 10);
cacheService.setObject(CacheKey.INDEX_CLICK_BANK_BOOK_KEY, result, 5000);
}
return result;
}
@Override
public List<Book> listNewRank() {
List<Book> result = (List<Book>) cacheService.getObject(CacheKey.INDEX_NEW_BOOK_KEY);
if (result == null || result.size() == 0) {
result = listRank((byte) 1, 10);
cacheService.setObject(CacheKey.INDEX_NEW_BOOK_KEY, result, 3600);
}
return result;
}
@Override
public List<BookVO> listUpdateRank() {
List<BookVO> result = (List<BookVO>) cacheService.getObject(CacheKey.INDEX_UPDATE_BOOK_KEY);
if (result == null || result.size() == 0) {
List<Book> bookPOList = listRank((byte) 2, 23);
result = BeanUtil.copyList(bookPOList, BookVO.class);
cacheService.setObject(CacheKey.INDEX_UPDATE_BOOK_KEY, result, 60 * 10);
}
return result;
}
@Override
public PageBean<?> searchByPage(BookSpVO params, int page, int pageSize) {
if (params.getUpdatePeriod() != null) {
long cur = System.currentTimeMillis();
long period = params.getUpdatePeriod() * 24 * 3600 * 1000;
long time = cur - period;
params.setUpdateTimeMin(new Date(time));
}
if (esEnable == 1) {
try {
return searchService.searchBook(params,page,pageSize);
}catch (Exception e){
log.error(e.getMessage(),e);
}
}
PageHelper.startPage(page, pageSize);
if (StringUtils.isNotBlank(params.getSort())) {
OrderByHelper.orderBy(params.getSort() + " desc");
}
return PageBuilder.b
没有合适的资源?快使用搜索试试~ 我知道了~
novel-plus.zip
共2009个文件
js:783个
html:431个
java:339个
需积分: 5 0 下载量 67 浏览量
2023-08-18
09:44:45
上传
评论
收藏 50.77MB ZIP 举报
温馨提示
novel-plus
资源推荐
资源详情
资源评论
收起资源包目录
novel-plus.zip (2009个子文件)
summernote-bs3.css 143KB
style.css 134KB
bootstrap.min.css 118KB
layui.css 87KB
layui.css 87KB
layui.css 87KB
layui.css 87KB
layui.css 87KB
layui.css 87KB
layui.css 87KB
hs13.css 81KB
layui.css 73KB
layui.css 71KB
easyui.css 69KB
easyui.css 69KB
animate.css 64KB
layui.css 57KB
font-awesome.css 37KB
datepicker3.css 33KB
font-awesome.min.css 32KB
font-awesome.css 32KB
bootstrap-rtl.css 31KB
font-awesome.min.css 30KB
public.css 27KB
public.css 27KB
ambiance.css 25KB
style.min.css 25KB
layer.css 18KB
layer.css 18KB
layer.css 18KB
sweetalert.css 18KB
simditor.css 17KB
wangEditor.css 17KB
main.css 17KB
main.css 17KB
ui.jqgrid.css 16KB
wangEditor.css 16KB
wangEditor.css 16KB
wangEditor.css 16KB
layim.css 15KB
layim.css 15KB
layim.css 15KB
layim.css 15KB
layim.css 15KB
layim.css 15KB
layim.css 15KB
wangEditor.min.css 15KB
summernote-0.8.8.css 15KB
read.css 15KB
read.css 15KB
wangEditor.min.css 14KB
wangEditor.min.css 14KB
wangEditor.min.css 14KB
layer.css 14KB
layer.css 14KB
layer.css 14KB
layer.css 14KB
layer.css 14KB
layer.css 14KB
layer.css 14KB
layer.css 14KB
jasny-bootstrap.min.css 14KB
jquery-ui-1.10.4.custom.min.css 14KB
chosen.css 12KB
base.css 12KB
base.css 12KB
base.css 12KB
index.css 11KB
index.css 11KB
index.css 11KB
index.css 11KB
dropzone.css 11KB
layer.css 11KB
layim.css 11KB
layui.mobile.css 11KB
book.css 11KB
book.css 11KB
fullcalendar.css 11KB
summernote.css 10KB
plyr.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layui.mobile.css 10KB
layuimini.css 9KB
zyupload-1.0.0.min.css 9KB
layim.css 9KB
layim.css 9KB
layim.css 9KB
layim.css 9KB
layim.css 9KB
layim.css 9KB
layim.css 9KB
user.css 9KB
user.css 9KB
共 2009 条
- 1
- 2
- 3
- 4
- 5
- 6
- 21
资源评论
hello_中年人
- 粉丝: 7
- 资源: 324
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功