package com.java2nb.novel.service.impl;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.java2nb.novel.core.cache.CacheKey;
import com.java2nb.novel.core.cache.CacheService;
import com.java2nb.novel.core.enums.ResponseStatus;
import com.java2nb.novel.core.exception.BusinessException;
import com.java2nb.novel.core.utils.*;
import com.java2nb.novel.entity.*;
import com.java2nb.novel.entity.Book;
import com.java2nb.novel.mapper.*;
import com.java2nb.novel.search.BookSP;
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.BookVO;
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.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.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 qiqucode.com
*/
@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;
@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 < 20) {
type = 2;
} else if (i < 26) {
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 PageInfo searchByPage(BookSP 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 new PageInfo<>(bookMapper.searchByPage(params));
}
@Override
public List<BookCategory> listBookCategory() {
SelectStatementProvider selectStatementProvider = select(BookCategoryDynamicSqlSupport.id, BookCategoryDynamicSqlSupport.name,
没有合适的资源?快使用搜索试试~ 我知道了~
基于springboot的精品小说网站系统源码带爬虫.zip
共2000个文件
js:1110个
gif:646个
java:596个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 116 浏览量
2023-06-17
14:47:06
上传
评论
收藏 31.14MB ZIP 举报
温馨提示
源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经
资源推荐
资源详情
资源评论
收起资源包目录
基于springboot的精品小说网站系统源码带爬虫.zip (2000个子文件)
summernote-bs3.css 149KB
style.css 142KB
bootstrap.min.css 118KB
layui.css 92KB
layui.css 92KB
layui.css 92KB
easyui.css 72KB
layui.css 71KB
animate.css 67KB
layui.css 58KB
font-awesome.css 39KB
datepicker3.css 34KB
font-awesome.css 34KB
bootstrap-rtl.css 32KB
font-awesome.min.css 32KB
font-awesome.min.css 30KB
public.css 28KB
ambiance.css 26KB
style.min.css 25KB
layer.css 19KB
layer.css 19KB
sweetalert.css 18KB
simditor.css 18KB
wangEditor.css 17KB
ui.jqgrid.css 17KB
main.css 17KB
wangEditor.css 16KB
wangEditor.css 16KB
read.css 15KB
layim.css 15KB
layim.css 15KB
layim.css 15KB
wangEditor.min.css 15KB
summernote-0.8.8.css 15KB
wangEditor.min.css 14KB
wangEditor.min.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 13KB
base.css 12KB
base.css 12KB
dropzone.css 12KB
index.css 12KB
fullcalendar.css 11KB
layim.css 11KB
layui.mobile.css 11KB
book.css 11KB
layer.css 11KB
summernote.css 10KB
plyr.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
user.css 9KB
layim.css 9KB
layim.css 9KB
layim.css 9KB
user.css 9KB
awesome.css 9KB
codemirror.css 7KB
laydate.css 7KB
laydate.css 7KB
laydate.css 7KB
laydate.css 7KB
awesome-bootstrap-checkbox.css 7KB
toastr.min.css 7KB
blueimp-gallery.min.css 7KB
metroStyle.css 7KB
laydate.css 6KB
jquery.steps.css 6KB
blueimp-gallery.css 6KB
footable.core.css 6KB
layer.css 5KB
jquery.fancybox.css 5KB
dataTables.bootstrap.css 5KB
cropper.css 5KB
layer.css 4KB
bootstrap-table.min.css 4KB
login.css 4KB
clockpicker.css 4KB
basic.css 4KB
style.css 4KB
laydate.css 3KB
bootstrap-colorpicker.min.css 3KB
java2nb.css 3KB
ion.rangeSlider.css 3KB
layer.css 3KB
jquery.nouislider.css 3KB
layer.ext.css 3KB
bootstrap-markdown.min.css 3KB
jquery.gritter.css 3KB
jquery.edittable.css 2KB
style.css 2KB
style.css 2KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
- qq_356913672023-12-02感谢大佬分享的资源,对我启发很大,给了我新的灵感。
知一NN
- 粉丝: 42
- 资源: 4157
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MATLAB代码:储能参与调峰调频联合优化模型 关键词:储能 调频 调峰 充放电优化 联合运行 仿真平台:MATLAB+CVX 平台 主要内容:代码主要做的是考虑储能同时参与调峰以及调频的联合调度
- 汇川PLC程序(梯形图)
- 老年公寓信息管理:构建安全舒适的居住环境
- orca多机器人防碰 MATLAB仿真源代码全套技术资料.zip
- chatexcel数据表.zip
- 行驶车辆状态估计,无迹卡尔曼滤波,扩展卡尔曼滤波(EKF UKF) 软件使用:Matlab Simulink 适用场景:采用扩展卡尔曼滤波和无迹卡尔曼滤波EKF UKF进行行驶车辆的车速,质心侧偏
- 椅子、杯子、笔记本电脑、人、手机检测23-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 永磁同步电机(PMSM)基于高阶滑模观测器(HSMO)的无位置传感器速度控制仿真
- 永磁直驱风机MPPT最大功率点跟踪Simulink仿真模型,采用占空比扰动观察法,调整PWM的占空比来调节发电机达到最佳工作点
- U8点击按钮打开生成凭证界面
- Bukkit-BETA1.8.1服务端核心
- IEEE9节点系统Simulink仿真 1.基础功能:基于Matlab simulink平台搭建IEEE9节点仿真模型,对电力系统进行潮流计算(与编程用牛拉法计算潮流结果一致) 2.拓展功能: 可在该
- 椅子人坦克检测24-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord数据集合集.rar
- WRF-Chem 人为排放清单的设计
- ESP8266、ESP32网页配网 支持中文SSID
- lmx2592频率源原理图和程序源码 20MHz-9.8GHz的低噪声锁相环频率源,最小频率步进1MHz,输出功率可调,stm32f103c8t6控制lmx2592一体化,按键操控输出频率和输出功
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功