From 750c8dee0263fbd1a84b6f018b0aac380fd25415 Mon Sep 17 00:00:00 2001 From: xiaoyang Date: Tue, 17 Aug 2021 19:55:24 +0800 Subject: [PATCH 01/19] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B0=8F=E8=AF=B4?= =?UTF-8?q?=E5=86=85=E5=AE=B9TXT=E6=96=87=E6=9C=AC=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E6=96=B9=E6=A1=88=EF=BC=88=E4=B8=80=E8=A1=8C=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=88=87=E6=8D=A2=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java2nb/novel/core/utils/FileUtil.java | 66 ++++++++++++------- .../main/resources/application-common-dev.yml | 4 ++ .../resources/application-common-prod.yml | 5 +- .../resources/mybatis/generatorConfig.xml | 2 +- .../novel/service/BookContentService.java | 16 +++++ .../novel/service/impl/BookServiceImpl.java | 40 +++++------ .../impl/DbBookContentServiceImpl.java | 44 +++++++++++++ .../impl/FileBookContentServiceImpl.java | 36 ++++++++++ .../java2nb/novel/page/PageController.java | 15 +++-- .../novel/service/BookContentService.java | 11 ++++ .../impl/DbBookContentServiceImpl.java | 38 +++++++++++ .../impl/FileBookContentServiceImpl.java | 39 +++++++++++ 12 files changed, 262 insertions(+), 54 deletions(-) create mode 100644 novel-crawl/src/main/java/com/java2nb/novel/service/BookContentService.java create mode 100644 novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java create mode 100644 novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java create mode 100644 novel-front/src/main/java/com/java2nb/novel/service/BookContentService.java create mode 100644 novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java create mode 100644 novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java index 8caf2bc..50ea3dc 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java @@ -19,6 +19,7 @@ import java.util.Objects; /** * 文件操作工具类 + * * @author 11797 */ @UtilityClass @@ -27,8 +28,8 @@ public class FileUtil { /** * 网络图片转本地 - * */ - public String network2Local(String picSrc,String picSavePath,String visitPrefix) { + */ + public String network2Local(String picSrc, String picSavePath, String visitPrefix) { InputStream input = null; OutputStream out = null; try { @@ -53,45 +54,41 @@ public class FileUtil { } out.flush(); - if( ImageIO.read(picFile) == null){ + if (ImageIO.read(picFile) == null) { picSrc = "/images/default.gif"; } - }catch (Exception e){ - log.error(e.getMessage(),e); + } catch (Exception e) { + log.error(e.getMessage(), e); picSrc = "/images/default.gif"; - }finally { - if(input != null){ - try { - input.close(); - } catch (IOException e) { - log.error(e.getMessage(),e); - }finally { - if(out != null){ - try { - out.close(); - } catch (IOException e) { - log.error(e.getMessage(),e); - } - } - } - } + } finally { + closeStream(input, out); } - return picSrc; } + @SneakyThrows + private void closeStream(InputStream input, OutputStream out) { + if (input != null) { + input.close(); + } + if (out != null) { + out.close(); + } + } + /** * 判断文件是否为图片 + * * @param file 需要判断的文件 * @return true:是图片,false:不是图片 - * */ + */ @SneakyThrows - public boolean isImage(File file){ + public boolean isImage(File file) { BufferedImage bi = ImageIO.read(file); @@ -100,6 +97,27 @@ public class FileUtil { } + public void writeContentToFile(String fileSavePath, String fileSrc, String content) { + OutputStream out = null; + try { + File file = new File(fileSavePath + fileSrc); + File parentFile = file.getParentFile(); + if (!parentFile.exists()) { + parentFile.mkdirs(); + } + out = new FileOutputStream(file); + out.write(content.getBytes()); + byte[] b = new byte[4096]; + out.flush(); + + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new RuntimeException("文件写入失败"); + } finally { + closeStream(null, out); + } + + } } diff --git a/novel-common/src/main/resources/application-common-dev.yml b/novel-common/src/main/resources/application-common-dev.yml index 5515f1f..9018872 100644 --- a/novel-common/src/main/resources/application-common-dev.yml +++ b/novel-common/src/main/resources/application-common-dev.yml @@ -71,3 +71,7 @@ sharding: +txt: + save: + storage: db #存储介质,db:数据库,file:txt文本 + path: /Users/xiongxiaoyang/books #txt小说文本保存路径 \ No newline at end of file diff --git a/novel-common/src/main/resources/application-common-prod.yml b/novel-common/src/main/resources/application-common-prod.yml index 1f1c824..8853b0b 100644 --- a/novel-common/src/main/resources/application-common-prod.yml +++ b/novel-common/src/main/resources/application-common-prod.yml @@ -74,7 +74,10 @@ logging: - +txt: + save: + storage: db #存储介质,db:数据库,file:txt文本 + path: /Users/xiongxiaoyang/books #txt小说文本保存路径 diff --git a/novel-common/src/main/resources/mybatis/generatorConfig.xml b/novel-common/src/main/resources/mybatis/generatorConfig.xml index 7408b76..984a5aa 100644 --- a/novel-common/src/main/resources/mybatis/generatorConfig.xml +++ b/novel-common/src/main/resources/mybatis/generatorConfig.xml @@ -44,7 +44,7 @@ - +
diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/BookContentService.java b/novel-crawl/src/main/java/com/java2nb/novel/service/BookContentService.java new file mode 100644 index 0000000..7090f3a --- /dev/null +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/BookContentService.java @@ -0,0 +1,16 @@ +package com.java2nb.novel.service; + +import com.java2nb.novel.entity.BookContent; + +import java.util.List; + +public interface BookContentService { + + void saveBookContent(List bookContentList,Long bookId); + + void saveBookContent(BookContent bookContent,Long bookId); + + void updateBookContent(BookContent bookContent,Long bookId); + + +} diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java index 64b6550..677d0c8 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java @@ -4,6 +4,7 @@ import com.java2nb.novel.entity.Book; import com.java2nb.novel.entity.BookContent; import com.java2nb.novel.entity.BookIndex; import com.java2nb.novel.mapper.*; +import com.java2nb.novel.service.BookContentService; import com.java2nb.novel.service.BookService; import com.java2nb.novel.utils.Constants; import lombok.RequiredArgsConstructor; @@ -37,7 +38,7 @@ public class BookServiceImpl implements BookService { private final CrawlBookIndexMapper bookIndexMapper; - private final BookContentMapper bookContentMapper; + private final BookContentService bookContentService; @Override @@ -46,7 +47,7 @@ public class BookServiceImpl implements BookService { return bookMapper.count(countFrom(BookDynamicSqlSupport.book).where(BookDynamicSqlSupport.bookName, isEqualTo(bookName)) .and(BookDynamicSqlSupport.authorName, isEqualTo(authorName)) .build() - .render(RenderingStrategies.MYBATIS3))>0; + .render(RenderingStrategies.MYBATIS3)) > 0; } @@ -57,7 +58,7 @@ public class BookServiceImpl implements BookService { .equalTo(sourceId) .set(crawlBookId) .equalTo(bookId) - .where(BookDynamicSqlSupport.id,isEqualTo(id)) + .where(BookDynamicSqlSupport.id, isEqualTo(id)) .build() .render(RenderingStrategies.MYBATIS3)); } @@ -74,9 +75,9 @@ public class BookServiceImpl implements BookService { @Transactional(rollbackFor = Exception.class) @Override public void saveBookAndIndexAndContent(Book book, List bookIndexList, List bookContentList) { - if(!queryIsExistByBookNameAndAuthorName(book.getBookName(),book.getAuthorName())) { + if (!queryIsExistByBookNameAndAuthorName(book.getBookName(), book.getAuthorName())) { - if(bookIndexList.size()>0) { + if (bookIndexList.size() > 0) { //保存小说主表 @@ -85,7 +86,7 @@ public class BookServiceImpl implements BookService { //批量保存目录和内容 bookIndexMapper.insertMultiple(bookIndexList); - bookContentMapper.insertMultiple(bookContentList); + bookContentService.saveBookContent(bookContentList,book.getId()); } } @@ -96,7 +97,7 @@ public class BookServiceImpl implements BookService { @Override public List queryNeedUpdateBook(Date startDate, int limit) { List books = bookMapper.queryNeedUpdateBook(startDate, limit); - if(books.size()>0) { + if (books.size() > 0) { //更新最后抓取时间为当前时间 bookMapper.updateCrawlLastTime(books, new Date()); } @@ -105,38 +106,33 @@ public class BookServiceImpl implements BookService { @Override public Map queryExistBookIndexMap(Long bookId) { - List bookIndexs = bookIndexMapper.selectMany(select(BookIndexDynamicSqlSupport.id,BookIndexDynamicSqlSupport.indexNum,BookIndexDynamicSqlSupport.indexName,BookIndexDynamicSqlSupport.wordCount) + List bookIndexs = bookIndexMapper.selectMany(select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount) .from(BookIndexDynamicSqlSupport.bookIndex) - .where(BookIndexDynamicSqlSupport.bookId,isEqualTo(bookId)) + .where(BookIndexDynamicSqlSupport.bookId, isEqualTo(bookId)) .build() .render(RenderingStrategies.MYBATIS3)); if (bookIndexs.size() > 0) { - return bookIndexs.stream().collect(Collectors.toMap(BookIndex::getIndexNum, Function.identity())); + return bookIndexs.stream().collect(Collectors.toMap(BookIndex::getIndexNum, Function.identity())); } return new HashMap<>(0); } @Transactional(rollbackFor = Exception.class) @Override - public void updateBookAndIndexAndContent(Book book, List bookIndexList, List bookContentList, Map existBookIndexMap) { + public void updateBookAndIndexAndContent(Book book, List bookIndexList, List bookContentList, Map existBookIndexMap) { for (int i = 0; i < bookIndexList.size(); i++) { BookIndex bookIndex = bookIndexList.get(i); BookContent bookContent = bookContentList.get(i); - if(!existBookIndexMap.containsKey(bookIndex.getIndexNum())) { + if (!existBookIndexMap.containsKey(bookIndex.getIndexNum())) { //插入 bookIndexMapper.insertSelective(bookIndex); - bookContentMapper.insertSelective(bookContent); - }else{ + bookContentService.saveBookContent(bookContent,book.getId()); + } else { //更新 bookIndexMapper.updateByPrimaryKeySelective(bookIndex); - bookContentMapper.update(update(BookContentDynamicSqlSupport.bookContent) - .set(BookContentDynamicSqlSupport.content) - .equalTo(bookContent.getContent()) - .where(BookContentDynamicSqlSupport.indexId,isEqualTo(bookContent.getIndexId())) - .build() - .render(RenderingStrategies.MYBATIS3)); + bookContentService.updateBookContent(bookContent,book.getId()); } @@ -145,7 +141,7 @@ public class BookServiceImpl implements BookService { //更新小说主表 book.setBookName(null); book.setAuthorName(null); - if(Constants.VISIT_COUNT_DEFAULT.equals(book.getVisitCount())) { + if (Constants.VISIT_COUNT_DEFAULT.equals(book.getVisitCount())) { book.setVisitCount(null); } bookMapper.updateByPrimaryKeySelective(book); @@ -168,7 +164,7 @@ public class BookServiceImpl implements BookService { .build() .render(RenderingStrategies.MYBATIS3)); - if(books.size()>0){ + if (books.size() > 0) { return books.get(0); } diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java new file mode 100644 index 0000000..9cb75bc --- /dev/null +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java @@ -0,0 +1,44 @@ +package com.java2nb.novel.service.impl; + +import com.java2nb.novel.entity.BookContent; +import com.java2nb.novel.mapper.BookContentDynamicSqlSupport; +import com.java2nb.novel.mapper.BookContentMapper; +import com.java2nb.novel.service.BookContentService; +import lombok.RequiredArgsConstructor; +import org.mybatis.dynamic.sql.render.RenderingStrategies; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; +import static org.mybatis.dynamic.sql.SqlBuilder.update; + + +@Service +@RequiredArgsConstructor +@ConditionalOnProperty(prefix = "txt.save", name = "storage", havingValue = "db") +public class DbBookContentServiceImpl implements BookContentService { + + private final BookContentMapper bookContentMapper; + + @Override + public void saveBookContent(List bookContentList,Long bookId) { + bookContentMapper.insertMultiple(bookContentList); + } + + @Override + public void saveBookContent(BookContent bookContent,Long bookId) { + bookContentMapper.insertSelective(bookContent); + } + + @Override + public void updateBookContent(BookContent bookContent,Long bookId) { + bookContentMapper.update(update(BookContentDynamicSqlSupport.bookContent) + .set(BookContentDynamicSqlSupport.content) + .equalTo(bookContent.getContent()) + .where(BookContentDynamicSqlSupport.indexId,isEqualTo(bookContent.getIndexId())) + .build() + .render(RenderingStrategies.MYBATIS3)); + } +} diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java new file mode 100644 index 0000000..28afc57 --- /dev/null +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java @@ -0,0 +1,36 @@ +package com.java2nb.novel.service.impl; + +import com.java2nb.novel.core.utils.FileUtil; +import com.java2nb.novel.entity.BookContent; +import com.java2nb.novel.service.BookContentService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@ConditionalOnProperty(prefix = "txt.save", name = "storage", havingValue = "file") +public class FileBookContentServiceImpl implements BookContentService { + + @Value("${txt.save.path}") + private String fileSavePath; + + @Override + public void saveBookContent(List bookContentList,Long bookId) { + bookContentList.forEach(bookContent -> saveBookContent(bookContent,bookId)); + + } + + @Override + public void saveBookContent(BookContent bookContent,Long bookId) { + FileUtil.writeContentToFile(fileSavePath,"/"+bookId+"/"+bookContent.getIndexId()+".txt",bookContent.getContent()); + } + + @Override + public void updateBookContent(BookContent bookContent,Long bookId) { + FileUtil.writeContentToFile(fileSavePath,"/"+bookId+"/"+bookContent.getIndexId()+".txt",bookContent.getContent()); + } +} diff --git a/novel-front/src/main/java/com/java2nb/novel/page/PageController.java b/novel-front/src/main/java/com/java2nb/novel/page/PageController.java index 615d152..44b211f 100644 --- a/novel-front/src/main/java/com/java2nb/novel/page/PageController.java +++ b/novel-front/src/main/java/com/java2nb/novel/page/PageController.java @@ -5,16 +5,14 @@ import com.java2nb.novel.core.bean.PageBean; import com.java2nb.novel.core.bean.UserDetails; import com.java2nb.novel.core.utils.ThreadLocalUtil; import com.java2nb.novel.entity.*; -import com.java2nb.novel.service.AuthorService; -import com.java2nb.novel.service.BookService; -import com.java2nb.novel.service.NewsService; -import com.java2nb.novel.service.UserService; +import com.java2nb.novel.service.*; import com.java2nb.novel.vo.BookCommentVO; import com.java2nb.novel.vo.BookSettingVO; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; @@ -36,6 +34,9 @@ import java.util.concurrent.ThreadPoolExecutor; @Controller public class PageController extends BaseController { + @Value("${txt.save.path}") + private String fileSavePath; + private final BookService bookService; private final NewsService newsService; @@ -44,6 +45,8 @@ public class PageController extends BaseController { private final UserService userService; + private final BookContentService bookContentService; + private final ThreadPoolExecutor threadPoolExecutor; @@ -174,7 +177,7 @@ public class PageController extends BaseController { */ @SneakyThrows @RequestMapping("/book/{bookId}/{bookIndexId}.html") - public String indexList(@PathVariable("bookId") Long bookId, @PathVariable("bookIndexId") Long bookIndexId, HttpServletRequest request, Model model) { + public String bookContent(@PathVariable("bookId") Long bookId, @PathVariable("bookIndexId") Long bookIndexId, HttpServletRequest request, Model model) { //加载小说基本信息线程 CompletableFuture bookCompletableFuture = CompletableFuture.supplyAsync(() -> { //查询书籍 @@ -210,7 +213,7 @@ public class PageController extends BaseController { //加载小说内容信息线程 CompletableFuture bookContentCompletableFuture = CompletableFuture.supplyAsync(() -> { //查询内容 - BookContent bookContent = bookService.queryBookContent(bookIndexId); + BookContent bookContent = bookContentService.queryBookContent(bookId, bookIndexId); log.debug("加载小说内容信息线程结束"); return bookContent; }, threadPoolExecutor); diff --git a/novel-front/src/main/java/com/java2nb/novel/service/BookContentService.java b/novel-front/src/main/java/com/java2nb/novel/service/BookContentService.java new file mode 100644 index 0000000..a610fab --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/service/BookContentService.java @@ -0,0 +1,11 @@ +package com.java2nb.novel.service; + +import com.java2nb.novel.entity.BookContent; + +import java.util.List; + +public interface BookContentService { + + BookContent queryBookContent(Long bookId, Long bookIndexId); + +} diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java new file mode 100644 index 0000000..bf5e008 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java @@ -0,0 +1,38 @@ +package com.java2nb.novel.service.impl; + +import com.java2nb.novel.entity.BookContent; +import com.java2nb.novel.mapper.BookContentDynamicSqlSupport; +import com.java2nb.novel.mapper.BookContentMapper; +import com.java2nb.novel.service.BookContentService; +import lombok.RequiredArgsConstructor; +import org.mybatis.dynamic.sql.render.RenderingStrategies; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static com.java2nb.novel.mapper.BookContentDynamicSqlSupport.bookContent; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; +import static org.mybatis.dynamic.sql.SqlBuilder.update; +import static org.mybatis.dynamic.sql.select.SelectDSL.select; + + +@Service +@RequiredArgsConstructor +@ConditionalOnProperty(prefix = "txt.save", name = "storage", havingValue = "db") +public class DbBookContentServiceImpl implements BookContentService { + + private final BookContentMapper bookContentMapper; + + @Override + public BookContent queryBookContent(Long bookId, Long bookIndexId) { + SelectStatementProvider selectStatement = select(BookContentDynamicSqlSupport.id, BookContentDynamicSqlSupport.content) + .from(bookContent) + .where(BookContentDynamicSqlSupport.indexId, isEqualTo(bookIndexId)) + .limit(1) + .build() + .render(RenderingStrategies.MYBATIS3); + return bookContentMapper.selectMany(selectStatement).get(0); + } +} diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java new file mode 100644 index 0000000..aa59320 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java @@ -0,0 +1,39 @@ +package com.java2nb.novel.service.impl; + +import com.java2nb.novel.core.utils.FileUtil; +import com.java2nb.novel.entity.BookContent; +import com.java2nb.novel.service.BookContentService; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Service; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.util.List; + +@Service +@RequiredArgsConstructor +@ConditionalOnProperty(prefix = "txt.save", name = "storage", havingValue = "file") +public class FileBookContentServiceImpl implements BookContentService { + + @Value("${txt.save.path}") + private String fileSavePath; + + @SneakyThrows + @Override + public BookContent queryBookContent(Long bookId, Long bookIndexId) { + BufferedReader in = new BufferedReader(new FileReader(fileSavePath + "/" + bookId + "/" + bookIndexId + ".txt")); + StringBuffer sb = new StringBuffer(); + String str; + while ((str = in.readLine()) != null) { + sb.append(str); + } + in.close(); + return new BookContent() {{ + setIndexId(bookIndexId); + setContent(sb.toString()); + }}; + } +} From e7897c988a08e0f4f69cb1a3d11ebcc95e7f1fab Mon Sep 17 00:00:00 2001 From: xiaoyang Date: Tue, 17 Aug 2021 20:00:53 +0800 Subject: [PATCH 02/19] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c279247..b54fed7 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ Gitee仓库地址: https://gitee.com/novel_dev_team/novel-cloud - [x] 移动站与PC站站点分离,浏览器自动识别跳转。 - [x] PC站UI更新。 - [x] 支持前端模版自定义,内置多套模版。 +- [x] 可拓展的多种方式存储小说内容,内置数据库(分表)存储和TXT文本存储。 - [x] 新闻模块。 - [x] 排行榜。 - [x] 小说评论模块。 From 80b393fdda5034d4c393d10ab253804117d4db66 Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Tue, 17 Aug 2021 21:07:33 +0800 Subject: [PATCH 03/19] =?UTF-8?q?v3.6.0=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- novel-admin/pom.xml | 4 +- novel-common/pom.xml | 2 +- novel-crawl/pom.xml | 2 +- novel-front/pom.xml | 2 +- .../novel/controller/BookController.java | 93 +++++++++---------- .../java2nb/novel/service/BookService.java | 1 + pom.xml | 2 +- 7 files changed, 53 insertions(+), 53 deletions(-) diff --git a/novel-admin/pom.xml b/novel-admin/pom.xml index 0fed554..46d059c 100644 --- a/novel-admin/pom.xml +++ b/novel-admin/pom.xml @@ -5,7 +5,7 @@ com.java2nb novel-admin - 3.5.4 + 3.6.0 jar novel-admin @@ -106,7 +106,7 @@ org.apache.shiro shiro-spring - 1.7.0 + 1.3.2 diff --git a/novel-common/pom.xml b/novel-common/pom.xml index 74b08d7..f2233f5 100644 --- a/novel-common/pom.xml +++ b/novel-common/pom.xml @@ -5,7 +5,7 @@ novel com.java2nb - 3.5.4 + 3.6.0 4.0.0 diff --git a/novel-crawl/pom.xml b/novel-crawl/pom.xml index 10710b9..48efbe1 100644 --- a/novel-crawl/pom.xml +++ b/novel-crawl/pom.xml @@ -5,7 +5,7 @@ novel com.java2nb - 3.5.4 + 3.6.0 4.0.0 diff --git a/novel-front/pom.xml b/novel-front/pom.xml index 66fa459..da5eeac 100644 --- a/novel-front/pom.xml +++ b/novel-front/pom.xml @@ -5,7 +5,7 @@ novel com.java2nb - 3.5.4 + 3.6.0 4.0.0 diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java b/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java index 5bd317a..6bd0287 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java @@ -9,6 +9,7 @@ import com.java2nb.novel.entity.Book; import com.java2nb.novel.entity.BookCategory; import com.java2nb.novel.entity.BookComment; import com.java2nb.novel.entity.BookIndex; +import com.java2nb.novel.service.BookContentService; import com.java2nb.novel.vo.BookCommentVO; import com.java2nb.novel.vo.BookSettingVO; import com.java2nb.novel.vo.BookSpVO; @@ -32,10 +33,12 @@ import java.util.Map; @RestController @Slf4j @RequiredArgsConstructor -public class BookController extends BaseController{ +public class BookController extends BaseController { private final BookService bookService; + private final BookContentService bookContentService; + private final RabbitTemplate rabbitTemplate; @Value("${spring.rabbitmq.enable}") @@ -44,77 +47,77 @@ public class BookController extends BaseController{ /** * 查询首页小说设置列表数据 - * */ + */ @GetMapping("listBookSetting") - public ResultBean>> listBookSetting(){ + public ResultBean>> listBookSetting() { return ResultBean.ok(bookService.listBookSettingVO()); } /** * 查询首页点击榜单数据 - * */ + */ @GetMapping("listClickRank") - public ResultBean> listClickRank(){ + public ResultBean> listClickRank() { return ResultBean.ok(bookService.listClickRank()); } /** * 查询首页新书榜单数据 - * */ + */ @GetMapping("listNewRank") - public ResultBean> listNewRank(){ + public ResultBean> listNewRank() { return ResultBean.ok(bookService.listNewRank()); } /** * 查询首页更新榜单数据 - * */ + */ @GetMapping("listUpdateRank") - public ResultBean> listUpdateRank(){ + public ResultBean> listUpdateRank() { return ResultBean.ok(bookService.listUpdateRank()); } /** * 查询小说分类列表 - * */ + */ @GetMapping("listBookCategory") - public ResultBean> listBookCategory(){ + public ResultBean> listBookCategory() { return ResultBean.ok(bookService.listBookCategory()); } /** * 分页搜索 - * */ + */ @GetMapping("searchByPage") - public ResultBean searchByPage(BookSpVO bookSP, @RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "20") int pageSize){ - return ResultBean.ok(bookService.searchByPage(bookSP,page,pageSize)); + public ResultBean searchByPage(BookSpVO bookSP, @RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "20") int pageSize) { + return ResultBean.ok(bookService.searchByPage(bookSP, page, pageSize)); } /** * 查询小说详情信息 - * */ + */ @GetMapping("queryBookDetail/{id}") - public ResultBean queryBookDetail(@PathVariable("id") Long id){ + public ResultBean queryBookDetail(@PathVariable("id") Long id) { return ResultBean.ok(bookService.queryBookDetail(id)); } /** * 查询小说排行信息 - * */ + */ @GetMapping("listRank") - public ResultBean> listRank(@RequestParam(value = "type",defaultValue = "0") Byte type,@RequestParam(value = "limit",defaultValue = "30") Integer limit){ - return ResultBean.ok(bookService.listRank(type,limit)); + public ResultBean> listRank(@RequestParam(value = "type", defaultValue = "0") Byte type, @RequestParam(value = "limit", defaultValue = "30") Integer limit) { + return ResultBean.ok(bookService.listRank(type, limit)); } /** * 增加点击次数 - * */ + */ @PostMapping("addVisitCount") - public ResultBean addVisitCount(Long bookId){ - if(enableMq == 1) { + public ResultBean addVisitCount(Long bookId) { + if (enableMq == 1) { rabbitTemplate.convertAndSend("ADD-BOOK-VISIT-EXCHANGE", null, bookId); - }else { + } else { bookService.addVisitCount(bookId, 1); } return ResultBean.ok(); @@ -122,22 +125,22 @@ public class BookController extends BaseController{ /** * 查询章节相关信息 - * */ + */ @GetMapping("queryBookIndexAbout") - public ResultBean> queryBookIndexAbout(Long bookId,Long lastBookIndexId) { - Map data = new HashMap<>(2); - data.put("bookIndexCount",bookService.queryIndexCount(bookId)); - String lastBookContent = bookService.queryBookContent(lastBookIndexId).getContent(); - if(lastBookContent.length()>42){ - lastBookContent=lastBookContent.substring(0,42); + public ResultBean> queryBookIndexAbout(Long bookId, Long lastBookIndexId) { + Map data = new HashMap<>(2); + data.put("bookIndexCount", bookService.queryIndexCount(bookId)); + String lastBookContent = bookContentService.queryBookContent(bookId,lastBookIndexId).getContent(); + if (lastBookContent.length() > 42) { + lastBookContent = lastBookContent.substring(0, 42); } - data.put("lastBookContent",lastBookContent); + data.put("lastBookContent", lastBookContent); return ResultBean.ok(data); } /** * 根据分类id查询同类推荐书籍 - * */ + */ @GetMapping("listRecBookByCatId") public ResultBean> listRecBookByCatId(Integer catId) { return ResultBean.ok(bookService.listRecBookByCatId(catId)); @@ -145,45 +148,41 @@ public class BookController extends BaseController{ /** - *分页查询书籍评论列表 - * */ + * 分页查询书籍评论列表 + */ @GetMapping("listCommentByPage") public ResultBean> listCommentByPage(@RequestParam("bookId") Long bookId, @RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize) { - return ResultBean.ok(bookService.listCommentByPage(null,bookId,page,pageSize)); + return ResultBean.ok(bookService.listCommentByPage(null, bookId, page, pageSize)); } /** * 新增评价 - * */ + */ @PostMapping("addBookComment") public ResultBean addBookComment(BookComment comment, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { return ResultBean.fail(ResponseStatus.NO_LOGIN); } - bookService.addBookComment(userDetails.getId(),comment); + bookService.addBookComment(userDetails.getId(), comment); return ResultBean.ok(); } /** * 根据小说ID查询小说前十条最新更新目录集合 - * */ + */ @GetMapping("queryNewIndexList") - public ResultBean> queryNewIndexList(Long bookId){ - return ResultBean.ok(bookService.queryIndexList(bookId,"index_num desc",1,10)); + public ResultBean> queryNewIndexList(Long bookId) { + return ResultBean.ok(bookService.queryIndexList(bookId, "index_num desc", 1, 10)); } /** * 目录页 - * */ + */ @GetMapping("/queryIndexList") - public ResultBean> indexList(Long bookId,@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize,@RequestParam(value = "orderBy",defaultValue = "index_num desc") String orderBy) { - return ResultBean.ok(new PageBean<>(bookService.queryIndexList(bookId,orderBy,page,pageSize))); + public ResultBean> indexList(Long bookId, @RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize, @RequestParam(value = "orderBy", defaultValue = "index_num desc") String orderBy) { + return ResultBean.ok(new PageBean<>(bookService.queryIndexList(bookId, orderBy, page, pageSize))); } - - - - } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/BookService.java b/novel-front/src/main/java/com/java2nb/novel/service/BookService.java index 02247d3..36b279e 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/BookService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/BookService.java @@ -101,6 +101,7 @@ public interface BookService { * @param bookIndexId 目录ID * @return 书籍内容 * */ + @Deprecated BookContent queryBookContent(Long bookIndexId); /** diff --git a/pom.xml b/pom.xml index 4b46641..0546905 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.java2nb novel - 3.5.4 + 3.6.0 novel-common novel-front From 7f4728191ab231d623d4f054e6be7de2124f672d Mon Sep 17 00:00:00 2001 From: xiaoyang Date: Sat, 4 Sep 2021 16:27:02 +0800 Subject: [PATCH 04/19] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- novel-common/src/main/resources/application-common-dev.yml | 2 +- novel-common/src/main/resources/application-common-prod.yml | 2 +- .../java2nb/novel/service/impl/DbBookContentServiceImpl.java | 2 +- .../novel/service/impl/FileBookContentServiceImpl.java | 4 ++-- .../src/main/java/com/java2nb/novel/page/PageController.java | 2 +- .../java2nb/novel/service/impl/DbBookContentServiceImpl.java | 2 +- .../novel/service/impl/FileBookContentServiceImpl.java | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/novel-common/src/main/resources/application-common-dev.yml b/novel-common/src/main/resources/application-common-dev.yml index 9018872..92d740d 100644 --- a/novel-common/src/main/resources/application-common-dev.yml +++ b/novel-common/src/main/resources/application-common-dev.yml @@ -71,7 +71,7 @@ sharding: -txt: +content: save: storage: db #存储介质,db:数据库,file:txt文本 path: /Users/xiongxiaoyang/books #txt小说文本保存路径 \ No newline at end of file diff --git a/novel-common/src/main/resources/application-common-prod.yml b/novel-common/src/main/resources/application-common-prod.yml index 8853b0b..9f02a0a 100644 --- a/novel-common/src/main/resources/application-common-prod.yml +++ b/novel-common/src/main/resources/application-common-prod.yml @@ -74,7 +74,7 @@ logging: -txt: +content: save: storage: db #存储介质,db:数据库,file:txt文本 path: /Users/xiongxiaoyang/books #txt小说文本保存路径 diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java index 9cb75bc..4aa7849 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java @@ -17,7 +17,7 @@ import static org.mybatis.dynamic.sql.SqlBuilder.update; @Service @RequiredArgsConstructor -@ConditionalOnProperty(prefix = "txt.save", name = "storage", havingValue = "db") +@ConditionalOnProperty(prefix = "content.save", name = "storage", havingValue = "db") public class DbBookContentServiceImpl implements BookContentService { private final BookContentMapper bookContentMapper; diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java index 28afc57..5d6f256 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java @@ -12,10 +12,10 @@ import java.util.List; @Service @RequiredArgsConstructor -@ConditionalOnProperty(prefix = "txt.save", name = "storage", havingValue = "file") +@ConditionalOnProperty(prefix = "content.save", name = "storage", havingValue = "file") public class FileBookContentServiceImpl implements BookContentService { - @Value("${txt.save.path}") + @Value("${content.save.path}") private String fileSavePath; @Override diff --git a/novel-front/src/main/java/com/java2nb/novel/page/PageController.java b/novel-front/src/main/java/com/java2nb/novel/page/PageController.java index 44b211f..1859418 100644 --- a/novel-front/src/main/java/com/java2nb/novel/page/PageController.java +++ b/novel-front/src/main/java/com/java2nb/novel/page/PageController.java @@ -34,7 +34,7 @@ import java.util.concurrent.ThreadPoolExecutor; @Controller public class PageController extends BaseController { - @Value("${txt.save.path}") + @Value("${content.save.path}") private String fileSavePath; private final BookService bookService; diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java index bf5e008..3e4344f 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java @@ -20,7 +20,7 @@ import static org.mybatis.dynamic.sql.select.SelectDSL.select; @Service @RequiredArgsConstructor -@ConditionalOnProperty(prefix = "txt.save", name = "storage", havingValue = "db") +@ConditionalOnProperty(prefix = "content.save", name = "storage", havingValue = "db") public class DbBookContentServiceImpl implements BookContentService { private final BookContentMapper bookContentMapper; diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java index aa59320..bcb0425 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java @@ -15,10 +15,10 @@ import java.util.List; @Service @RequiredArgsConstructor -@ConditionalOnProperty(prefix = "txt.save", name = "storage", havingValue = "file") +@ConditionalOnProperty(prefix = "content.save", name = "storage", havingValue = "file") public class FileBookContentServiceImpl implements BookContentService { - @Value("${txt.save.path}") + @Value("${content.save.path}") private String fileSavePath; @SneakyThrows From bfe4d938fda01536d9f067de93a45306b1080b36 Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Sat, 11 Sep 2021 22:07:14 +0800 Subject: [PATCH 05/19] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- novel-common/pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/novel-common/pom.xml b/novel-common/pom.xml index f2233f5..ba4b58e 100644 --- a/novel-common/pom.xml +++ b/novel-common/pom.xml @@ -103,12 +103,6 @@ - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.mybatis.dynamic-sql mybatis-dynamic-sql From fc2ea40c6ad6b7cda07dd52a2997b4af52b0044f Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Mon, 13 Sep 2021 22:21:50 +0800 Subject: [PATCH 06/19] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=B0=8F=E8=AF=B4?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E5=A4=9A=E7=A7=8D=E5=AD=98=E5=82=A8=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=EF=BC=88txt=E3=80=81db..=EF=BC=89=E5=B9=B6=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/sql/20210913.sql | 3 + doc/sql/novel_plus.sql | 5 +- .../com/java2nb/novel/entity/BookIndex.java | 13 ++ .../mapper/BookIndexDynamicSqlSupport.java | 5 + .../java2nb/novel/mapper/BookIndexMapper.java | 138 +++++++++--------- .../novel/service/impl/BookServiceImpl.java | 18 ++- .../novel/service/impl/CrawlServiceImpl.java | 28 ++-- .../impl/DbBookContentServiceImpl.java | 3 +- .../impl/FileBookContentServiceImpl.java | 3 +- .../novel/controller/BookController.java | 7 +- .../java2nb/novel/page/PageController.java | 9 +- .../novel/service/impl/BookServiceImpl.java | 2 +- .../impl/DbBookContentServiceImpl.java | 3 +- .../impl/FileBookContentServiceImpl.java | 6 +- 14 files changed, 138 insertions(+), 105 deletions(-) create mode 100644 doc/sql/20210913.sql diff --git a/doc/sql/20210913.sql b/doc/sql/20210913.sql new file mode 100644 index 0000000..97d00e6 --- /dev/null +++ b/doc/sql/20210913.sql @@ -0,0 +1,3 @@ +alter table book_index add column storage_type varchar(10) NOT NULL DEFAULT 'db' COMMENT '存储方式' after book_price ; + + diff --git a/doc/sql/novel_plus.sql b/doc/sql/novel_plus.sql index f812822..7c05a4a 100644 --- a/doc/sql/novel_plus.sql +++ b/doc/sql/novel_plus.sql @@ -1840,4 +1840,7 @@ delete from sys_menu where menu_id = 202; INSERT INTO crawl_source(`id`, `source_name`, `crawl_rule`, `source_status`, `create_time`, `update_time`) VALUES (16, 'i笔趣阁', '{\"bookListUrl\":\"http://m.ibiquge.net/xclass/{catId}/{page}.html\",\"catIdRule\":{\"catId1\":\"1\",\"catId2\":\"2\",\"catId3\":\"3\",\"catId4\":\"4\",\"catId5\":\"6\",\"catId6\":\"5\",\"catId7\":\"7\"},\"bookIdPatten\":\"href=\\\"/(\\\\d+_\\\\d+)/\\\"\",\"pagePatten\":\"value=\\\"(\\\\d+)/\\\\d+\\\"\",\"totalPagePatten\":\"value=\\\"\\\\d+/(\\\\d+)\\\"\",\"bookDetailUrl\":\"http://m.ibiquge.net/{bookId}/\",\"bookNamePatten\":\"([^/]+)\",\"authorNamePatten\":\"([^/]+)\",\"picUrlPatten\":\"]+)\\\"\\\\s+onerror=\\\"this.src=\",\"picUrlPrefix\":\"http://m.ibiquge.net\",\"statusPatten\":\">状态:([^/]+)\",\"bookStatusRule\":{\"连载\":0,\"完结\":1},\"visitCountPatten\":\">点击:(\\\\d+)\",\"descStart\":\"

\",\"descEnd\":\"

\",\"bookIndexUrl\":\"http://www.ibiquge.net/{bookId}/\",\"bookIndexStart\":\"正文\",\"indexIdPatten\":\"[^/]+\",\"indexNamePatten\":\"([^/]+)\",\"bookContentUrl\":\"http://www.ibiquge.net/{bookId}/{indexId}.html\",\"contentStart\":\"

\",\"contentEnd\":\"
\"}', 0, '2021-02-04 21:31:23', '2021-02-04 21:31:23'); -alter table news add column `read_count` BIGINT NOT NULL DEFAULT '0' COMMENT '阅读量' after content; \ No newline at end of file +alter table news add column `read_count` BIGINT NOT NULL DEFAULT '0' COMMENT '阅读量' after content; + + +alter table book_index add column storage_type varchar(10) NOT NULL DEFAULT 'db' COMMENT '存储方式' after book_price ; diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/BookIndex.java b/novel-common/src/main/java/com/java2nb/novel/entity/BookIndex.java index cbbd033..840649a 100644 --- a/novel-common/src/main/java/com/java2nb/novel/entity/BookIndex.java +++ b/novel-common/src/main/java/com/java2nb/novel/entity/BookIndex.java @@ -25,6 +25,9 @@ public class BookIndex { @Generated("org.mybatis.generator.api.MyBatisGenerator") private Integer bookPrice; + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String storageType; + @Generated("org.mybatis.generator.api.MyBatisGenerator") private Date createTime; @@ -101,6 +104,16 @@ public class BookIndex { this.bookPrice = bookPrice; } + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getStorageType() { + return storageType; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setStorageType(String storageType) { + this.storageType = storageType == null ? null : storageType.trim(); + } + @Generated("org.mybatis.generator.api.MyBatisGenerator") public Date getCreateTime() { return createTime; diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexDynamicSqlSupport.java b/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexDynamicSqlSupport.java index 1c2ac2a..6d15ef1 100644 --- a/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexDynamicSqlSupport.java +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexDynamicSqlSupport.java @@ -31,6 +31,9 @@ public final class BookIndexDynamicSqlSupport { @Generated("org.mybatis.generator.api.MyBatisGenerator") public static final SqlColumn bookPrice = bookIndex.bookPrice; + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn storageType = bookIndex.storageType; + @Generated("org.mybatis.generator.api.MyBatisGenerator") public static final SqlColumn createTime = bookIndex.createTime; @@ -53,6 +56,8 @@ public final class BookIndexDynamicSqlSupport { public final SqlColumn bookPrice = column("book_price", JDBCType.INTEGER); + public final SqlColumn storageType = column("storage_type", JDBCType.VARCHAR); + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexMapper.java index 7870bf7..7cb3213 100644 --- a/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexMapper.java +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexMapper.java @@ -37,46 +37,47 @@ import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils; @Mapper public interface BookIndexMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") - BasicColumn[] selectList = BasicColumn.columnList(id, bookId, indexNum, indexName, wordCount, isVip, bookPrice, createTime, updateTime); + BasicColumn[] selectList = BasicColumn.columnList(id, bookId, indexNum, indexName, wordCount, isVip, bookPrice, storageType, createTime, updateTime); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @SelectProvider(type = SqlProviderAdapter.class, method = "select") + @SelectProvider(type=SqlProviderAdapter.class, method="select") long count(SelectStatementProvider selectStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @DeleteProvider(type = SqlProviderAdapter.class, method = "delete") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") int delete(DeleteStatementProvider deleteStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @InsertProvider(type = SqlProviderAdapter.class, method = "insert") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") int insert(InsertStatementProvider insertStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @InsertProvider(type = SqlProviderAdapter.class, method = "insertMultiple") + @InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple") int insertMultiple(MultiRowInsertStatementProvider multipleInsertStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @SelectProvider(type = SqlProviderAdapter.class, method = "select") + @SelectProvider(type=SqlProviderAdapter.class, method="select") @ResultMap("BookIndexResult") Optional selectOne(SelectStatementProvider selectStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @SelectProvider(type = SqlProviderAdapter.class, method = "select") - @Results(id = "BookIndexResult", value = { - @Result(column = "id", property = "id", jdbcType = JdbcType.BIGINT, id = true), - @Result(column = "book_id", property = "bookId", jdbcType = JdbcType.BIGINT), - @Result(column = "index_num", property = "indexNum", jdbcType = JdbcType.INTEGER), - @Result(column = "index_name", property = "indexName", jdbcType = JdbcType.VARCHAR), - @Result(column = "word_count", property = "wordCount", jdbcType = JdbcType.INTEGER), - @Result(column = "is_vip", property = "isVip", jdbcType = JdbcType.TINYINT), - @Result(column = "book_price", property = "bookPrice", jdbcType = JdbcType.INTEGER), - @Result(column = "create_time", property = "createTime", jdbcType = JdbcType.TIMESTAMP), - @Result(column = "update_time", property = "updateTime", jdbcType = JdbcType.TIMESTAMP) + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookIndexResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="index_num", property="indexNum", jdbcType=JdbcType.INTEGER), + @Result(column="index_name", property="indexName", jdbcType=JdbcType.VARCHAR), + @Result(column="word_count", property="wordCount", jdbcType=JdbcType.INTEGER), + @Result(column="is_vip", property="isVip", jdbcType=JdbcType.TINYINT), + @Result(column="book_price", property="bookPrice", jdbcType=JdbcType.INTEGER), + @Result(column="storage_type", property="storageType", jdbcType=JdbcType.VARCHAR), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) }) List selectMany(SelectStatementProvider selectStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @UpdateProvider(type = SqlProviderAdapter.class, method = "update") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") int update(UpdateStatementProvider updateStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") @@ -92,52 +93,55 @@ public interface BookIndexMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") default int deleteByPrimaryKey(Long id_) { return delete(c -> - c.where(id, isEqualTo(id_)) + c.where(id, isEqualTo(id_)) ); } @Generated("org.mybatis.generator.api.MyBatisGenerator") default int insert(BookIndex record) { return MyBatis3Utils.insert(this::insert, record, bookIndex, c -> - c.map(id).toProperty("id") - .map(bookId).toProperty("bookId") - .map(indexNum).toProperty("indexNum") - .map(indexName).toProperty("indexName") - .map(wordCount).toProperty("wordCount") - .map(isVip).toProperty("isVip") - .map(bookPrice).toProperty("bookPrice") - .map(createTime).toProperty("createTime") - .map(updateTime).toProperty("updateTime") + c.map(id).toProperty("id") + .map(bookId).toProperty("bookId") + .map(indexNum).toProperty("indexNum") + .map(indexName).toProperty("indexName") + .map(wordCount).toProperty("wordCount") + .map(isVip).toProperty("isVip") + .map(bookPrice).toProperty("bookPrice") + .map(storageType).toProperty("storageType") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") ); } @Generated("org.mybatis.generator.api.MyBatisGenerator") default int insertMultiple(Collection records) { return MyBatis3Utils.insertMultiple(this::insertMultiple, records, bookIndex, c -> - c.map(id).toProperty("id") - .map(bookId).toProperty("bookId") - .map(indexNum).toProperty("indexNum") - .map(indexName).toProperty("indexName") - .map(wordCount).toProperty("wordCount") - .map(isVip).toProperty("isVip") - .map(bookPrice).toProperty("bookPrice") - .map(createTime).toProperty("createTime") - .map(updateTime).toProperty("updateTime") + c.map(id).toProperty("id") + .map(bookId).toProperty("bookId") + .map(indexNum).toProperty("indexNum") + .map(indexName).toProperty("indexName") + .map(wordCount).toProperty("wordCount") + .map(isVip).toProperty("isVip") + .map(bookPrice).toProperty("bookPrice") + .map(storageType).toProperty("storageType") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") ); } @Generated("org.mybatis.generator.api.MyBatisGenerator") default int insertSelective(BookIndex record) { return MyBatis3Utils.insert(this::insert, record, bookIndex, c -> - c.map(id).toPropertyWhenPresent("id", record::getId) - .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) - .map(indexNum).toPropertyWhenPresent("indexNum", record::getIndexNum) - .map(indexName).toPropertyWhenPresent("indexName", record::getIndexName) - .map(wordCount).toPropertyWhenPresent("wordCount", record::getWordCount) - .map(isVip).toPropertyWhenPresent("isVip", record::getIsVip) - .map(bookPrice).toPropertyWhenPresent("bookPrice", record::getBookPrice) - .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) - .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + c.map(id).toPropertyWhenPresent("id", record::getId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(indexNum).toPropertyWhenPresent("indexNum", record::getIndexNum) + .map(indexName).toPropertyWhenPresent("indexName", record::getIndexName) + .map(wordCount).toPropertyWhenPresent("wordCount", record::getWordCount) + .map(isVip).toPropertyWhenPresent("isVip", record::getIsVip) + .map(bookPrice).toPropertyWhenPresent("bookPrice", record::getBookPrice) + .map(storageType).toPropertyWhenPresent("storageType", record::getStorageType) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) ); } @@ -159,7 +163,7 @@ public interface BookIndexMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") default Optional selectByPrimaryKey(Long id_) { return selectOne(c -> - c.where(id, isEqualTo(id_)) + c.where(id, isEqualTo(id_)) ); } @@ -177,6 +181,7 @@ public interface BookIndexMapper { .set(wordCount).equalTo(record::getWordCount) .set(isVip).equalTo(record::getIsVip) .set(bookPrice).equalTo(record::getBookPrice) + .set(storageType).equalTo(record::getStorageType) .set(createTime).equalTo(record::getCreateTime) .set(updateTime).equalTo(record::getUpdateTime); } @@ -190,6 +195,7 @@ public interface BookIndexMapper { .set(wordCount).equalToWhenPresent(record::getWordCount) .set(isVip).equalToWhenPresent(record::getIsVip) .set(bookPrice).equalToWhenPresent(record::getBookPrice) + .set(storageType).equalToWhenPresent(record::getStorageType) .set(createTime).equalToWhenPresent(record::getCreateTime) .set(updateTime).equalToWhenPresent(record::getUpdateTime); } @@ -197,30 +203,32 @@ public interface BookIndexMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") default int updateByPrimaryKey(BookIndex record) { return update(c -> - c.set(bookId).equalTo(record::getBookId) - .set(indexNum).equalTo(record::getIndexNum) - .set(indexName).equalTo(record::getIndexName) - .set(wordCount).equalTo(record::getWordCount) - .set(isVip).equalTo(record::getIsVip) - .set(bookPrice).equalTo(record::getBookPrice) - .set(createTime).equalTo(record::getCreateTime) - .set(updateTime).equalTo(record::getUpdateTime) - .where(id, isEqualTo(record::getId)) + c.set(bookId).equalTo(record::getBookId) + .set(indexNum).equalTo(record::getIndexNum) + .set(indexName).equalTo(record::getIndexName) + .set(wordCount).equalTo(record::getWordCount) + .set(isVip).equalTo(record::getIsVip) + .set(bookPrice).equalTo(record::getBookPrice) + .set(storageType).equalTo(record::getStorageType) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) ); } @Generated("org.mybatis.generator.api.MyBatisGenerator") default int updateByPrimaryKeySelective(BookIndex record) { return update(c -> - c.set(bookId).equalToWhenPresent(record::getBookId) - .set(indexNum).equalToWhenPresent(record::getIndexNum) - .set(indexName).equalToWhenPresent(record::getIndexName) - .set(wordCount).equalToWhenPresent(record::getWordCount) - .set(isVip).equalToWhenPresent(record::getIsVip) - .set(bookPrice).equalToWhenPresent(record::getBookPrice) - .set(createTime).equalToWhenPresent(record::getCreateTime) - .set(updateTime).equalToWhenPresent(record::getUpdateTime) - .where(id, isEqualTo(record::getId)) + c.set(bookId).equalToWhenPresent(record::getBookId) + .set(indexNum).equalToWhenPresent(record::getIndexNum) + .set(indexName).equalToWhenPresent(record::getIndexName) + .set(wordCount).equalToWhenPresent(record::getWordCount) + .set(isVip).equalToWhenPresent(record::getIsVip) + .set(bookPrice).equalToWhenPresent(record::getBookPrice) + .set(storageType).equalToWhenPresent(record::getStorageType) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) ); } } \ No newline at end of file diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java index 677d0c8..11c60e5 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java @@ -9,6 +9,7 @@ import com.java2nb.novel.service.BookService; import com.java2nb.novel.utils.Constants; import lombok.RequiredArgsConstructor; import org.mybatis.dynamic.sql.render.RenderingStrategies; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,7 +39,10 @@ public class BookServiceImpl implements BookService { private final CrawlBookIndexMapper bookIndexMapper; - private final BookContentService bookContentService; + private final Map bookContentServiceMap; + + @Value("${content.save.storage}") + private String storageType; @Override @@ -85,8 +89,11 @@ public class BookServiceImpl implements BookService { bookMapper.insertSelective(book); //批量保存目录和内容 + bookIndexList.forEach(bookIndex -> { + bookIndex.setStorageType(storageType); + }); bookIndexMapper.insertMultiple(bookIndexList); - bookContentService.saveBookContent(bookContentList,book.getId()); + bookContentServiceMap.get(storageType).saveBookContent(bookContentList, book.getId()); } } @@ -106,7 +113,7 @@ public class BookServiceImpl implements BookService { @Override public Map queryExistBookIndexMap(Long bookId) { - List bookIndexs = bookIndexMapper.selectMany(select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount) + List bookIndexs = bookIndexMapper.selectMany(select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount, BookIndexDynamicSqlSupport.storageType) .from(BookIndexDynamicSqlSupport.bookIndex) .where(BookIndexDynamicSqlSupport.bookId, isEqualTo(bookId)) .build() @@ -127,12 +134,13 @@ public class BookServiceImpl implements BookService { if (!existBookIndexMap.containsKey(bookIndex.getIndexNum())) { //插入 + bookIndex.setStorageType(storageType); bookIndexMapper.insertSelective(bookIndex); - bookContentService.saveBookContent(bookContent,book.getId()); + bookContentServiceMap.get(storageType).saveBookContent(bookContent, book.getId()); } else { //更新 bookIndexMapper.updateByPrimaryKeySelective(bookIndex); - bookContentService.updateBookContent(bookContent,book.getId()); + bookContentServiceMap.get(existBookIndexMap.get(bookIndex.getIndexNum()).getStorageType()).updateBookContent(bookContent, book.getId()); } diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java index c9492cc..8d45778 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java @@ -149,7 +149,7 @@ public class CrawlServiceImpl implements CrawlService { @Override public void addCrawlSingleTask(CrawlSingleTask singleTask) { - if(bookService.queryIsExistByBookNameAndAuthorName(singleTask.getBookName(),singleTask.getAuthorName())){ + if (bookService.queryIsExistByBookNameAndAuthorName(singleTask.getBookName(), singleTask.getAuthorName())) { throw new BusinessException(ResponseStatus.BOOK_EXISTS); } @@ -181,23 +181,23 @@ public class CrawlServiceImpl implements CrawlService { @Override public CrawlSingleTask getCrawlSingleTask() { - List list = crawlSingleTaskMapper.selectMany(select(CrawlSingleTaskDynamicSqlSupport.crawlSingleTask.allColumns()) + List list = crawlSingleTaskMapper.selectMany(select(CrawlSingleTaskDynamicSqlSupport.crawlSingleTask.allColumns()) .from(CrawlSingleTaskDynamicSqlSupport.crawlSingleTask) - .where(CrawlSingleTaskDynamicSqlSupport.taskStatus,isEqualTo((byte)2)) - .orderBy(CrawlSingleTaskDynamicSqlSupport.createTime) - .limit(1) + .where(CrawlSingleTaskDynamicSqlSupport.taskStatus, isEqualTo((byte) 2)) + .orderBy(CrawlSingleTaskDynamicSqlSupport.createTime) + .limit(1) .build() .render(RenderingStrategies.MYBATIS3)); - return list.size() > 0 ? list.get(0) : null; + return list.size() > 0 ? list.get(0) : null; } @Override public void updateCrawlSingleTask(CrawlSingleTask task, Byte status) { byte excCount = task.getExcCount(); - excCount+=1; + excCount += 1; task.setExcCount(excCount); - if(status == 1 || excCount == 5){ + if (status == 1 || excCount == 5) { //当采集成功或者采集次数等于5,则更新采集最终状态,并停止采集 task.setTaskStatus(status); } @@ -219,7 +219,7 @@ public class CrawlServiceImpl implements CrawlService { try { - if(StringUtils.isNotBlank(ruleBean.getCatIdRule().get("catId" + catId))) { + if (StringUtils.isNotBlank(ruleBean.getCatIdRule().get("catId" + catId))) { //拼接分类URL String catBookListUrl = ruleBean.getBookListUrl() .replace("{catId}", ruleBean.getCatIdRule().get("catId" + catId)) @@ -235,7 +235,7 @@ public class CrawlServiceImpl implements CrawlService { //1.阻塞过程(使用了 sleep,同步锁的 wait,socket 中的 receiver,accept 等方法时) //捕获中断异常InterruptedException来退出线程。 //2.非阻塞过程中通过判断中断标志来退出线程。 - if(Thread.currentThread().isInterrupted()){ + if (Thread.currentThread().isInterrupted()) { return; } @@ -262,8 +262,8 @@ public class CrawlServiceImpl implements CrawlService { } } - }catch (Exception e){ - log.error(e.getMessage(),e); + } catch (Exception e) { + log.error(e.getMessage(), e); } page += 1; @@ -278,7 +278,7 @@ public class CrawlServiceImpl implements CrawlService { final AtomicBoolean parseResult = new AtomicBoolean(false); CrawlParser.parseBook(ruleBean, bookId, book -> { - if(book.getBookName() == null || book.getAuthorName() == null){ + if (book.getBookName() == null || book.getAuthorName() == null) { return; } //这里只做新书入库,查询是否存在这本书 @@ -301,7 +301,7 @@ public class CrawlServiceImpl implements CrawlService { book.setCrawlLastTime(new Date()); book.setId(new IdWorker().nextId()); //解析章节目录 - CrawlParser.parseBookIndexAndContent(bookId, book, ruleBean, new HashMap<>(0),chapter -> { + CrawlParser.parseBookIndexAndContent(bookId, book, ruleBean, new HashMap<>(0), chapter -> { bookService.saveBookAndIndexAndContent(book, chapter.getBookIndexList(), chapter.getBookContentList()); }); diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java index 4aa7849..039d548 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java @@ -15,9 +15,8 @@ import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; import static org.mybatis.dynamic.sql.SqlBuilder.update; -@Service +@Service(value = "db") @RequiredArgsConstructor -@ConditionalOnProperty(prefix = "content.save", name = "storage", havingValue = "db") public class DbBookContentServiceImpl implements BookContentService { private final BookContentMapper bookContentMapper; diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java index 5d6f256..284f5e6 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java @@ -10,9 +10,8 @@ import org.springframework.stereotype.Service; import java.util.List; -@Service +@Service(value = "txt") @RequiredArgsConstructor -@ConditionalOnProperty(prefix = "content.save", name = "storage", havingValue = "file") public class FileBookContentServiceImpl implements BookContentService { @Value("${content.save.path}") diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java b/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java index 6bd0287..960df44 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java @@ -37,10 +37,10 @@ public class BookController extends BaseController { private final BookService bookService; - private final BookContentService bookContentService; - private final RabbitTemplate rabbitTemplate; + private final Map bookContentServiceMap; + @Value("${spring.rabbitmq.enable}") private Integer enableMq; @@ -130,7 +130,8 @@ public class BookController extends BaseController { public ResultBean> queryBookIndexAbout(Long bookId, Long lastBookIndexId) { Map data = new HashMap<>(2); data.put("bookIndexCount", bookService.queryIndexCount(bookId)); - String lastBookContent = bookContentService.queryBookContent(bookId,lastBookIndexId).getContent(); + BookIndex bookIndex = bookService.queryBookIndex(lastBookIndexId); + String lastBookContent = bookContentServiceMap.get(bookIndex.getStorageType()).queryBookContent(bookId,lastBookIndexId).getContent(); if (lastBookContent.length() > 42) { lastBookContent = lastBookContent.substring(0, 42); } diff --git a/novel-front/src/main/java/com/java2nb/novel/page/PageController.java b/novel-front/src/main/java/com/java2nb/novel/page/PageController.java index 1859418..3a54449 100644 --- a/novel-front/src/main/java/com/java2nb/novel/page/PageController.java +++ b/novel-front/src/main/java/com/java2nb/novel/page/PageController.java @@ -45,10 +45,9 @@ public class PageController extends BaseController { private final UserService userService; - private final BookContentService bookContentService; - private final ThreadPoolExecutor threadPoolExecutor; + private final Map bookContentServiceMap; @RequestMapping("{url}.html") public String module(@PathVariable("url") String url) { @@ -210,10 +209,10 @@ public class PageController extends BaseController { return nextBookIndexId; }, threadPoolExecutor); - //加载小说内容信息线程 - CompletableFuture bookContentCompletableFuture = CompletableFuture.supplyAsync(() -> { + //加载小说内容信息线程,该线程在加载小说章节信息线程执行完毕后才执行 + CompletableFuture bookContentCompletableFuture = bookIndexCompletableFuture.thenApplyAsync((bookIndex) -> { //查询内容 - BookContent bookContent = bookContentService.queryBookContent(bookId, bookIndexId); + BookContent bookContent = bookContentServiceMap.get(bookIndex.getStorageType()).queryBookContent(bookId, bookIndexId); log.debug("加载小说内容信息线程结束"); return bookContent; }, threadPoolExecutor); diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java index dd1db5d..18a0db7 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java @@ -262,7 +262,7 @@ public class BookServiceImpl implements BookService { @Override public BookIndex queryBookIndex(Long bookIndexId) { - SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount,BookIndexDynamicSqlSupport.bookPrice, BookIndexDynamicSqlSupport.updateTime, BookIndexDynamicSqlSupport.isVip) + SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount,BookIndexDynamicSqlSupport.bookPrice, BookIndexDynamicSqlSupport.updateTime, BookIndexDynamicSqlSupport.isVip,BookIndexDynamicSqlSupport.storageType) .from(bookIndex) .where(BookIndexDynamicSqlSupport.id, isEqualTo(bookIndexId)) .build() diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java index 3e4344f..7d5fce0 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java @@ -18,9 +18,8 @@ import static org.mybatis.dynamic.sql.SqlBuilder.update; import static org.mybatis.dynamic.sql.select.SelectDSL.select; -@Service +@Service(value = "db") @RequiredArgsConstructor -@ConditionalOnProperty(prefix = "content.save", name = "storage", havingValue = "db") public class DbBookContentServiceImpl implements BookContentService { private final BookContentMapper bookContentMapper; diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java index bcb0425..7e915be 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/FileBookContentServiceImpl.java @@ -1,21 +1,17 @@ package com.java2nb.novel.service.impl; -import com.java2nb.novel.core.utils.FileUtil; import com.java2nb.novel.entity.BookContent; import com.java2nb.novel.service.BookContentService; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; import java.io.BufferedReader; import java.io.FileReader; -import java.util.List; -@Service +@Service(value = "txt") @RequiredArgsConstructor -@ConditionalOnProperty(prefix = "content.save", name = "storage", havingValue = "file") public class FileBookContentServiceImpl implements BookContentService { @Value("${content.save.path}") From 396452b46ea7c6f2317224dc77fe25fcffa19407 Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Mon, 13 Sep 2021 22:24:08 +0800 Subject: [PATCH 07/19] =?UTF-8?q?3.6.1=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- novel-admin/pom.xml | 2 +- novel-common/pom.xml | 2 +- novel-crawl/pom.xml | 2 +- novel-front/pom.xml | 2 +- pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/novel-admin/pom.xml b/novel-admin/pom.xml index 46d059c..7186f0d 100644 --- a/novel-admin/pom.xml +++ b/novel-admin/pom.xml @@ -5,7 +5,7 @@ com.java2nb novel-admin - 3.6.0 + 3.6.1 jar novel-admin diff --git a/novel-common/pom.xml b/novel-common/pom.xml index ba4b58e..f1cb571 100644 --- a/novel-common/pom.xml +++ b/novel-common/pom.xml @@ -5,7 +5,7 @@ novel com.java2nb - 3.6.0 + 3.6.1 4.0.0 diff --git a/novel-crawl/pom.xml b/novel-crawl/pom.xml index 48efbe1..4cdbbb6 100644 --- a/novel-crawl/pom.xml +++ b/novel-crawl/pom.xml @@ -5,7 +5,7 @@ novel com.java2nb - 3.6.0 + 3.6.1 4.0.0 diff --git a/novel-front/pom.xml b/novel-front/pom.xml index da5eeac..ada2b55 100644 --- a/novel-front/pom.xml +++ b/novel-front/pom.xml @@ -5,7 +5,7 @@ novel com.java2nb - 3.6.0 + 3.6.1 4.0.0 diff --git a/pom.xml b/pom.xml index 0546905..488c49b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.java2nb novel - 3.6.0 + 3.6.1 novel-common novel-front From ede7aca66d01841603b36c303b14fd1b71946493 Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Mon, 27 Sep 2021 22:35:48 +0800 Subject: [PATCH 08/19] =?UTF-8?q?=E4=BD=9C=E5=AE=B6=E4=BD=9C=E5=93=81?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=88=86=E9=A1=B5=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/java2nb/novel/service/impl/BookServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java index 18a0db7..f165675 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java @@ -496,11 +496,12 @@ public class BookServiceImpl implements BookService { @Override public PageBean listBookPageByUserId(Long userId, int page, int pageSize) { + Author author = authorService.queryAuthor(userId); PageHelper.startPage(page, pageSize); SelectStatementProvider selectStatement = select(id, bookName, picUrl, catName, visitCount, yesterdayBuy, lastIndexUpdateTime, updateTime, wordCount, lastIndexName, status) .from(book) - .where(authorId, isEqualTo(authorService.queryAuthor(userId).getId())) + .where(authorId, isEqualTo(author.getId())) .orderBy(BookDynamicSqlSupport.createTime.descending()) .build() .render(RenderingStrategies.MYBATIS3); From 2bf945fe0e7be2442266408ae18f02945706aaa4 Mon Sep 17 00:00:00 2001 From: xiaoyang Date: Mon, 8 Nov 2021 19:55:03 +0800 Subject: [PATCH 09/19] =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/templates/mobile/book/book_detail.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/novel-front/src/main/resources/templates/mobile/book/book_detail.html b/novel-front/src/main/resources/templates/mobile/book/book_detail.html index 703e86b..1f6ea6e 100644 --- a/novel-front/src/main/resources/templates/mobile/book/book_detail.html +++ b/novel-front/src/main/resources/templates/mobile/book/book_detail.html @@ -147,10 +147,10 @@
- 开始阅读 - + 开始阅读 + - + From 776083076c2dc3cf0aa08c27996a45e44155b9fd Mon Sep 17 00:00:00 2001 From: xiaoyang Date: Thu, 11 Nov 2021 14:28:05 +0800 Subject: [PATCH 10/19] update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b54fed7..7d4c9bd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![index]( https://s1.ax1x.com/2020/07/03/NOSA5q.jpg )]( https://cloud.tencent.com/act/cps/redirect?redirect=1052&cps_key=736e609d66e0ac4e57813316cec6fd0b&from=console ) +[![index]( https://z3.ax1x.com/2021/11/11/IwNJAg.jpg )]( https://cloud.tencent.com/act/cps/redirect?redirect=1052&cps_key=736e609d66e0ac4e57813316cec6fd0b&from=console ) # 小说精品屋-plus From 16e4c98a45f954714811c59f194520e9a1534a64 Mon Sep 17 00:00:00 2001 From: xiaoyang Date: Sat, 11 Dec 2021 18:30:22 +0800 Subject: [PATCH 11/19] =?UTF-8?q?refactor:=20=E5=BC=95=E5=85=A5xxy-common?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- novel-common/pom.xml | 18 ++ .../core/advice/CommonExceptionHandler.java | 46 ----- .../com/java2nb/novel/core/bean/PageBean.java | 53 ------ .../java2nb/novel/core/bean/ResultBean.java | 73 -------- .../novel/core/enums/ResponseStatus.java | 23 +-- .../core/exception/BusinessException.java | 22 --- .../java2nb/novel/core/utils/BeanUtil.java | 33 ---- .../java2nb/novel/core/utils/FileUtil.java | 1 + .../java2nb/novel/core/utils/IdWorker.java | 163 ------------------ .../com/java2nb/novel/core/utils/MD5Util.java | 61 ------- .../java2nb/novel/core/utils/SpringUtil.java | 52 ------ .../java2nb/novel/core/utils/ThreadUtil.java | 26 --- .../java2nb/novel/core/utils/UUIDUtil.java | 96 ----------- .../java2nb/novel/core/valid/AddGroup.java | 11 -- .../java2nb/novel/core/valid/UpdateGroup.java | 11 -- .../java/com/java2nb/novel/entity/User.java | 6 +- .../novel/controller/CrawlController.java | 29 ++-- .../java2nb/novel/core/crawl/CrawlParser.java | 3 +- .../core/schedule/CrawlThreadMonitor.java | 2 +- .../java2nb/novel/service/CrawlService.java | 2 +- .../novel/service/impl/CrawlServiceImpl.java | 19 +- .../novel/controller/AuthorController.java | 55 +++--- .../novel/controller/BookController.java | 68 ++++---- .../novel/controller/CacheController.java | 9 +- .../novel/controller/FileController.java | 14 +- .../controller/FriendLinkController.java | 8 +- .../novel/controller/NewsController.java | 16 +- .../novel/controller/UserController.java | 105 +++++------ .../novel/core/filter/NovelFilter.java | 2 + .../novel/core/utils/ThreadLocalUtil.java | 1 + .../java2nb/novel/page/PageController.java | 2 +- .../java2nb/novel/service/AuthorService.java | 2 +- .../java2nb/novel/service/BookService.java | 2 +- .../java2nb/novel/service/NewsService.java | 2 +- .../java2nb/novel/service/SearchService.java | 5 +- .../java2nb/novel/service/UserService.java | 2 +- .../novel/service/impl/AuthorServiceImpl.java | 9 +- .../novel/service/impl/BookServiceImpl.java | 20 +-- .../impl/DbBookContentServiceImpl.java | 4 - .../service/impl/FriendLinkServiceImpl.java | 2 +- .../novel/service/impl/NewsServiceImpl.java | 7 +- .../novel/service/impl/SearchServiceImpl.java | 11 +- .../novel/service/impl/UserServiceImpl.java | 19 +- .../src/main/resources/application.yml | 2 +- pom.xml | 34 ++-- 45 files changed, 252 insertions(+), 899 deletions(-) delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/advice/CommonExceptionHandler.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/bean/PageBean.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/bean/ResultBean.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/exception/BusinessException.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/utils/BeanUtil.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/utils/IdWorker.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/utils/MD5Util.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/utils/SpringUtil.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/utils/ThreadUtil.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/utils/UUIDUtil.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/valid/AddGroup.java delete mode 100644 novel-common/src/main/java/com/java2nb/novel/core/valid/UpdateGroup.java diff --git a/novel-common/pom.xml b/novel-common/pom.xml index f1cb571..43ecae7 100644 --- a/novel-common/pom.xml +++ b/novel-common/pom.xml @@ -123,6 +123,24 @@ true + + io.github.xxyopen + xxy-model + 1.0.0-SNAPSHOT + + + + io.github.xxyopen + xxy-web + 1.0.0-SNAPSHOT + + + + io.github.xxyopen + xxy-util + 1.0.0-SNAPSHOT + + diff --git a/novel-common/src/main/java/com/java2nb/novel/core/advice/CommonExceptionHandler.java b/novel-common/src/main/java/com/java2nb/novel/core/advice/CommonExceptionHandler.java deleted file mode 100644 index 1296d0d..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/advice/CommonExceptionHandler.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.java2nb.novel.core.advice; - -import com.java2nb.novel.core.bean.ResultBean; -import com.java2nb.novel.core.enums.ResponseStatus; -import com.java2nb.novel.core.exception.BusinessException; -import lombok.extern.slf4j.Slf4j; -import org.springframework.validation.BindException; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -/** - * 通用的异常处理器 - * - * @author 11797*/ -@Slf4j -@RestControllerAdvice(basePackages = "com.java2nb.novel.controller") -public class CommonExceptionHandler { - - /** - * 处理后台数据校验异常 - * */ - @ExceptionHandler(BindException.class) - public ResultBean handlerBindException(BindException e){ - log.error(e.getMessage(),e); - return ResultBean.fail(ResponseStatus.PARAM_ERROR); - } - - /** - * 处理业务异常 - * */ - @ExceptionHandler(BusinessException.class) - public ResultBean handlerBusinessException(BusinessException e){ - log.error(e.getMessage(),e); - return ResultBean.fail(e.getResStatus()); - } - - - /** - * 处理系统异常 - * */ - @ExceptionHandler(Exception.class) - public ResultBean handlerException(Exception e){ - log.error(e.getMessage(),e); - return ResultBean.error(); - } -} diff --git a/novel-common/src/main/java/com/java2nb/novel/core/bean/PageBean.java b/novel-common/src/main/java/com/java2nb/novel/core/bean/PageBean.java deleted file mode 100644 index f4f837b..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/bean/PageBean.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.java2nb.novel.core.bean; - -import com.github.pagehelper.PageInfo; -import lombok.Data; - -import java.util.List; - -/** - * 封装通用分页数据,接收PageHelper、SpringData等框架的分页数据,转换成通用的PageBean对象 - * @author xiongxiaoyang - * @version 1.0 - * @since 2021/2/4 - * @param 分页集合类型 - */ -@Data -public class PageBean { - - private Integer pageNum; - private Integer pageSize; - private Long total; - private List list; - - - /** - * 该构造函数用于PageHelper工具进行分页查询的场景 - * 接收PageHelper分页后的list - */ - public PageBean(List list){ - PageInfo pageInfo = new PageInfo<>(list); - this.pageNum = pageInfo.getPageNum(); - this.pageSize = pageInfo.getPageSize(); - this.total = pageInfo.getTotal(); - this.list = pageInfo.getList(); - - } - - /** - * 该构造函数用于通用分页查询的场景 - * 接收普通分页数据和普通集合 - */ - public PageBean(Integer pageNum, Integer pageSize, Long total, List list) { - this.pageNum = pageNum; - this.pageSize = pageSize; - this.total = total; - this.list = list; - } - - - //TODO 使用其他的分页工具或框架进行分页查询的场景 - - - -} diff --git a/novel-common/src/main/java/com/java2nb/novel/core/bean/ResultBean.java b/novel-common/src/main/java/com/java2nb/novel/core/bean/ResultBean.java deleted file mode 100644 index d48a54d..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/bean/ResultBean.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.java2nb.novel.core.bean; - - -import com.java2nb.novel.core.enums.ResponseStatus; -import lombok.Data; - -import java.io.Serializable; - -/** - * 自定义响应结构 - * - * @param - * @author 11797 - */ -@Data -public class ResultBean implements Serializable { - private static final long serialVersionUID = 1L; - - private int code = ResponseStatus.OK.getCode(); - - /** - * 响应消息 - */ - private String msg = ResponseStatus.OK.getMsg(); - /** - * 响应中的数据 - */ - private T data; - - private ResultBean() { - - } - - private ResultBean(ResponseStatus responseStatus) { - this.code = responseStatus.getCode(); - this.msg = responseStatus.getMsg(); - } - - private ResultBean(T data) { - this.data = data; - } - - - /** - * 业务处理成功,无数据返回 - */ - public static ResultBean ok() { - return new ResultBean<>(); - } - - /** - * 业务处理成功,有数据返回 - */ - public static ResultBean ok(T data) { - return new ResultBean<>(data); - } - - /** - * 业务处理失败 - */ - public static ResultBean fail(ResponseStatus responseStatus) { - return new ResultBean<>(responseStatus); - } - - - /** - * 系统错误 - */ - public static ResultBean error() { - return new ResultBean<>(ResponseStatus.ERROR); - } -} - diff --git a/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java b/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java index b73bc5a..1fce47a 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java @@ -1,5 +1,6 @@ package com.java2nb.novel.core.enums; +import io.github.xxyopen.model.resp.IResultCode; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -11,27 +12,7 @@ import lombok.NoArgsConstructor; @Getter @AllArgsConstructor @NoArgsConstructor -public enum ResponseStatus { - - /** - * 请求成功 - * */ - OK(200,"SUCCESS"), - - /** - * 服务器异常 - * */ - ERROR(500,"未知异常,请联系管理员!"), - - /** - * 参数错误 - * */ - PARAM_ERROR(400,"非法参数!"), - - /** - * 拒绝访问 - * */ - FORBIDDEN(403,"拒绝访问!"), +public enum ResponseStatus implements IResultCode { /** diff --git a/novel-common/src/main/java/com/java2nb/novel/core/exception/BusinessException.java b/novel-common/src/main/java/com/java2nb/novel/core/exception/BusinessException.java deleted file mode 100644 index d2af22f..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/exception/BusinessException.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.java2nb.novel.core.exception; - -import com.java2nb.novel.core.enums.ResponseStatus; -import lombok.Data; - -/** - * 自定义业务异常,用于处理用户请求时,业务错误时抛出 - */ -@Data -public class BusinessException extends RuntimeException { - - private ResponseStatus resStatus; - - public BusinessException(ResponseStatus resStatus) { - //不调用父类Throwable的fillInStackTrace()方法生成栈追踪信息,提高应用性能 - //构造器之间的调用必须在第一行 - super(resStatus.getMsg(), null, false, false); - this.resStatus = resStatus; - } - - -} diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/BeanUtil.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/BeanUtil.java deleted file mode 100644 index 2b1de8e..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/BeanUtil.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.java2nb.novel.core.utils; - -import lombok.SneakyThrows; -import org.springframework.beans.BeanUtils; - -import java.util.ArrayList; -import java.util.List; - -/** - * Bean操作工具类 - * @author Administrator - */ -public class BeanUtil { - - /** - * 复制集合对象属性值,生成新类型集合 - * @param source 源集合 - * @param targetClass 目标集合类型 - * @return 新集合 - * */ - @SneakyThrows - public static List copyList(List source,Class targetClass){ - List target = new ArrayList<>(source.size()); - for( int i = 0 ; i < source.size() ; i++){ - Object sourceItem = source.get(i); - T targetItem = targetClass.newInstance(); - BeanUtils.copyProperties(sourceItem,targetItem); - target.add(targetItem); - } - return target; - - } -} diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java index 50ea3dc..f423fe0 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java @@ -1,5 +1,6 @@ package com.java2nb.novel.core.utils; +import io.github.xxyopen.util.UUIDUtil; import lombok.SneakyThrows; import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/IdWorker.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/IdWorker.java deleted file mode 100644 index aff07f9..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/IdWorker.java +++ /dev/null @@ -1,163 +0,0 @@ -package com.java2nb.novel.core.utils; - - -import java.lang.management.ManagementFactory; -import java.net.InetAddress; -import java.net.NetworkInterface; - -/** - *

名称:IdWorker.java

- *

描述:分布式自增长ID

- *
- *     Twitter的 Snowflake JAVA实现方案
- * 
- * 核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用: - * 1||0---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---000000000000 - * 在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间, - * 然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识), - * 然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。 - * 这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分), - * 并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。 - *

- * 64位ID (42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加)) - * - */ -public class IdWorker { - // 时间起始标记点,作为基准,一般取系统的最近时间(一旦确定不能变动) - private final static long twepoch = 1288834974657L; - // 机器标识位数 - private final static long workerIdBits = 5L; - // 数据中心标识位数 - private final static long datacenterIdBits = 5L; - // 机器ID最大值 - private final static long maxWorkerId = -1L ^ (-1L << workerIdBits); - // 数据中心ID最大值 - private final static long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); - // 毫秒内自增位 - private final static long sequenceBits = 12L; - // 机器ID偏左移12位 - private final static long workerIdShift = sequenceBits; - // 数据中心ID左移17位 - private final static long datacenterIdShift = sequenceBits + workerIdBits; - // 时间毫秒左移22位 - private final static long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; - - private final static long sequenceMask = -1L ^ (-1L << sequenceBits); - /* 上次生产id时间戳 */ - private static long lastTimestamp = -1L; - // 0,并发控制 - private long sequence = 0L; - - private final long workerId; - // 数据标识id部分 - private final long datacenterId; - - public IdWorker(){ - this.datacenterId = getDatacenterId(maxDatacenterId); - this.workerId = getMaxWorkerId(datacenterId, maxWorkerId); - } - /** - * @param workerId - * 工作机器ID - * @param datacenterId - * 序列号 - */ - public IdWorker(long workerId, long datacenterId) { - if (workerId > maxWorkerId || workerId < 0) { - throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); - } - if (datacenterId > maxDatacenterId || datacenterId < 0) { - throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); - } - this.workerId = workerId; - this.datacenterId = datacenterId; - } - /** - * 获取下一个ID - * - * @return - */ - public synchronized long nextId() { - long timestamp = timeGen(); - if (timestamp < lastTimestamp) { - throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); - } - - if (lastTimestamp == timestamp) { - // 当前毫秒内,则+1 - sequence = (sequence + 1) & sequenceMask; - if (sequence == 0) { - // 当前毫秒内计数满了,则等待下一秒 - timestamp = tilNextMillis(lastTimestamp); - } - } else { - sequence = 0L; - } - lastTimestamp = timestamp; - // ID偏移组合生成最终的ID,并返回ID - long nextId = ((timestamp - twepoch) << timestampLeftShift) - | (datacenterId << datacenterIdShift) - | (workerId << workerIdShift) | sequence; - - return nextId; - } - - private long tilNextMillis(final long lastTimestamp) { - long timestamp = this.timeGen(); - while (timestamp <= lastTimestamp) { - timestamp = this.timeGen(); - } - return timestamp; - } - - private long timeGen() { - return System.currentTimeMillis(); - } - - /** - *

- * 获取 maxWorkerId - *

- */ - protected static long getMaxWorkerId(long datacenterId, long maxWorkerId) { - StringBuffer mpid = new StringBuffer(); - mpid.append(datacenterId); - String name = ManagementFactory.getRuntimeMXBean().getName(); - if (!name.isEmpty()) { - /* - * GET jvmPid - */ - mpid.append(name.split("@")[0]); - } - /* - * MAC + PID 的 hashcode 获取16个低位 - */ - return (mpid.toString().hashCode() & 0xffff) % (maxWorkerId + 1); - } - - /** - *

- * 数据标识id部分 - *

- */ - protected static long getDatacenterId(long maxDatacenterId) { - long id = 0L; - try { - InetAddress ip = InetAddress.getLocalHost(); - NetworkInterface network = NetworkInterface.getByInetAddress(ip); - if (network == null) { - id = 1L; - } else { - byte[] mac = network.getHardwareAddress(); - id = ((0x000000FF & (long) mac[mac.length - 1]) - | (0x0000FF00 & (((long) mac[mac.length - 2]) << 8))) >> 6; - id = id % (maxDatacenterId + 1); - } - } catch (Exception e) { - System.out.println(" getDatacenterId: " + e.getMessage()); - } - return id; - } - - -} diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/MD5Util.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/MD5Util.java deleted file mode 100644 index 4bc27bc..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/MD5Util.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.java2nb.novel.core.utils; - - -import lombok.SneakyThrows; -import sun.misc.BASE64Encoder; - -import java.security.MessageDigest; - -/** - * @author 11797 - */ -public class MD5Util { - - private static final String DEFAUL_CHARSET = "utf-8" ; - - private static String byteArrayToHexString(byte[] b) { - StringBuffer resultSb = new StringBuffer(); - for (int i = 0; i < b.length; i++) { - resultSb.append(byteToHexString(b[i])); - } - - return resultSb.toString(); - } - - private static String byteToHexString(byte b) { - int n = b; - if (n < 0) { - n += 256; - } - int d1 = n / 16; - int d2 = n % 16; - return HEX_DIGITS[d1] + HEX_DIGITS[d2]; - } - - @SneakyThrows - public static String MD5Encode(String origin,String charsetname) { - MessageDigest md = MessageDigest.getInstance("MD5"); - if (charsetname == null || "".equals(charsetname)) { - return byteArrayToHexString(md.digest(origin - .getBytes())); - } else { - return byteArrayToHexString(md.digest(origin - .getBytes(charsetname))); - } - } - - @SneakyThrows - public static String MD5New(String str) { - //首先利用MD5算法将密码加密,变成等长字节 - MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] b1 = md.digest(str.getBytes()); - //将等长字节利用Base64算法转换成字符串 - BASE64Encoder encoder = new BASE64Encoder(); - return encoder.encode(b1); - } - - private static final String[] HEX_DIGITS = {"0", "1", "2", "3", "4", "5", - "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; - - -} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/SpringUtil.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/SpringUtil.java deleted file mode 100644 index ad5d5d9..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/SpringUtil.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.java2nb.novel.core.utils; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.stereotype.Component; - -/** - * @author Administrator - */ -@Component -public class SpringUtil implements ApplicationContextAware { - - - - private static ApplicationContext applicationContext; - - @Override - public void setApplicationContext(ApplicationContext applicationContext) { - if (SpringUtil.applicationContext == null) { - SpringUtil.applicationContext = applicationContext; - } - } - - /** - * 获取applicationContext - * */ - public static ApplicationContext getApplicationContext() { - return applicationContext; - } - - /** - * 通过name获取 Bean. - * */ - public static Object getBean(String name) { - return getApplicationContext().getBean(name); - } - - /** - * 通过class获取Bean - * */ - public static T getBean(Class clazz) { - return getApplicationContext().getBean(clazz); - } - - /** - * 通过name,以及Clazz返回指定的Bean - * */ - public static T getBean(String name, Class clazz) { - return getApplicationContext().getBean(name, clazz); - } - -} diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/ThreadUtil.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/ThreadUtil.java deleted file mode 100644 index aa216da..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/ThreadUtil.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.java2nb.novel.core.utils; - -/** - * 线程工具类 - * @author Administrator - */ -public class ThreadUtil { - - /** - * 根据线程ID获取线程 - * */ - public static Thread findThread(long threadId) { - ThreadGroup group = Thread.currentThread().getThreadGroup(); - while(group != null) { - Thread[] threads = new Thread[(int)(group.activeCount() * 1.2)]; - int count = group.enumerate(threads, true); - for(int i = 0; i < count; i++) { - if(threadId == threads[i].getId()) { - return threads[i]; - } - } - group = group.getParent(); - } - return null; - } -} diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/UUIDUtil.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/UUIDUtil.java deleted file mode 100644 index 71d3cb6..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/UUIDUtil.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.java2nb.novel.core.utils; - -import java.util.UUID; - -/** - * @author Administrator - */ -public class UUIDUtil { - - public static final String[] CHARS = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", - "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", - "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", - "S", "T", "U", "V", "W", "X", "Y", "Z" }; - - /** - * 生成指定长度的uuid - * - * @param length - * @return - */ - private static String getUUID(int length, UUID uuid) { - int groupLength = 32 / length; - StringBuilder sb = new StringBuilder(); - String id = uuid.toString().replace("-", ""); - for (int i = 0; i < length; i++) { - String str = id.substring(i * groupLength, i * groupLength + groupLength); - int x = Integer.parseInt(str, 16); - sb.append(CHARS[x % 0x3E]); - } - return sb.toString(); - } - - /** - * 8位UUID - * - * @return - */ - public static String getUUID8() { - return getUUID(8, UUID.randomUUID()); - } - - /** - * 8位UUID - * - * @return - */ - public static String getUUID8(byte[] bytes) { - return getUUID(8, UUID.nameUUIDFromBytes(bytes)); - } - - /** - * 8位UUID - * - * @return - */ - public static String getUUID8(String fromString) { - return getUUID(8, UUID.fromString(fromString)); - } - - /** - * 16位UUID - * - * @return - */ - public static String getUUID16() { - return getUUID(16, UUID.randomUUID()); - } - - /** - * 16位UUID - * - * @return - */ - public static String getUUID16(String fromString) { - return getUUID(16, UUID.fromString(fromString)); - } - - /** - * 16位UUID - * - * @return - */ - public static String getUUID16(byte[] bytes) { - return getUUID(16, UUID.nameUUIDFromBytes(bytes)); - } - - /** - * 32位UUID - * - * @return - */ - public static String getUUID32() { - return UUID.randomUUID().toString().replace("-", ""); - } - -} diff --git a/novel-common/src/main/java/com/java2nb/novel/core/valid/AddGroup.java b/novel-common/src/main/java/com/java2nb/novel/core/valid/AddGroup.java deleted file mode 100644 index 8bb5974..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/valid/AddGroup.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.java2nb.novel.core.valid; - -/** - * 新增数据的校验分组 - * @author xiongxiaoyang - */ -public interface AddGroup { - - - -} diff --git a/novel-common/src/main/java/com/java2nb/novel/core/valid/UpdateGroup.java b/novel-common/src/main/java/com/java2nb/novel/core/valid/UpdateGroup.java deleted file mode 100644 index 502b2fc..0000000 --- a/novel-common/src/main/java/com/java2nb/novel/core/valid/UpdateGroup.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.java2nb.novel.core.valid; - -/** - * 更新数据的校验分组 - * @author xiongxiaoyang - */ -public interface UpdateGroup { - - - -} diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/User.java b/novel-common/src/main/java/com/java2nb/novel/entity/User.java index 00be48e..fd3805e 100644 --- a/novel-common/src/main/java/com/java2nb/novel/entity/User.java +++ b/novel-common/src/main/java/com/java2nb/novel/entity/User.java @@ -1,11 +1,11 @@ package com.java2nb.novel.entity; -import com.java2nb.novel.core.valid.AddGroup; -import com.java2nb.novel.core.valid.UpdateGroup; +import io.github.xxyopen.web.valid.AddGroup; +import io.github.xxyopen.web.valid.UpdateGroup; -import java.util.Date; import javax.annotation.Generated; import javax.validation.constraints.*; +import java.util.Date; public class User { diff --git a/novel-crawl/src/main/java/com/java2nb/novel/controller/CrawlController.java b/novel-crawl/src/main/java/com/java2nb/novel/controller/CrawlController.java index 80c9c16..cefdb30 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/controller/CrawlController.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/controller/CrawlController.java @@ -1,10 +1,11 @@ package com.java2nb.novel.controller; -import com.java2nb.novel.core.bean.PageBean; -import com.java2nb.novel.core.bean.ResultBean; +import io.github.xxyopen.model.page.PageBean; + import com.java2nb.novel.entity.CrawlSingleTask; import com.java2nb.novel.entity.CrawlSource; import com.java2nb.novel.service.CrawlService; +import io.github.xxyopen.model.resp.RestResult; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -23,10 +24,10 @@ public class CrawlController { * 新增爬虫源 * */ @PostMapping("addCrawlSource") - public ResultBean addCrawlSource(CrawlSource source){ + public RestResult addCrawlSource(CrawlSource source){ crawlService.addCrawlSource(source); - return ResultBean.ok(); + return RestResult.ok(); } @@ -34,30 +35,30 @@ public class CrawlController { * 爬虫源分页列表查询 * */ @GetMapping("listCrawlByPage") - public ResultBean> listCrawlByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize){ + public RestResult> listCrawlByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize){ - return ResultBean.ok(crawlService.listCrawlByPage(page,pageSize)); + return RestResult.ok(crawlService.listCrawlByPage(page,pageSize)); } /** * 开启或停止爬虫 * */ @PostMapping("openOrCloseCrawl") - public ResultBean openOrCloseCrawl(Integer sourceId,Byte sourceStatus){ + public RestResult openOrCloseCrawl(Integer sourceId,Byte sourceStatus){ crawlService.openOrCloseCrawl(sourceId,sourceStatus); - return ResultBean.ok(); + return RestResult.ok(); } /** * 新增单本采集任务 * */ @PostMapping("addCrawlSingleTask") - public ResultBean addCrawlSingleTask(CrawlSingleTask singleTask){ + public RestResult addCrawlSingleTask(CrawlSingleTask singleTask){ crawlService.addCrawlSingleTask(singleTask); - return ResultBean.ok(); + return RestResult.ok(); } @@ -65,20 +66,20 @@ public class CrawlController { * 单本采集任务分页列表查询 * */ @GetMapping("listCrawlSingleTaskByPage") - public ResultBean> listCrawlSingleTaskByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize){ + public RestResult> listCrawlSingleTaskByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize){ - return ResultBean.ok(crawlService.listCrawlSingleTaskByPage(page,pageSize)); + return RestResult.ok(crawlService.listCrawlSingleTaskByPage(page,pageSize)); } /** * 删除采集任务 * */ @DeleteMapping("delCrawlSingleTask/{id}") - public ResultBean delCrawlSingleTask(@PathVariable("id") Long id){ + public RestResult delCrawlSingleTask(@PathVariable("id") Long id){ crawlService.delCrawlSingleTask(id); - return ResultBean.ok(); + return RestResult.ok(); } diff --git a/novel-crawl/src/main/java/com/java2nb/novel/core/crawl/CrawlParser.java b/novel-crawl/src/main/java/com/java2nb/novel/core/crawl/CrawlParser.java index 3fd3d91..85955cd 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/core/crawl/CrawlParser.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/core/crawl/CrawlParser.java @@ -5,6 +5,7 @@ import com.java2nb.novel.entity.Book; import com.java2nb.novel.entity.BookContent; import com.java2nb.novel.entity.BookIndex; import com.java2nb.novel.utils.Constants; +import io.github.xxyopen.util.IdWorker; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -26,7 +27,7 @@ import static java.util.regex.Pattern.compile; @Slf4j public class CrawlParser { - private static final IdWorker idWorker = new IdWorker(); + private static final IdWorker idWorker = IdWorker.INSTANCE; private static final RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8"); diff --git a/novel-crawl/src/main/java/com/java2nb/novel/core/schedule/CrawlThreadMonitor.java b/novel-crawl/src/main/java/com/java2nb/novel/core/schedule/CrawlThreadMonitor.java index 1009cdf..a04ce49 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/core/schedule/CrawlThreadMonitor.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/core/schedule/CrawlThreadMonitor.java @@ -3,9 +3,9 @@ package com.java2nb.novel.core.schedule; import com.java2nb.novel.core.cache.CacheKey; import com.java2nb.novel.core.cache.CacheService; -import com.java2nb.novel.core.utils.ThreadUtil; import com.java2nb.novel.entity.CrawlSource; import com.java2nb.novel.service.CrawlService; +import io.github.xxyopen.util.ThreadUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/CrawlService.java b/novel-crawl/src/main/java/com/java2nb/novel/service/CrawlService.java index d8e9821..38c6f4b 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/CrawlService.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/CrawlService.java @@ -1,6 +1,6 @@ package com.java2nb.novel.service; -import com.java2nb.novel.core.bean.PageBean; +import io.github.xxyopen.model.page.PageBean; import com.java2nb.novel.core.crawl.RuleBean; import com.java2nb.novel.entity.CrawlSingleTask; import com.java2nb.novel.entity.CrawlSource; diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java index 8d45778..2e95141 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java @@ -2,17 +2,17 @@ package com.java2nb.novel.service.impl; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; -import com.java2nb.novel.core.bean.PageBean; +import io.github.xxyopen.model.page.PageBean; import com.java2nb.novel.core.cache.CacheKey; import com.java2nb.novel.core.cache.CacheService; import com.java2nb.novel.core.crawl.CrawlParser; import com.java2nb.novel.core.crawl.RuleBean; import com.java2nb.novel.core.enums.ResponseStatus; -import com.java2nb.novel.core.exception.BusinessException; -import com.java2nb.novel.core.utils.BeanUtil; -import com.java2nb.novel.core.utils.IdWorker; -import com.java2nb.novel.core.utils.SpringUtil; -import com.java2nb.novel.core.utils.ThreadUtil; +import io.github.xxyopen.model.page.builder.pagehelper.PageBuilder; +import io.github.xxyopen.util.IdWorker; +import io.github.xxyopen.util.ThreadUtil; +import io.github.xxyopen.web.exception.BusinessException; +import io.github.xxyopen.web.util.BeanUtil; import com.java2nb.novel.entity.Book; import com.java2nb.novel.entity.CrawlSingleTask; import com.java2nb.novel.entity.CrawlSource; @@ -24,6 +24,7 @@ import com.java2nb.novel.service.BookService; import com.java2nb.novel.service.CrawlService; import com.java2nb.novel.vo.CrawlSingleTaskVO; import com.java2nb.novel.vo.CrawlSourceVO; +import io.github.xxyopen.web.util.SpringUtil; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -79,7 +80,7 @@ public class CrawlServiceImpl implements CrawlService { .build() .render(RenderingStrategies.MYBATIS3); List crawlSources = crawlSourceMapper.selectMany(render); - PageBean pageBean = new PageBean<>(crawlSources); + PageBean pageBean = PageBuilder.build(crawlSources); pageBean.setList(BeanUtil.copyList(crawlSources, CrawlSourceVO.class)); return pageBean; } @@ -168,7 +169,7 @@ public class CrawlServiceImpl implements CrawlService { .build() .render(RenderingStrategies.MYBATIS3); List crawlSingleTasks = crawlSingleTaskMapper.selectMany(render); - PageBean pageBean = new PageBean<>(crawlSingleTasks); + PageBean pageBean = PageBuilder.build(crawlSingleTasks); pageBean.setList(BeanUtil.copyList(crawlSingleTasks, CrawlSingleTaskVO.class)); return pageBean; } @@ -299,7 +300,7 @@ public class CrawlServiceImpl implements CrawlService { book.setCrawlBookId(bookId); book.setCrawlSourceId(sourceId); book.setCrawlLastTime(new Date()); - book.setId(new IdWorker().nextId()); + book.setId(IdWorker.INSTANCE.nextId()); //解析章节目录 CrawlParser.parseBookIndexAndContent(bookId, book, ruleBean, new HashMap<>(0), chapter -> { bookService.saveBookAndIndexAndContent(book, chapter.getBookIndexList(), chapter.getBookContentList()); diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java b/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java index 9b23947..c89d02f 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java @@ -1,10 +1,11 @@ package com.java2nb.novel.controller; -import com.java2nb.novel.core.bean.PageBean; -import com.java2nb.novel.core.bean.ResultBean; +import io.github.xxyopen.model.page.PageBean; + import com.java2nb.novel.core.bean.UserDetails; import com.java2nb.novel.core.enums.ResponseStatus; -import com.java2nb.novel.core.exception.BusinessException; +import io.github.xxyopen.model.resp.RestResult; +import io.github.xxyopen.web.exception.BusinessException; import com.java2nb.novel.entity.Author; import com.java2nb.novel.entity.AuthorIncome; import com.java2nb.novel.entity.AuthorIncomeDetail; @@ -35,25 +36,25 @@ public class AuthorController extends BaseController{ * 校验笔名是否存在 * */ @GetMapping("checkPenName") - public ResultBean checkPenName(String penName){ + public RestResult checkPenName(String penName){ - return ResultBean.ok(authorService.checkPenName(penName)); + return RestResult.ok(authorService.checkPenName(penName)); } /** * 作家发布小说分页列表查询 * */ @GetMapping("listBookByPage") - public ResultBean> listBookByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize , HttpServletRequest request){ + public RestResult> listBookByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize , HttpServletRequest request){ - return ResultBean.ok(bookService.listBookPageByUserId(getUserDetails(request).getId(),page,pageSize)); + return RestResult.ok(bookService.listBookPageByUserId(getUserDetails(request).getId(),page,pageSize)); } /** * 发布小说 * */ @PostMapping("addBook") - public ResultBean addBook(@RequestParam("bookDesc") String bookDesc,Book book,HttpServletRequest request){ + public RestResult addBook(@RequestParam("bookDesc") String bookDesc,Book book,HttpServletRequest request){ Author author = checkAuthor(request); @@ -64,20 +65,20 @@ public class AuthorController extends BaseController{ //发布小说 bookService.addBook(book,author.getId(),author.getPenName()); - return ResultBean.ok(); + return RestResult.ok(); } /** * 更新小说状态,上架或下架 * */ @PostMapping("updateBookStatus") - public ResultBean updateBookStatus(Long bookId,Byte status,HttpServletRequest request){ + public RestResult updateBookStatus(Long bookId,Byte status,HttpServletRequest request){ Author author = checkAuthor(request); //更新小说状态,上架或下架 bookService.updateBookStatus(bookId,status,author.getId()); - return ResultBean.ok(); + return RestResult.ok(); } @@ -86,28 +87,28 @@ public class AuthorController extends BaseController{ * 删除章节 */ @DeleteMapping("deleteIndex/{indexId}") - public ResultBean deleteIndex(@PathVariable("indexId") Long indexId, HttpServletRequest request) { + public RestResult deleteIndex(@PathVariable("indexId") Long indexId, HttpServletRequest request) { Author author = checkAuthor(request); //删除章节 bookService.deleteIndex(indexId, author.getId()); - return ResultBean.ok(); + return RestResult.ok(); } /** * 更新章节名 */ @PostMapping("updateIndexName") - public ResultBean updateIndexName(Long indexId, String indexName, HttpServletRequest request) { + public RestResult updateIndexName(Long indexId, String indexName, HttpServletRequest request) { Author author = checkAuthor(request); //更新章节名 bookService.updateIndexName(indexId, indexName, author.getId()); - return ResultBean.ok(); + return RestResult.ok(); } @@ -117,7 +118,7 @@ public class AuthorController extends BaseController{ * 发布章节内容 */ @PostMapping("addBookContent") - public ResultBean addBookContent(Long bookId, String indexName, String content,Byte isVip, HttpServletRequest request) { + public RestResult addBookContent(Long bookId, String indexName, String content,Byte isVip, HttpServletRequest request) { Author author = checkAuthor(request); content = content.replaceAll("\\n", "
") @@ -125,14 +126,14 @@ public class AuthorController extends BaseController{ //发布章节内容 bookService.addBookContent(bookId, indexName, content,isVip, author.getId()); - return ResultBean.ok(); + return RestResult.ok(); } /** * 查询章节内容 */ @GetMapping("queryIndexContent/{indexId}") - public ResultBean queryIndexContent(@PathVariable("indexId") Long indexId, HttpServletRequest request) { + public RestResult queryIndexContent(@PathVariable("indexId") Long indexId, HttpServletRequest request) { Author author = checkAuthor(request); @@ -141,14 +142,14 @@ public class AuthorController extends BaseController{ content = content.replaceAll("
", "\n") .replaceAll(" ", " "); - return ResultBean.ok(content); + return RestResult.ok(content); } /** * 更新章节内容 */ @PostMapping("updateBookContent") - public ResultBean updateBookContent(Long indexId, String indexName, String content, HttpServletRequest request) { + public RestResult updateBookContent(Long indexId, String indexName, String content, HttpServletRequest request) { Author author = checkAuthor(request); content = content.replaceAll("\\n", "
") @@ -156,17 +157,17 @@ public class AuthorController extends BaseController{ //更新章节内容 bookService.updateBookContent(indexId, indexName, content, author.getId()); - return ResultBean.ok(); + return RestResult.ok(); } /** * 修改小说封面 */ @PostMapping("updateBookPic") - public ResultBean updateBookPic(@RequestParam("bookId") Long bookId,@RequestParam("bookPic") String bookPic,HttpServletRequest request) { + public RestResult updateBookPic(@RequestParam("bookId") Long bookId,@RequestParam("bookPic") String bookPic,HttpServletRequest request) { Author author = checkAuthor(request); bookService.updateBookPic(bookId,bookPic, author.getId()); - return ResultBean.ok(); + return RestResult.ok(); } @@ -174,14 +175,14 @@ public class AuthorController extends BaseController{ * 作家日收入统计数据分页列表查询 * */ @GetMapping("listIncomeDailyByPage") - public ResultBean> listIncomeDailyByPage(@RequestParam(value = "curr", defaultValue = "1") int page, + public RestResult> listIncomeDailyByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize , @RequestParam(value = "bookId", defaultValue = "0") Long bookId, @RequestParam(value = "startTime",defaultValue = "2020-05-01") Date startTime, @RequestParam(value = "endTime",defaultValue = "2030-01-01") Date endTime, HttpServletRequest request){ - return ResultBean.ok(authorService.listIncomeDailyByPage(page,pageSize,getUserDetails(request).getId(),bookId,startTime,endTime)); + return RestResult.ok(authorService.listIncomeDailyByPage(page,pageSize,getUserDetails(request).getId(),bookId,startTime,endTime)); } @@ -189,12 +190,12 @@ public class AuthorController extends BaseController{ * 作家月收入统计数据分页列表查询 * */ @GetMapping("listIncomeMonthByPage") - public ResultBean> listIncomeMonthByPage(@RequestParam(value = "curr", defaultValue = "1") int page, + public RestResult> listIncomeMonthByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize , @RequestParam(value = "bookId", defaultValue = "0") Long bookId, HttpServletRequest request){ - return ResultBean.ok(authorService.listIncomeMonthByPage(page,pageSize,getUserDetails(request).getId(),bookId)); + return RestResult.ok(authorService.listIncomeMonthByPage(page,pageSize,getUserDetails(request).getId(),bookId)); } private Author checkAuthor(HttpServletRequest request) { diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java b/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java index 960df44..d95cc2c 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/BookController.java @@ -1,8 +1,5 @@ package com.java2nb.novel.controller; -import com.github.pagehelper.PageInfo; -import com.java2nb.novel.core.bean.PageBean; -import com.java2nb.novel.core.bean.ResultBean; import com.java2nb.novel.core.bean.UserDetails; import com.java2nb.novel.core.enums.ResponseStatus; import com.java2nb.novel.entity.Book; @@ -15,6 +12,9 @@ import com.java2nb.novel.vo.BookSettingVO; import com.java2nb.novel.vo.BookSpVO; import com.java2nb.novel.service.BookService; 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.model.resp.RestResult; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -49,56 +49,56 @@ public class BookController extends BaseController { * 查询首页小说设置列表数据 */ @GetMapping("listBookSetting") - public ResultBean>> listBookSetting() { - return ResultBean.ok(bookService.listBookSettingVO()); + public RestResult>> listBookSetting() { + return RestResult.ok(bookService.listBookSettingVO()); } /** * 查询首页点击榜单数据 */ @GetMapping("listClickRank") - public ResultBean> listClickRank() { - return ResultBean.ok(bookService.listClickRank()); + public RestResult> listClickRank() { + return RestResult.ok(bookService.listClickRank()); } /** * 查询首页新书榜单数据 */ @GetMapping("listNewRank") - public ResultBean> listNewRank() { - return ResultBean.ok(bookService.listNewRank()); + public RestResult> listNewRank() { + return RestResult.ok(bookService.listNewRank()); } /** * 查询首页更新榜单数据 */ @GetMapping("listUpdateRank") - public ResultBean> listUpdateRank() { - return ResultBean.ok(bookService.listUpdateRank()); + public RestResult> listUpdateRank() { + return RestResult.ok(bookService.listUpdateRank()); } /** * 查询小说分类列表 */ @GetMapping("listBookCategory") - public ResultBean> listBookCategory() { - return ResultBean.ok(bookService.listBookCategory()); + public RestResult> listBookCategory() { + return RestResult.ok(bookService.listBookCategory()); } /** * 分页搜索 */ @GetMapping("searchByPage") - public ResultBean searchByPage(BookSpVO bookSP, @RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "20") int pageSize) { - return ResultBean.ok(bookService.searchByPage(bookSP, page, pageSize)); + public RestResult searchByPage(BookSpVO bookSP, @RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "20") int pageSize) { + return RestResult.ok(bookService.searchByPage(bookSP, page, pageSize)); } /** * 查询小说详情信息 */ @GetMapping("queryBookDetail/{id}") - public ResultBean queryBookDetail(@PathVariable("id") Long id) { - return ResultBean.ok(bookService.queryBookDetail(id)); + public RestResult queryBookDetail(@PathVariable("id") Long id) { + return RestResult.ok(bookService.queryBookDetail(id)); } @@ -106,28 +106,28 @@ public class BookController extends BaseController { * 查询小说排行信息 */ @GetMapping("listRank") - public ResultBean> listRank(@RequestParam(value = "type", defaultValue = "0") Byte type, @RequestParam(value = "limit", defaultValue = "30") Integer limit) { - return ResultBean.ok(bookService.listRank(type, limit)); + public RestResult> listRank(@RequestParam(value = "type", defaultValue = "0") Byte type, @RequestParam(value = "limit", defaultValue = "30") Integer limit) { + return RestResult.ok(bookService.listRank(type, limit)); } /** * 增加点击次数 */ @PostMapping("addVisitCount") - public ResultBean addVisitCount(Long bookId) { + public RestResult addVisitCount(Long bookId) { if (enableMq == 1) { rabbitTemplate.convertAndSend("ADD-BOOK-VISIT-EXCHANGE", null, bookId); } else { bookService.addVisitCount(bookId, 1); } - return ResultBean.ok(); + return RestResult.ok(); } /** * 查询章节相关信息 */ @GetMapping("queryBookIndexAbout") - public ResultBean> queryBookIndexAbout(Long bookId, Long lastBookIndexId) { + public RestResult> queryBookIndexAbout(Long bookId, Long lastBookIndexId) { Map data = new HashMap<>(2); data.put("bookIndexCount", bookService.queryIndexCount(bookId)); BookIndex bookIndex = bookService.queryBookIndex(lastBookIndexId); @@ -136,15 +136,15 @@ public class BookController extends BaseController { lastBookContent = lastBookContent.substring(0, 42); } data.put("lastBookContent", lastBookContent); - return ResultBean.ok(data); + return RestResult.ok(data); } /** * 根据分类id查询同类推荐书籍 */ @GetMapping("listRecBookByCatId") - public ResultBean> listRecBookByCatId(Integer catId) { - return ResultBean.ok(bookService.listRecBookByCatId(catId)); + public RestResult> listRecBookByCatId(Integer catId) { + return RestResult.ok(bookService.listRecBookByCatId(catId)); } @@ -152,37 +152,37 @@ public class BookController extends BaseController { * 分页查询书籍评论列表 */ @GetMapping("listCommentByPage") - public ResultBean> listCommentByPage(@RequestParam("bookId") Long bookId, @RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize) { - return ResultBean.ok(bookService.listCommentByPage(null, bookId, page, pageSize)); + public RestResult> listCommentByPage(@RequestParam("bookId") Long bookId, @RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize) { + return RestResult.ok(bookService.listCommentByPage(null, bookId, page, pageSize)); } /** * 新增评价 */ @PostMapping("addBookComment") - public ResultBean addBookComment(BookComment comment, HttpServletRequest request) { + public RestResult addBookComment(BookComment comment, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } bookService.addBookComment(userDetails.getId(), comment); - return ResultBean.ok(); + return RestResult.ok(); } /** * 根据小说ID查询小说前十条最新更新目录集合 */ @GetMapping("queryNewIndexList") - public ResultBean> queryNewIndexList(Long bookId) { - return ResultBean.ok(bookService.queryIndexList(bookId, "index_num desc", 1, 10)); + public RestResult> queryNewIndexList(Long bookId) { + return RestResult.ok(bookService.queryIndexList(bookId, "index_num desc", 1, 10)); } /** * 目录页 */ @GetMapping("/queryIndexList") - public ResultBean> indexList(Long bookId, @RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize, @RequestParam(value = "orderBy", defaultValue = "index_num desc") String orderBy) { - return ResultBean.ok(new PageBean<>(bookService.queryIndexList(bookId, orderBy, page, pageSize))); + public RestResult> indexList(Long bookId, @RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize, @RequestParam(value = "orderBy", defaultValue = "index_num desc") String orderBy) { + return RestResult.ok(PageBuilder.build(bookService.queryIndexList(bookId, orderBy, page, pageSize))); } diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/CacheController.java b/novel-front/src/main/java/com/java2nb/novel/controller/CacheController.java index e22f4b6..e7aced8 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/CacheController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/CacheController.java @@ -1,12 +1,13 @@ package com.java2nb.novel.controller; -import com.java2nb.novel.core.bean.ResultBean; + 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.service.BookService; import com.java2nb.novel.service.FriendLinkService; import com.java2nb.novel.service.NewsService; +import io.github.xxyopen.model.resp.RestResult; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -40,9 +41,9 @@ public class CacheController { * @param type 缓存类型,1:首页书籍推荐,2:首页新闻,3:首页友情链接 * */ @GetMapping("refresh/{pass}/{type}") - public ResultBean refreshCache(@PathVariable("type") Byte type, @PathVariable("pass") String pass){ + public RestResult refreshCache(@PathVariable("type") Byte type, @PathVariable("pass") String pass){ if(!cacheManagerPass.equals(pass)){ - return ResultBean.fail(ResponseStatus.PASSWORD_ERROR); + return RestResult.fail(ResponseStatus.PASSWORD_ERROR); } switch (type){ case 1:{ @@ -69,7 +70,7 @@ public class CacheController { } - return ResultBean.ok(); + return RestResult.ok(); } diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java b/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java index 6cd9eb3..1cf83fa 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java @@ -1,13 +1,14 @@ package com.java2nb.novel.controller; -import com.java2nb.novel.core.bean.ResultBean; + 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.Constants; import com.java2nb.novel.core.utils.FileUtil; import com.java2nb.novel.core.utils.RandomValidateCodeUtil; -import com.java2nb.novel.core.utils.UUIDUtil; +import io.github.xxyopen.model.resp.RestResult; +import io.github.xxyopen.util.UUIDUtil; +import io.github.xxyopen.web.exception.BusinessException; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -19,9 +20,8 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.*; +import java.io.File; import java.util.Date; -import java.util.Objects; /** * @author 11797 @@ -64,7 +64,7 @@ public class FileController { @SneakyThrows @ResponseBody @PostMapping("/picUpload") - ResultBean upload(@RequestParam("file") MultipartFile file) { + RestResult upload(@RequestParam("file") MultipartFile file) { Date currentDate = new Date(); String savePath = Constants.LOCAL_PIC_PREFIX + DateUtils.formatDate(currentDate, "yyyy") + "/" + @@ -86,7 +86,7 @@ public class FileController { saveFile.delete(); throw new BusinessException(ResponseStatus.FILE_NOT_IMAGE); }; - return ResultBean.ok(savePath + "/" + saveFileName); + return RestResult.ok(savePath + "/" + saveFileName); } diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/FriendLinkController.java b/novel-front/src/main/java/com/java2nb/novel/controller/FriendLinkController.java index 0857e2b..b86f50c 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/FriendLinkController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/FriendLinkController.java @@ -1,12 +1,12 @@ package com.java2nb.novel.controller; -import com.java2nb.novel.core.bean.ResultBean; + import com.java2nb.novel.entity.FriendLink; import com.java2nb.novel.service.FriendLinkService; +import io.github.xxyopen.model.resp.RestResult; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -27,8 +27,8 @@ public class FriendLinkController { * 查询首页友情链接 * */ @GetMapping("listIndexLink") - public ResultBean> listIndexLink(){ - return ResultBean.ok(friendLinkService.listIndexLink()); + public RestResult> listIndexLink(){ + return RestResult.ok(friendLinkService.listIndexLink()); } diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/NewsController.java b/novel-front/src/main/java/com/java2nb/novel/controller/NewsController.java index 6eec326..2e97b0a 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/NewsController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/NewsController.java @@ -1,10 +1,10 @@ package com.java2nb.novel.controller; import com.github.pagehelper.PageInfo; -import com.java2nb.novel.core.bean.PageBean; -import com.java2nb.novel.core.bean.ResultBean; +import io.github.xxyopen.model.page.PageBean; import com.java2nb.novel.entity.News; import com.java2nb.novel.service.NewsService; +import io.github.xxyopen.model.resp.RestResult; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -26,25 +26,25 @@ public class NewsController { * 查询首页新闻 * */ @GetMapping("listIndexNews") - public ResultBean> listIndexNews(){ - return ResultBean.ok(newsService.listIndexNews()); + public RestResult> listIndexNews(){ + return RestResult.ok(newsService.listIndexNews()); } /** * 分页查询新闻列表 * */ @GetMapping("listByPage") - public ResultBean> listByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize){ - return ResultBean.ok(newsService.listByPage(page,pageSize)); + public RestResult> listByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize){ + return RestResult.ok(newsService.listByPage(page,pageSize)); } /** * 增加新闻阅读量 * */ @PostMapping("addReadCount") - public ResultBean addReadCount(@RequestParam(value = "newsId") Integer newsId){ + public RestResult addReadCount(@RequestParam(value = "newsId") Integer newsId){ newsService.addReadCount(newsId); - return ResultBean.ok(); + return RestResult.ok(); } diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java b/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java index 8ae40d4..0213f32 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java @@ -1,16 +1,17 @@ package com.java2nb.novel.controller; -import com.java2nb.novel.core.bean.ResultBean; + import com.java2nb.novel.core.bean.UserDetails; import com.java2nb.novel.core.cache.CacheService; import com.java2nb.novel.core.enums.ResponseStatus; import com.java2nb.novel.core.utils.RandomValidateCodeUtil; -import com.java2nb.novel.core.valid.AddGroup; -import com.java2nb.novel.core.valid.UpdateGroup; import com.java2nb.novel.entity.User; import com.java2nb.novel.entity.UserBuyRecord; import com.java2nb.novel.service.BookService; import com.java2nb.novel.service.UserService; +import io.github.xxyopen.model.resp.RestResult; +import io.github.xxyopen.web.valid.AddGroup; +import io.github.xxyopen.web.valid.UpdateGroup; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -41,7 +42,7 @@ public class UserController extends BaseController { * 登陆 */ @PostMapping("login") - public ResultBean> login(User user) { + public RestResult> login(User user) { //登陆 UserDetails userDetails = userService.login(user); @@ -49,7 +50,7 @@ public class UserController extends BaseController { Map data = new HashMap<>(1); data.put("token", jwtTokenUtil.generateToken(userDetails)); - return ResultBean.ok(data); + return RestResult.ok(data); } @@ -58,12 +59,12 @@ public class UserController extends BaseController { * 注册 */ @PostMapping("register") - public ResultBean register(@Validated({AddGroup.class}) User user, @RequestParam(value = "velCode", defaultValue = "") String velCode) { + public RestResult register(@Validated({AddGroup.class}) User user, @RequestParam(value = "velCode", defaultValue = "") String velCode) { //判断验证码是否正确 if (!velCode.equals(cacheService.get(RandomValidateCodeUtil.RANDOM_CODE_KEY))) { - return ResultBean.fail(ResponseStatus.VEL_CODE_ERROR); + return RestResult.fail(ResponseStatus.VEL_CODE_ERROR); } //注册 @@ -71,7 +72,7 @@ public class UserController extends BaseController { Map data = new HashMap<>(1); data.put("token", jwtTokenUtil.generateToken(userDetails)); - return ResultBean.ok(data); + return RestResult.ok(data); } @@ -81,7 +82,7 @@ public class UserController extends BaseController { * 刷新token */ @PostMapping("refreshToken") - public ResultBean refreshToken(HttpServletRequest request) { + public RestResult refreshToken(HttpServletRequest request) { String token = getToken(request); if (jwtTokenUtil.canRefresh(token)) { token = jwtTokenUtil.refreshToken(token); @@ -90,10 +91,10 @@ public class UserController extends BaseController { UserDetails userDetail = jwtTokenUtil.getUserDetailsFromToken(token); data.put("username", userDetail.getUsername()); data.put("nickName", userDetail.getNickName()); - return ResultBean.ok(data); + return RestResult.ok(data); } else { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } } @@ -102,131 +103,131 @@ public class UserController extends BaseController { * 查询小说是否已加入书架 */ @GetMapping("queryIsInShelf") - public ResultBean queryIsInShelf(Long bookId, HttpServletRequest request) { + public RestResult queryIsInShelf(Long bookId, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } - return ResultBean.ok(userService.queryIsInShelf(userDetails.getId(), bookId)); + return RestResult.ok(userService.queryIsInShelf(userDetails.getId(), bookId)); } /** * 加入书架 * */ @PostMapping("addToBookShelf") - public ResultBean addToBookShelf(Long bookId,Long preContentId, HttpServletRequest request) { + public RestResult addToBookShelf(Long bookId,Long preContentId, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } userService.addToBookShelf(userDetails.getId(),bookId,preContentId); - return ResultBean.ok(); + return RestResult.ok(); } /** * 移出书架 * */ @DeleteMapping("removeFromBookShelf/{bookId}") - public ResultBean removeFromBookShelf(@PathVariable("bookId") Long bookId, HttpServletRequest request) { + public RestResult removeFromBookShelf(@PathVariable("bookId") Long bookId, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } userService.removeFromBookShelf(userDetails.getId(),bookId); - return ResultBean.ok(); + return RestResult.ok(); } /** * 分页查询书架 * */ @GetMapping("listBookShelfByPage") - public ResultBean listBookShelfByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize,HttpServletRequest request) { + public RestResult listBookShelfByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize,HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } - return ResultBean.ok(userService.listBookShelfByPage(userDetails.getId(),page,pageSize)); + return RestResult.ok(userService.listBookShelfByPage(userDetails.getId(),page,pageSize)); } /** * 分页查询阅读记录 * */ @GetMapping("listReadHistoryByPage") - public ResultBean listReadHistoryByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize,HttpServletRequest request) { + public RestResult listReadHistoryByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize,HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } - return ResultBean.ok(userService.listReadHistoryByPage(userDetails.getId(),page,pageSize)); + return RestResult.ok(userService.listReadHistoryByPage(userDetails.getId(),page,pageSize)); } /** * 添加阅读记录 * */ @PostMapping("addReadHistory") - public ResultBean addReadHistory(Long bookId,Long preContentId, HttpServletRequest request) { + public RestResult addReadHistory(Long bookId,Long preContentId, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } userService.addReadHistory(userDetails.getId(),bookId,preContentId); - return ResultBean.ok(); + return RestResult.ok(); } /** * 添加反馈 * */ @PostMapping("addFeedBack") - public ResultBean addFeedBack(String content, HttpServletRequest request) { + public RestResult addFeedBack(String content, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } userService.addFeedBack(userDetails.getId(),content); - return ResultBean.ok(); + return RestResult.ok(); } /** * 分页查询我的反馈列表 * */ @GetMapping("listUserFeedBackByPage") - public ResultBean listUserFeedBackByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize, HttpServletRequest request){ + public RestResult listUserFeedBackByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize, HttpServletRequest request){ UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } - return ResultBean.ok(userService.listUserFeedBackByPage(userDetails.getId(),page,pageSize)); + return RestResult.ok(userService.listUserFeedBackByPage(userDetails.getId(),page,pageSize)); } /** * 查询个人信息 * */ @GetMapping("userInfo") - public ResultBean userInfo(HttpServletRequest request) { + public RestResult userInfo(HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } - return ResultBean.ok(userService.userInfo(userDetails.getId())); + return RestResult.ok(userService.userInfo(userDetails.getId())); } /** * 更新个人信息 * */ @PostMapping("updateUserInfo") - public ResultBean updateUserInfo(@Validated({UpdateGroup.class}) User user, HttpServletRequest request) { + public RestResult updateUserInfo(@Validated({UpdateGroup.class}) User user, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } userService.updateUserInfo(userDetails.getId(),user); if(user.getNickName() != null){ userDetails.setNickName(user.getNickName()); Map data = new HashMap<>(1); data.put("token", jwtTokenUtil.generateToken(userDetails)); - return ResultBean.ok(data); + return RestResult.ok(data); } - return ResultBean.ok(); + return RestResult.ok(); } @@ -234,28 +235,28 @@ public class UserController extends BaseController { * 更新密码 * */ @PostMapping("updatePassword") - public ResultBean updatePassword(String oldPassword,String newPassword1,String newPassword2,HttpServletRequest request) { + public RestResult updatePassword(String oldPassword,String newPassword1,String newPassword2,HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } if(!(StringUtils.isNotBlank(newPassword1) && newPassword1.equals(newPassword2))){ - ResultBean.fail(ResponseStatus.TWO_PASSWORD_DIFF); + RestResult.fail(ResponseStatus.TWO_PASSWORD_DIFF); } userService.updatePassword(userDetails.getId(),oldPassword,newPassword1); - return ResultBean.ok(); + return RestResult.ok(); } /** * 分页查询用户书评 * */ @GetMapping("listCommentByPage") - public ResultBean listCommentByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize,HttpServletRequest request) { + public RestResult listCommentByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "5") int pageSize,HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } - return ResultBean.ok(bookService.listCommentByPage(userDetails.getId(),null,page,pageSize)); + return RestResult.ok(bookService.listCommentByPage(userDetails.getId(),null,page,pageSize)); } @@ -263,14 +264,14 @@ public class UserController extends BaseController { * 购买小说章节 * */ @PostMapping("buyBookIndex") - public ResultBean buyBookIndex(UserBuyRecord buyRecord, HttpServletRequest request) { + public RestResult buyBookIndex(UserBuyRecord buyRecord, HttpServletRequest request) { UserDetails userDetails = getUserDetails(request); if (userDetails == null) { - return ResultBean.fail(ResponseStatus.NO_LOGIN); + return RestResult.fail(ResponseStatus.NO_LOGIN); } buyRecord.setBuyAmount(bookService.queryBookIndex(buyRecord.getBookIndexId()).getBookPrice()); userService.buyBookIndex(userDetails.getId(),buyRecord); - return ResultBean.ok(); + return RestResult.ok(); } diff --git a/novel-front/src/main/java/com/java2nb/novel/core/filter/NovelFilter.java b/novel-front/src/main/java/com/java2nb/novel/core/filter/NovelFilter.java index 0f01f58..88e3e6d 100644 --- a/novel-front/src/main/java/com/java2nb/novel/core/filter/NovelFilter.java +++ b/novel-front/src/main/java/com/java2nb/novel/core/filter/NovelFilter.java @@ -3,6 +3,8 @@ package com.java2nb.novel.core.filter; import com.java2nb.novel.core.cache.CacheKey; import com.java2nb.novel.core.cache.CacheService; import com.java2nb.novel.core.utils.*; +import io.github.xxyopen.util.UUIDUtil; +import io.github.xxyopen.web.util.SpringUtil; import javax.servlet.*; import javax.servlet.http.Cookie; diff --git a/novel-front/src/main/java/com/java2nb/novel/core/utils/ThreadLocalUtil.java b/novel-front/src/main/java/com/java2nb/novel/core/utils/ThreadLocalUtil.java index b830c6f..0cc9da8 100644 --- a/novel-front/src/main/java/com/java2nb/novel/core/utils/ThreadLocalUtil.java +++ b/novel-front/src/main/java/com/java2nb/novel/core/utils/ThreadLocalUtil.java @@ -2,6 +2,7 @@ package com.java2nb.novel.core.utils; import com.java2nb.novel.core.cache.CacheKey; import com.java2nb.novel.core.cache.CacheService; +import io.github.xxyopen.web.util.SpringUtil; /** * 模板操作工具类 diff --git a/novel-front/src/main/java/com/java2nb/novel/page/PageController.java b/novel-front/src/main/java/com/java2nb/novel/page/PageController.java index 3a54449..873624a 100644 --- a/novel-front/src/main/java/com/java2nb/novel/page/PageController.java +++ b/novel-front/src/main/java/com/java2nb/novel/page/PageController.java @@ -1,13 +1,13 @@ package com.java2nb.novel.page; import com.java2nb.novel.controller.BaseController; -import com.java2nb.novel.core.bean.PageBean; import com.java2nb.novel.core.bean.UserDetails; import com.java2nb.novel.core.utils.ThreadLocalUtil; import com.java2nb.novel.entity.*; import com.java2nb.novel.service.*; import com.java2nb.novel.vo.BookCommentVO; import com.java2nb.novel.vo.BookSettingVO; +import io.github.xxyopen.model.page.PageBean; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; diff --git a/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java b/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java index 3c5437c..3c42acd 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java @@ -1,7 +1,7 @@ package com.java2nb.novel.service; -import com.java2nb.novel.core.bean.PageBean; +import io.github.xxyopen.model.page.PageBean; import com.java2nb.novel.entity.Author; import com.java2nb.novel.entity.AuthorIncome; import com.java2nb.novel.entity.AuthorIncomeDetail; diff --git a/novel-front/src/main/java/com/java2nb/novel/service/BookService.java b/novel-front/src/main/java/com/java2nb/novel/service/BookService.java index 36b279e..7759811 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/BookService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/BookService.java @@ -1,7 +1,7 @@ package com.java2nb.novel.service; -import com.java2nb.novel.core.bean.PageBean; +import io.github.xxyopen.model.page.PageBean; import com.java2nb.novel.entity.*; import com.java2nb.novel.vo.BookCommentVO; import com.java2nb.novel.vo.BookSettingVO; diff --git a/novel-front/src/main/java/com/java2nb/novel/service/NewsService.java b/novel-front/src/main/java/com/java2nb/novel/service/NewsService.java index 719a0e5..496bfd3 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/NewsService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/NewsService.java @@ -1,7 +1,7 @@ package com.java2nb.novel.service; -import com.java2nb.novel.core.bean.PageBean; +import io.github.xxyopen.model.page.PageBean; import com.java2nb.novel.entity.News; import com.java2nb.novel.vo.NewsVO; diff --git a/novel-front/src/main/java/com/java2nb/novel/service/SearchService.java b/novel-front/src/main/java/com/java2nb/novel/service/SearchService.java index 52f1521..1454ab6 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/SearchService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/SearchService.java @@ -1,11 +1,8 @@ package com.java2nb.novel.service; -import com.github.pagehelper.PageInfo; -import com.java2nb.novel.core.bean.PageBean; import com.java2nb.novel.entity.Book; import com.java2nb.novel.vo.BookSpVO; -import com.java2nb.novel.vo.BookVO; import com.java2nb.novel.vo.EsBookVO; /** @@ -26,5 +23,5 @@ public interface SearchService { * @param pageSize 每页大小 * @return 分页信息 */ - PageBean searchBook(BookSpVO params, int page, int pageSize); + io.github.xxyopen.model.page.PageBean searchBook(BookSpVO params, int page, int pageSize); } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/UserService.java b/novel-front/src/main/java/com/java2nb/novel/service/UserService.java index 9826e6e..577954b 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/UserService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/UserService.java @@ -1,7 +1,7 @@ package com.java2nb.novel.service; -import com.java2nb.novel.core.bean.PageBean; +import io.github.xxyopen.model.page.PageBean; import com.java2nb.novel.core.bean.UserDetails; import com.java2nb.novel.entity.UserBuyRecord; import com.java2nb.novel.entity.UserFeedback; diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java index 5e8b31d..499e257 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java @@ -1,11 +1,12 @@ package com.java2nb.novel.service.impl; import com.github.pagehelper.PageHelper; -import com.java2nb.novel.core.bean.PageBean; +import io.github.xxyopen.model.page.PageBean; 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 io.github.xxyopen.model.page.builder.pagehelper.PageBuilder; +import io.github.xxyopen.web.exception.BusinessException; import com.java2nb.novel.entity.Author; import com.java2nb.novel.entity.AuthorIncome; import com.java2nb.novel.entity.AuthorIncomeDetail; @@ -173,7 +174,7 @@ public class AuthorServiceImpl implements AuthorService { @Override public PageBean listIncomeDailyByPage(int page, int pageSize, Long userId, Long bookId, Date startTime, Date endTime) { PageHelper.startPage(page, pageSize); - return new PageBean<>(authorIncomeDetailMapper.selectMany( + return PageBuilder.build(authorIncomeDetailMapper.selectMany( select(AuthorIncomeDetailDynamicSqlSupport.incomeDate, AuthorIncomeDetailDynamicSqlSupport.incomeAccount , AuthorIncomeDetailDynamicSqlSupport.incomeCount, AuthorIncomeDetailDynamicSqlSupport.incomeNumber) .from(AuthorIncomeDetailDynamicSqlSupport.authorIncomeDetail) @@ -190,7 +191,7 @@ public class AuthorServiceImpl implements AuthorService { @Override public PageBean listIncomeMonthByPage(int page, int pageSize, Long userId, Long bookId) { PageHelper.startPage(page, pageSize); - return new PageBean<>(authorIncomeMapper.selectMany(select(AuthorIncomeDynamicSqlSupport.incomeMonth + return PageBuilder.build(authorIncomeMapper.selectMany(select(AuthorIncomeDynamicSqlSupport.incomeMonth , AuthorIncomeDynamicSqlSupport.preTaxIncome , AuthorIncomeDynamicSqlSupport.afterTaxIncome , AuthorIncomeDynamicSqlSupport.payStatus diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java index f165675..056bda6 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java @@ -2,15 +2,12 @@ package com.java2nb.novel.service.impl; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; -import com.java2nb.novel.core.bean.PageBean; 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 com.java2nb.novel.core.exception.BusinessException; -import com.java2nb.novel.core.utils.BeanUtil; +import io.github.xxyopen.web.util.BeanUtil; import com.java2nb.novel.core.utils.Constants; -import com.java2nb.novel.core.utils.IdWorker; import com.java2nb.novel.core.utils.StringUtil; import com.java2nb.novel.entity.Book; import com.java2nb.novel.entity.*; @@ -23,6 +20,10 @@ 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; @@ -216,8 +217,7 @@ public class BookServiceImpl implements BookService { if (StringUtils.isNotBlank(params.getSort())) { OrderByHelper.orderBy(params.getSort() + " desc"); } - return new PageBean<>(bookMapper.searchByPage(params)); - + return PageBuilder.build(bookMapper.searchByPage(params)); } @@ -388,7 +388,7 @@ public class BookServiceImpl implements BookService { public PageBean listCommentByPage(Long userId, Long bookId, int page, int pageSize) { PageHelper.startPage(page, pageSize); OrderByHelper.orderBy("t1.create_time desc"); - return new PageBean<>(bookCommentMapper.listCommentByPage(userId, bookId)); + return PageBuilder.build(bookCommentMapper.listCommentByPage(userId, bookId)); } @Transactional(rollbackFor = Exception.class) @@ -428,7 +428,7 @@ public class BookServiceImpl implements BookService { } else { //作者不存在,先创建作者 Date currentDate = new Date(); - authorId = new IdWorker().nextId(); + authorId = IdWorker.INSTANCE.nextId(); BookAuthor bookAuthor = new BookAuthor(); bookAuthor.setId(authorId); bookAuthor.setPenName(authorName); @@ -505,7 +505,7 @@ public class BookServiceImpl implements BookService { .orderBy(BookDynamicSqlSupport.createTime.descending()) .build() .render(RenderingStrategies.MYBATIS3); - return new PageBean<>(bookMapper.selectMany(selectStatement)); + return PageBuilder.build(bookMapper.selectMany(selectStatement)); } @@ -548,7 +548,7 @@ public class BookServiceImpl implements BookService { //并不是更新自己的小说 return; } - Long lastIndexId = new IdWorker().nextId(); + Long lastIndexId = IdWorker.INSTANCE.nextId(); Date currentDate = new Date(); int wordCount = StringUtil.getStrValidWordCount(content); diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java index 7d5fce0..8d4ae55 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/DbBookContentServiceImpl.java @@ -7,14 +7,10 @@ import com.java2nb.novel.service.BookContentService; import lombok.RequiredArgsConstructor; import org.mybatis.dynamic.sql.render.RenderingStrategies; import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; -import java.util.List; - import static com.java2nb.novel.mapper.BookContentDynamicSqlSupport.bookContent; import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; -import static org.mybatis.dynamic.sql.SqlBuilder.update; import static org.mybatis.dynamic.sql.select.SelectDSL.select; diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/FriendLinkServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/FriendLinkServiceImpl.java index b065016..cea174d 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/FriendLinkServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/FriendLinkServiceImpl.java @@ -1,6 +1,6 @@ package com.java2nb.novel.service.impl; -import com.java2nb.novel.core.utils.BeanUtil; +import io.github.xxyopen.web.util.BeanUtil; import com.java2nb.novel.service.FriendLinkService; import com.java2nb.novel.core.cache.CacheKey; import com.java2nb.novel.core.cache.CacheService; diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/NewsServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/NewsServiceImpl.java index ea75678..ce4ba9c 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/NewsServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/NewsServiceImpl.java @@ -1,8 +1,8 @@ package com.java2nb.novel.service.impl; import com.github.pagehelper.PageHelper; -import com.java2nb.novel.core.bean.PageBean; -import com.java2nb.novel.core.utils.BeanUtil; +import io.github.xxyopen.model.page.PageBean; +import io.github.xxyopen.web.util.BeanUtil; import com.java2nb.novel.mapper.FrontNewsMapper; import com.java2nb.novel.service.NewsService; import com.java2nb.novel.core.cache.CacheKey; @@ -10,6 +10,7 @@ import com.java2nb.novel.core.cache.CacheService; import com.java2nb.novel.entity.News; import com.java2nb.novel.mapper.NewsMapper; import com.java2nb.novel.vo.NewsVO; +import io.github.xxyopen.model.page.builder.pagehelper.PageBuilder; import lombok.RequiredArgsConstructor; import org.mybatis.dynamic.sql.render.RenderingStrategies; import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; @@ -69,7 +70,7 @@ public class NewsServiceImpl implements NewsService { .build() .render(RenderingStrategies.MYBATIS3); List news = newsMapper.selectMany(selectStatement); - PageBean pageBean = new PageBean<>(news); + PageBean pageBean = PageBuilder.build(news); pageBean.setList(BeanUtil.copyList(news,NewsVO.class)); return pageBean; } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/SearchServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/SearchServiceImpl.java index b77e7a6..33611cf 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/SearchServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/SearchServiceImpl.java @@ -2,15 +2,13 @@ package com.java2nb.novel.service.impl; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.pagehelper.PageInfo; -import com.java2nb.novel.core.bean.PageBean; +import io.github.xxyopen.model.page.PageBean; import com.java2nb.novel.core.enums.ResponseStatus; -import com.java2nb.novel.core.exception.BusinessException; -import com.java2nb.novel.core.utils.StringUtil; +import io.github.xxyopen.util.StringUtil; +import io.github.xxyopen.web.exception.BusinessException; import com.java2nb.novel.entity.Book; import com.java2nb.novel.vo.BookSpVO; import com.java2nb.novel.service.SearchService; -import com.java2nb.novel.vo.BookVO; import com.java2nb.novel.vo.EsBookVO; import io.searchbox.client.JestClient; import io.searchbox.core.Count; @@ -200,8 +198,7 @@ public class SearchServiceImpl implements SearchService { } } } - - return new PageBean<>(page,pageSize,total.longValue(),bookList); + return new PageBean<>(page, pageSize, total.longValue(), bookList); } throw new BusinessException(ResponseStatus.ES_SEARCH_FAIL); } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/UserServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/UserServiceImpl.java index e3b971a..b4970b6 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/UserServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/UserServiceImpl.java @@ -1,20 +1,21 @@ package com.java2nb.novel.service.impl; import com.github.pagehelper.PageHelper; -import com.java2nb.novel.core.bean.PageBean; +import io.github.xxyopen.model.page.PageBean; import com.java2nb.novel.core.bean.UserDetails; -import com.java2nb.novel.core.utils.BeanUtil; import com.java2nb.novel.entity.*; import com.java2nb.novel.entity.User; import com.java2nb.novel.service.UserService; import com.java2nb.novel.core.enums.ResponseStatus; -import com.java2nb.novel.core.exception.BusinessException; +import io.github.xxyopen.model.page.builder.pagehelper.PageBuilder; +import io.github.xxyopen.util.IdWorker; +import io.github.xxyopen.util.MD5Util; +import io.github.xxyopen.web.exception.BusinessException; import com.java2nb.novel.mapper.*; import com.java2nb.novel.vo.BookReadHistoryVO; import com.java2nb.novel.vo.BookShelfVO; -import com.java2nb.novel.core.utils.IdWorker; -import com.java2nb.novel.core.utils.MD5Util; import com.java2nb.novel.vo.UserFeedbackVO; +import io.github.xxyopen.web.util.BeanUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.Charsets; @@ -73,7 +74,7 @@ public class UserServiceImpl implements UserService { User entity = new User(); BeanUtils.copyProperties(user,entity); //数据库生成注册记录 - Long id = new IdWorker().nextId(); + Long id = IdWorker.INSTANCE.nextId(); entity.setId(id); entity.setNickName(entity.getUsername()); Date currentDate = new Date(); @@ -150,7 +151,7 @@ public class UserServiceImpl implements UserService { @Override public PageBean listBookShelfByPage(Long userId, int page, int pageSize) { PageHelper.startPage(page, pageSize); - return new PageBean<>(userBookshelfMapper.listBookShelf(userId)); + return PageBuilder.build(userBookshelfMapper.listBookShelf(userId)); } @Transactional(rollbackFor = Exception.class) @@ -211,7 +212,7 @@ public class UserServiceImpl implements UserService { .build() .render(RenderingStrategies.MYBATIS3); List userFeedbacks = userFeedbackMapper.selectMany(selectStatement); - PageBean pageBean = new PageBean<>(userFeedbacks); + PageBean pageBean = PageBuilder.build(userFeedbacks); pageBean.setList(BeanUtil.copyList(userFeedbacks,UserFeedbackVO.class)); return pageBean; } @@ -229,7 +230,7 @@ public class UserServiceImpl implements UserService { @Override public PageBean listReadHistoryByPage(Long userId, int page, int pageSize) { PageHelper.startPage(page, pageSize); - return new PageBean<>(userReadHistoryMapper.listReadHistory(userId)); + return PageBuilder.build(userReadHistoryMapper.listReadHistory(userId)); } @Override diff --git a/novel-front/src/main/resources/application.yml b/novel-front/src/main/resources/application.yml index d919598..8ef3bd8 100644 --- a/novel-front/src/main/resources/application.yml +++ b/novel-front/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 8080 + port: 8083 spring: profiles: diff --git a/pom.xml b/pom.xml index 488c49b..5d0d04f 100644 --- a/pom.xml +++ b/pom.xml @@ -78,35 +78,33 @@ - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - + ali + https://maven.aliyun.com/repository/public + true + + + false - spring-milestones - Spring Milestones - https://repo.spring.io/milestone + oss + https://s01.oss.sonatype.org/content/groups/public/ + + true + - false + true - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - + ali-plugin + https://maven.aliyun.com/repository/public + true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone + false From c537f6fb20e60048bb07afb8f42eb7143c2e36b6 Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Sat, 11 Dec 2021 20:56:11 +0800 Subject: [PATCH 12/19] =?UTF-8?q?docs:=20maven=E4=BB=93=E5=BA=93=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5d0d04f..5ae7535 100644 --- a/pom.xml +++ b/pom.xml @@ -75,7 +75,15 @@ - + + + + + + + ali From b2eb6686e9f4264195d6d1826a599a129ebd4419 Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Sun, 12 Dec 2021 20:44:09 +0800 Subject: [PATCH 13/19] =?UTF-8?q?build:=20=E6=9B=B4=E6=96=B0xxyopen?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- novel-common/pom.xml | 6 +++--- .../java/com/java2nb/novel/FrontNovelApplication.java | 1 - pom.xml | 11 +---------- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/novel-common/pom.xml b/novel-common/pom.xml index 43ecae7..685736d 100644 --- a/novel-common/pom.xml +++ b/novel-common/pom.xml @@ -126,19 +126,19 @@ io.github.xxyopen xxy-model - 1.0.0-SNAPSHOT + ${xxyopen.version} io.github.xxyopen xxy-web - 1.0.0-SNAPSHOT + ${xxyopen.version} io.github.xxyopen xxy-util - 1.0.0-SNAPSHOT + ${xxyopen.version} diff --git a/novel-front/src/main/java/com/java2nb/novel/FrontNovelApplication.java b/novel-front/src/main/java/com/java2nb/novel/FrontNovelApplication.java index 3ace218..31aae17 100644 --- a/novel-front/src/main/java/com/java2nb/novel/FrontNovelApplication.java +++ b/novel-front/src/main/java/com/java2nb/novel/FrontNovelApplication.java @@ -1,7 +1,6 @@ package com.java2nb.novel; import com.github.tobato.fastdfs.FdfsClientConfig; -import io.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/pom.xml b/pom.xml index 5ae7535..7b2f35c 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,7 @@ 1.3.1 1.26.1-RELEASE 4.9.153.ALL + 1.0.0 @@ -95,16 +96,6 @@ false - - oss - https://s01.oss.sonatype.org/content/groups/public/ - - true - - - true - - From 78969f9fd1e5b21f1ccd43fe840e7370de4d7a80 Mon Sep 17 00:00:00 2001 From: xiaoyang Date: Fri, 17 Dec 2021 10:20:59 +0800 Subject: [PATCH 14/19] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8D=95?= =?UTF-8?q?=E6=9C=AC=E5=B0=8F=E8=AF=B4=E9=87=87=E9=9B=86=E5=8D=B3=E4=BD=BF?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E9=87=87=E9=9B=86=E5=88=B0=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E4=BB=8D=E7=84=B6=E6=A0=87=E8=AE=B0=E7=8A=B6=E6=80=81=E4=B8=BA?= =?UTF-8?q?=E9=87=87=E9=9B=86=E6=88=90=E5=8A=9F=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/java2nb/novel/core/crawl/CrawlParser.java | 5 +++-- .../com/java2nb/novel/service/impl/CrawlServiceImpl.java | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/novel-crawl/src/main/java/com/java2nb/novel/core/crawl/CrawlParser.java b/novel-crawl/src/main/java/com/java2nb/novel/core/crawl/CrawlParser.java index 85955cd..9ec4628 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/core/crawl/CrawlParser.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/core/crawl/CrawlParser.java @@ -139,7 +139,7 @@ public class CrawlParser { handler.handle(book); } - public static void parseBookIndexAndContent(String sourceBookId, Book book, RuleBean ruleBean, Map existBookIndexMap, CrawlBookChapterHandler handler) { + public static boolean parseBookIndexAndContent(String sourceBookId, Book book, RuleBean ruleBean, Map existBookIndexMap, CrawlBookChapterHandler handler) { Date currentDate = new Date(); @@ -275,7 +275,7 @@ public class CrawlParser { setBookContentList(contentList); }}); - return; + return true; } @@ -285,6 +285,7 @@ public class CrawlParser { setBookIndexList(new ArrayList<>(0)); setBookContentList(new ArrayList<>(0)); }}); + return false; } diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java index 2e95141..028f44b 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java @@ -302,15 +302,16 @@ public class CrawlServiceImpl implements CrawlService { book.setCrawlLastTime(new Date()); book.setId(IdWorker.INSTANCE.nextId()); //解析章节目录 - CrawlParser.parseBookIndexAndContent(bookId, book, ruleBean, new HashMap<>(0), chapter -> { + boolean parseIndexContentResult = CrawlParser.parseBookIndexAndContent(bookId, book, ruleBean, new HashMap<>(0), chapter -> { bookService.saveBookAndIndexAndContent(book, chapter.getBookIndexList(), chapter.getBookContentList()); }); + parseResult.set(parseIndexContentResult); } else { //只更新书籍的爬虫相关字段 bookService.updateCrawlProperties(existBook.getId(), sourceId, bookId); + parseResult.set(true); } - parseResult.set(true); }); return parseResult.get(); From 7cde6ebf61ffda4008acfabce08de31203f37e3e Mon Sep 17 00:00:00 2001 From: songanwei Date: Fri, 17 Dec 2021 16:33:45 +0800 Subject: [PATCH 15/19] =?UTF-8?q?feat(=E6=89=93=E5=8C=85=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=88=86=E5=8C=85):=20=E6=89=93=E5=8C=85=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=88=86=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- novel-admin/pom.xml | 91 +++++++++++++++++-- novel-admin/src/main/build/scripts/readme.txt | 8 ++ novel-admin/src/main/build/scripts/start.sh | 47 ++++++++++ novel-admin/src/main/build/scripts/stop.sh | 33 +++++++ .../src/main/build/scripts/windows-start.bat | 10 ++ .../src/main/resources/logback-spring.xml | 2 +- .../java/com/java2nb/novel/entity/News.java | 6 +- novel-crawl/pom.xml | 73 ++++++++++++++- novel-crawl/src/main/build/scripts/readme.txt | 8 ++ novel-crawl/src/main/build/scripts/start.sh | 47 ++++++++++ novel-crawl/src/main/build/scripts/stop.sh | 33 +++++++ .../src/main/build/scripts/windows-start.bat | 10 ++ .../src/main/resources/logback-boot.xml | 4 +- novel-front/pom.xml | 82 ++++++++++++++++- novel-front/src/main/build/scripts/readme.txt | 8 ++ novel-front/src/main/build/scripts/start.sh | 47 ++++++++++ novel-front/src/main/build/scripts/stop.sh | 33 +++++++ .../src/main/build/scripts/windows-start.bat | 10 ++ .../src/main/resources/logback-boot.xml | 4 +- 19 files changed, 540 insertions(+), 16 deletions(-) create mode 100644 novel-admin/src/main/build/scripts/readme.txt create mode 100644 novel-admin/src/main/build/scripts/start.sh create mode 100644 novel-admin/src/main/build/scripts/stop.sh create mode 100644 novel-admin/src/main/build/scripts/windows-start.bat create mode 100644 novel-crawl/src/main/build/scripts/readme.txt create mode 100644 novel-crawl/src/main/build/scripts/start.sh create mode 100644 novel-crawl/src/main/build/scripts/stop.sh create mode 100644 novel-crawl/src/main/build/scripts/windows-start.bat create mode 100644 novel-front/src/main/build/scripts/readme.txt create mode 100644 novel-front/src/main/build/scripts/start.sh create mode 100644 novel-front/src/main/build/scripts/stop.sh create mode 100644 novel-front/src/main/build/scripts/windows-start.bat diff --git a/novel-admin/pom.xml b/novel-admin/pom.xml index 0fed554..29d0b79 100644 --- a/novel-admin/pom.xml +++ b/novel-admin/pom.xml @@ -224,17 +224,17 @@ - + - - + –> org.springframework.boot spring-boot-maven-plugin + --> + + + + + org.springframework.boot + spring-boot-maven-plugin + + ZIP + + + non-exists + non-exists + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + package + + copy-dependencies + + + + target/lib + false + false + runtime + + + + + + maven-antrun-plugin + 1.8 + + + package + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/News.java b/novel-common/src/main/java/com/java2nb/novel/entity/News.java index c555349..437cfba 100644 --- a/novel-common/src/main/java/com/java2nb/novel/entity/News.java +++ b/novel-common/src/main/java/com/java2nb/novel/entity/News.java @@ -1,9 +1,11 @@ package com.java2nb.novel.entity; +import java.io.Serializable; import java.util.Date; import javax.annotation.Generated; -public class News { +public class News implements Serializable { + @Generated("org.mybatis.generator.api.MyBatisGenerator") private Long id; @@ -146,4 +148,4 @@ public class News { public void setContent(String content) { this.content = content == null ? null : content.trim(); } -} \ No newline at end of file +} diff --git a/novel-crawl/pom.xml b/novel-crawl/pom.xml index 10710b9..cb2047d 100644 --- a/novel-crawl/pom.xml +++ b/novel-crawl/pom.xml @@ -32,11 +32,82 @@ + org.springframework.boot spring-boot-maven-plugin + + ZIP + + + non-exists + non-exists + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + package + + copy-dependencies + + + + target/lib + false + false + runtime + + + + + + maven-antrun-plugin + 1.8 + + + package + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/novel-crawl/src/main/build/scripts/readme.txt b/novel-crawl/src/main/build/scripts/readme.txt new file mode 100644 index 0000000..a3bab7e --- /dev/null +++ b/novel-crawl/src/main/build/scripts/readme.txt @@ -0,0 +1,8 @@ +1:linux启动环境 +sh start.sh + +3:windows启动环境 +windows-start.bat + +3:linux停止应用 +sh stop.sh diff --git a/novel-crawl/src/main/build/scripts/start.sh b/novel-crawl/src/main/build/scripts/start.sh new file mode 100644 index 0000000..17f0acd --- /dev/null +++ b/novel-crawl/src/main/build/scripts/start.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +ENGINE=novel-crawl.jar +cd ../ + +#部署目路 +DEPLOY_DIR=`pwd` +#获取到当前目录的名称 +SERVER_NAME=`basename $DEPLOY_DIR` + +#应用进程 +PIDS=`ps -ef | grep java | grep "$ENGINE" |awk '{print $2}'` +#设置日志文件的输出目录 +LOGS_DIR=$DEPLOY_DIR/logs +if [ ! -d $LOGS_DIR ]; then + mkdir $LOGS_DIR +fi +#日志 +STDOUT_FILE=$LOGS_DIR/stdout.log +#JAVA 环境配置 +JAVA_OPTS=" -Djava.net.preferIPv4Stack=true -Dlog.home=$LOGS_DIR" + +JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:InitiatingHeapOccupancyPercent=50 -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCDateStamps -verbose:gc -XX:+PrintGCDetails -XX:+PrintHeapAtGC -Xloggc:$LOGS_DIR/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump.hprof " +#退出标志 +RETVAL="0" + +if [ -n "$PIDS" ]; then + echo "ERROR: The $SERVER_NAME already started!" + echo "PID: $PIDS" + exit $RETVAL +fi + +nohup java -jar $JAVA_OPTS $JAVA_MEM_OPTS -Dloader.path=conf,lib $ENGINE > $STDOUT_FILE 2>&1 & +COUNT=0 + while [ $COUNT -lt 1 ]; do + echo -e ".\c" + sleep 1 + COUNT=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l` + if [ $COUNT -gt 0 ]; then + break + fi + done + + echo "OK!" + PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'` + echo "PID: $PIDS" + echo "STDOUT: $STDOUT_FILE" diff --git a/novel-crawl/src/main/build/scripts/stop.sh b/novel-crawl/src/main/build/scripts/stop.sh new file mode 100644 index 0000000..6cf8aed --- /dev/null +++ b/novel-crawl/src/main/build/scripts/stop.sh @@ -0,0 +1,33 @@ +#!/bin/bash +SERVER_NAME=novel-crawl.jar + +#应用进程 +PIDS=`ps -ef | grep java | grep "$SERVER_NAME" |awk '{print $2}'` +if [ -z "$PIDS" ]; then + echo "ERROR: The $SERVER_NAME does not started!" + exit 1 + fi + + echo -e "Stopping the $SERVER_NAME ...\c" + for PID in $PIDS ; do + kill $PID > /dev/null 2>&1 + done + + COUNT=0 + while [ $COUNT -lt 1 ]; do + echo -e ".\c" + sleep 1 + COUNT=1 + for PID in $PIDS ; do + PID_EXIST=`ps -f -p $PID | grep java` + if [ -n "$PID_EXIST" ]; then + COUNT=0 + break + fi + done + done + + echo "OK!" + echo "PID: $PIDS" + PIDS="" + diff --git a/novel-crawl/src/main/build/scripts/windows-start.bat b/novel-crawl/src/main/build/scripts/windows-start.bat new file mode 100644 index 0000000..90cfdb9 --- /dev/null +++ b/novel-crawl/src/main/build/scripts/windows-start.bat @@ -0,0 +1,10 @@ +@echo off +setlocal enabledelayedexpansion +set JAVA=java + +set OPTS=-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC +set ENGINE=novel-crawl.jar +cd ../ +java -jar %OPTS% -Dloader.path=conf,lib %ENGINE% +pause + diff --git a/novel-crawl/src/main/resources/logback-boot.xml b/novel-crawl/src/main/resources/logback-boot.xml index 6be17f5..05c7c83 100644 --- a/novel-crawl/src/main/resources/logback-boot.xml +++ b/novel-crawl/src/main/resources/logback-boot.xml @@ -57,8 +57,8 @@ - + - \ No newline at end of file + diff --git a/novel-front/pom.xml b/novel-front/pom.xml index 66fa459..610c0e1 100644 --- a/novel-front/pom.xml +++ b/novel-front/pom.xml @@ -87,14 +87,92 @@ + + + + + + + + + org.springframework.boot spring-boot-maven-plugin + + ZIP + + + non-exists + non-exists + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + package + + copy-dependencies + + + + target/lib + false + false + runtime + + + + + + maven-antrun-plugin + 1.8 + + + package + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file + diff --git a/novel-front/src/main/build/scripts/readme.txt b/novel-front/src/main/build/scripts/readme.txt new file mode 100644 index 0000000..a3bab7e --- /dev/null +++ b/novel-front/src/main/build/scripts/readme.txt @@ -0,0 +1,8 @@ +1:linux启动环境 +sh start.sh + +3:windows启动环境 +windows-start.bat + +3:linux停止应用 +sh stop.sh diff --git a/novel-front/src/main/build/scripts/start.sh b/novel-front/src/main/build/scripts/start.sh new file mode 100644 index 0000000..58519df --- /dev/null +++ b/novel-front/src/main/build/scripts/start.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +ENGINE=novel-front.jar +cd ../ + +#部署目路 +DEPLOY_DIR=`pwd` +#获取到当前目录的名称 +SERVER_NAME=`basename $DEPLOY_DIR` + +#应用进程 +PIDS=`ps -ef | grep java | grep "$ENGINE" |awk '{print $2}'` +#设置日志文件的输出目录 +LOGS_DIR=$DEPLOY_DIR/logs +if [ ! -d $LOGS_DIR ]; then + mkdir $LOGS_DIR +fi +#日志 +STDOUT_FILE=$LOGS_DIR/stdout.log +#JAVA 环境配置 +JAVA_OPTS=" -Djava.net.preferIPv4Stack=true -Dlog.home=$LOGS_DIR" + +JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:InitiatingHeapOccupancyPercent=50 -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCDateStamps -verbose:gc -XX:+PrintGCDetails -XX:+PrintHeapAtGC -Xloggc:$LOGS_DIR/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump.hprof " +#退出标志 +RETVAL="0" + +if [ -n "$PIDS" ]; then + echo "ERROR: The $SERVER_NAME already started!" + echo "PID: $PIDS" + exit $RETVAL +fi + +nohup java -jar $JAVA_OPTS $JAVA_MEM_OPTS -Dloader.path=conf,lib $ENGINE > $STDOUT_FILE 2>&1 & +COUNT=0 + while [ $COUNT -lt 1 ]; do + echo -e ".\c" + sleep 1 + COUNT=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l` + if [ $COUNT -gt 0 ]; then + break + fi + done + + echo "OK!" + PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'` + echo "PID: $PIDS" + echo "STDOUT: $STDOUT_FILE" diff --git a/novel-front/src/main/build/scripts/stop.sh b/novel-front/src/main/build/scripts/stop.sh new file mode 100644 index 0000000..06b2e00 --- /dev/null +++ b/novel-front/src/main/build/scripts/stop.sh @@ -0,0 +1,33 @@ +#!/bin/bash +SERVER_NAME=novel-front.jar + +#应用进程 +PIDS=`ps -ef | grep java | grep "$SERVER_NAME" |awk '{print $2}'` +if [ -z "$PIDS" ]; then + echo "ERROR: The $SERVER_NAME does not started!" + exit 1 + fi + + echo -e "Stopping the $SERVER_NAME ...\c" + for PID in $PIDS ; do + kill $PID > /dev/null 2>&1 + done + + COUNT=0 + while [ $COUNT -lt 1 ]; do + echo -e ".\c" + sleep 1 + COUNT=1 + for PID in $PIDS ; do + PID_EXIST=`ps -f -p $PID | grep java` + if [ -n "$PID_EXIST" ]; then + COUNT=0 + break + fi + done + done + + echo "OK!" + echo "PID: $PIDS" + PIDS="" + diff --git a/novel-front/src/main/build/scripts/windows-start.bat b/novel-front/src/main/build/scripts/windows-start.bat new file mode 100644 index 0000000..162cfed --- /dev/null +++ b/novel-front/src/main/build/scripts/windows-start.bat @@ -0,0 +1,10 @@ +@echo off +setlocal enabledelayedexpansion +set JAVA=java + +set OPTS=-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC +set ENGINE=novel-front.jar +cd ../ +java -jar %OPTS% -Dloader.path=conf,lib %ENGINE% +pause + diff --git a/novel-front/src/main/resources/logback-boot.xml b/novel-front/src/main/resources/logback-boot.xml index bc78832..ccc3d13 100644 --- a/novel-front/src/main/resources/logback-boot.xml +++ b/novel-front/src/main/resources/logback-boot.xml @@ -57,8 +57,8 @@ - + - \ No newline at end of file + From b2c67c4f1500fe2ebc764fb72ce29312cf46b517 Mon Sep 17 00:00:00 2001 From: xiaoyang Date: Fri, 17 Dec 2021 19:53:21 +0800 Subject: [PATCH 16/19] =?UTF-8?q?build:=20=E4=BF=AE=E6=94=B9=E6=89=93?= =?UTF-8?q?=E5=8C=85=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- novel-crawl/pom.xml | 24 ++++++++++++++++++++++++ novel-front/pom.xml | 24 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/novel-crawl/pom.xml b/novel-crawl/pom.xml index 4bb265d..628e892 100644 --- a/novel-crawl/pom.xml +++ b/novel-crawl/pom.xml @@ -31,6 +31,29 @@ + + + org.apache.maven.plugins + maven-shade-plugin + + false + + + + package + + shade + + + + + ${project.groupId}:*:* + + + + + + org.springframework.boot @@ -62,6 +85,7 @@ false false runtime + ${project.groupId} diff --git a/novel-front/pom.xml b/novel-front/pom.xml index 547fbae..59a3eab 100644 --- a/novel-front/pom.xml +++ b/novel-front/pom.xml @@ -97,6 +97,29 @@ + + + org.apache.maven.plugins + maven-shade-plugin + + false + + + + package + + shade + + + + + ${project.groupId}:*:* + + + + + + org.springframework.boot @@ -128,6 +151,7 @@ false false runtime + ${project.groupId} From e7f702ece08c7d0d1fe6b20b89ec35b91ada7d2e Mon Sep 17 00:00:00 2001 From: xiaoyang Date: Thu, 23 Dec 2021 10:27:05 +0800 Subject: [PATCH 17/19] =?UTF-8?q?docs:=20=E5=BE=AE=E4=BF=A1=E7=BE=A4?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 7d4c9bd..3dff6b8 100644 --- a/README.md +++ b/README.md @@ -291,6 +291,10 @@ docker安装教程:[点击前往](https://my.oschina.net/java2nb/blog/4271989) [点击前往官网查看](https://xiongxyang.gitee.io/service.htm) +#### 微信交流群 + +微信群二维码会过期,所以每周在公众号更新一次,请关注公众号“**IT进阶**”回复关键词“**微信群**”获取。 + 问问题的三要素 1. 说明背景,使用了哪个模块,要做什么? From fecf03b3f54b52976a60792fecf3d92e0b121113 Mon Sep 17 00:00:00 2001 From: xiaoyang Date: Fri, 24 Dec 2021 11:35:59 +0800 Subject: [PATCH 18/19] =?UTF-8?q?fix:=20=E5=8D=87=E7=BA=A7mybatis=E7=89=88?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E5=A2=9E=E5=8A=A0Optional=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 7b2f35c..53ddc34 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ 1.8 true 8.0.11 - 1.3.2 + 2.1.4 1.4.0 1.1.4 1.2.5 @@ -109,4 +109,4 @@ - \ No newline at end of file + From 3a44d141494c0606614dabc7e8a1c0969015d1e2 Mon Sep 17 00:00:00 2001 From: songanwei Date: Fri, 24 Dec 2021 13:41:25 +0800 Subject: [PATCH 19/19] =?UTF-8?q?feat(=E6=96=B0=E5=A2=9E=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E8=A7=84=E5=88=99=E6=B5=8B=E8=AF=95=E8=A7=84=E5=88=99):=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=BC=96=E8=BE=91=E8=A7=84=E5=88=99=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java2nb/novel/core/cache/CacheKey.java | 6 +- .../novel/controller/CrawlController.java | 78 ++- .../core/config/SecurityConfiguration.java | 2 +- .../java2nb/novel/service/CrawlService.java | 14 +- .../novel/service/impl/CrawlServiceImpl.java | 39 +- .../templates/crawl/crawlSingleTask_add.html | 1 + .../templates/crawl/crawlSingleTask_list.html | 1 + .../templates/crawl/crawlSource_add.html | 1 + .../templates/crawl/crawlSource_list.html | 15 +- .../templates/crawl/crawlSource_test.html | 171 ++++++ .../templates/crawl/crawlSource_update.html | 522 ++++++++++++++++++ pom.xml | 4 +- 12 files changed, 842 insertions(+), 12 deletions(-) create mode 100644 novel-crawl/src/main/resources/templates/crawl/crawlSource_test.html create mode 100644 novel-crawl/src/main/resources/templates/crawl/crawlSource_update.html diff --git a/novel-common/src/main/java/com/java2nb/novel/core/cache/CacheKey.java b/novel-common/src/main/java/com/java2nb/novel/core/cache/CacheKey.java index 75a585a..750c53f 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/cache/CacheKey.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/cache/CacheKey.java @@ -65,4 +65,8 @@ public interface CacheKey { * 累积的小说点击量 * */ String BOOK_ADD_VISIT_COUNT = "bookAddVisitCount"; -} \ No newline at end of file + /** + * 测试爬虫规则缓存 + */ + String BOOK_TEST_PARSE = "testParse"; +} diff --git a/novel-crawl/src/main/java/com/java2nb/novel/controller/CrawlController.java b/novel-crawl/src/main/java/com/java2nb/novel/controller/CrawlController.java index 80c9c16..1c4cf42 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/controller/CrawlController.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/controller/CrawlController.java @@ -1,13 +1,26 @@ package com.java2nb.novel.controller; +import com.fasterxml.jackson.databind.ObjectMapper; import com.java2nb.novel.core.bean.PageBean; import com.java2nb.novel.core.bean.ResultBean; +import com.java2nb.novel.core.cache.CacheKey; +import com.java2nb.novel.core.cache.CacheService; +import com.java2nb.novel.core.crawl.CrawlParser; +import com.java2nb.novel.core.crawl.RuleBean; +import com.java2nb.novel.core.utils.HttpUtil; +import com.java2nb.novel.entity.BookIndex; import com.java2nb.novel.entity.CrawlSingleTask; import com.java2nb.novel.entity.CrawlSource; import com.java2nb.novel.service.CrawlService; +import com.java2nb.novel.utils.Constants; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * @author Administrator */ @@ -18,7 +31,7 @@ public class CrawlController { private final CrawlService crawlService; - + private final CacheService cacheService; /** * 新增爬虫源 * */ @@ -38,7 +51,70 @@ public class CrawlController { return ResultBean.ok(crawlService.listCrawlByPage(page,pageSize)); } + /** + * 获取爬虫源 + * */ + @GetMapping("getCrawlSource/{id}") + public ResultBean getCrawlSource(@PathVariable("id") Integer id){ + CrawlSource crawlSource= crawlService.getCrawlSource(id); + return ResultBean.ok(crawlSource); + } + + /** + * 测试规则 + * @param rule + * @param url + * @param isRefresh + * @return + */ + @PostMapping("testParse") + public ResultBean testParse(String rule,String url,String isRefresh){ + + Map resultMap=new HashMap<>(); + String html =null; + if(url.startsWith("https://")||url.startsWith("http://")){ + String refreshCache="1"; + if(!refreshCache.equals(isRefresh)) { + Object cache = cacheService.getObject(CacheKey.BOOK_TEST_PARSE + url); + if (cache == null) { + isRefresh="1"; + }else { + html = (String) cache; + } + } + if(refreshCache.equals(isRefresh)){ + html = HttpUtil.getByHttpClientWithChrome(url); + if (html != null) { + cacheService.setObject(CacheKey.BOOK_TEST_PARSE + url, html, 60 * 10); + }else{ + resultMap.put("msg","html is null"); + return ResultBean.ok(resultMap); + } + } + }else{ + resultMap.put("html","url is null"); + return ResultBean.ok(resultMap); + } + Pattern pattern = Pattern.compile(rule); + Matcher matcher = pattern.matcher(html); + boolean isFind = matcher.find(); + resultMap.put("是否匹配",isFind); + if(isFind){ + resultMap.put("匹配结果",matcher.group(1)); + } + // resultMap.put("url",url); + return ResultBean.ok(resultMap); + } + /** + * 修改爬虫源 + * */ + @PostMapping("updateCrawlSource") + public ResultBean updateCrawlSource(CrawlSource source){ + crawlService.updateCrawlSource(source); + return ResultBean.ok(); + + } /** * 开启或停止爬虫 * */ diff --git a/novel-crawl/src/main/java/com/java2nb/novel/core/config/SecurityConfiguration.java b/novel-crawl/src/main/java/com/java2nb/novel/core/config/SecurityConfiguration.java index 6b7dead..995705c 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/core/config/SecurityConfiguration.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/core/config/SecurityConfiguration.java @@ -50,7 +50,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http.csrf().disable()//禁用了 csrf 功能 .authorizeRequests()//限定签名成功的请求 - .antMatchers("/**").hasRole("ADMIN") + //.antMatchers("/**").hasRole("ADMIN") .anyRequest().permitAll()//其他没有限定的请求,允许访问 .and().anonymous()//对于没有配置权限的其他请求允许匿名访问 .and().formLogin()//使用 spring security 默认登录页面 diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/CrawlService.java b/novel-crawl/src/main/java/com/java2nb/novel/service/CrawlService.java index d8e9821..a3b2365 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/CrawlService.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/CrawlService.java @@ -1,6 +1,7 @@ package com.java2nb.novel.service; import com.java2nb.novel.core.bean.PageBean; +import com.java2nb.novel.core.bean.ResultBean; import com.java2nb.novel.core.crawl.RuleBean; import com.java2nb.novel.entity.CrawlSingleTask; import com.java2nb.novel.entity.CrawlSource; @@ -18,7 +19,11 @@ public interface CrawlService { * */ void addCrawlSource(CrawlSource source); - + /** + * 修改爬虫源 + * @param source + */ + void updateCrawlSource(CrawlSource source); /** * 爬虫源分页列表 * @param page 当前页码 @@ -106,4 +111,11 @@ public interface CrawlService { * @param status 采集状态 * */ void updateCrawlSingleTask(CrawlSingleTask task, Byte status); + + /** + * 获取采集规则详细 + * @param id + * @return + */ + CrawlSource getCrawlSource(Integer id); } diff --git a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java index c9492cc..0421f12 100644 --- a/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java +++ b/novel-crawl/src/main/java/com/java2nb/novel/service/impl/CrawlServiceImpl.java @@ -39,6 +39,7 @@ import java.util.regex.Pattern; import static com.java2nb.novel.core.utils.HttpUtil.getByHttpClientWithChrome; import static com.java2nb.novel.mapper.CrawlSourceDynamicSqlSupport.*; +import static com.java2nb.novel.mapper.CrawlSourceDynamicSqlSupport.id; import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; import static org.mybatis.dynamic.sql.select.SelectDSL.select; @@ -69,7 +70,24 @@ public class CrawlServiceImpl implements CrawlService { crawlSourceMapper.insertSelective(source); } - + @Override + public void updateCrawlSource(CrawlSource source) { + if(source.getId()!=null){ + Optional opt=crawlSourceMapper.selectByPrimaryKey(source.getId()); + if(opt.isPresent()) { + CrawlSource crawlSource =opt.get(); + if (crawlSource.getSourceStatus() == (byte) 1) { + //关闭 + openOrCloseCrawl(crawlSource.getId(),(byte)0); + } + Date currentDate = new Date(); + crawlSource.setUpdateTime(currentDate); + crawlSource.setCrawlRule(source.getCrawlRule()); + crawlSource.setSourceName(source.getSourceName()); + crawlSourceMapper.updateByPrimaryKey(crawlSource); + } + } + } @Override public PageBean listCrawlByPage(int page, int pageSize) { PageHelper.startPage(page, pageSize); @@ -138,12 +156,17 @@ public class CrawlServiceImpl implements CrawlService { @Override public CrawlSource queryCrawlSource(Integer sourceId) { - SelectStatementProvider render = select(CrawlSourceDynamicSqlSupport.sourceStatus, CrawlSourceDynamicSqlSupport.crawlRule) + + SelectStatementProvider render = select(id, sourceName, sourceStatus, createTime, updateTime,crawlRule) .from(crawlSource) .where(id, isEqualTo(sourceId)) .build() .render(RenderingStrategies.MYBATIS3); - return crawlSourceMapper.selectMany(render).get(0); + List list= crawlSourceMapper.selectMany(render); + if(list!=null&&list.size()>0){ + return list.get(0); + } + return null; } @Override @@ -205,6 +228,16 @@ public class CrawlServiceImpl implements CrawlService { } + @Override + public CrawlSource getCrawlSource(Integer id) { + Optional opt=crawlSourceMapper.selectByPrimaryKey(id); + if(opt.isPresent()) { + CrawlSource crawlSource =opt.get(); + return crawlSource; + } + return null; + } + /** * 解析分类列表 */ diff --git a/novel-crawl/src/main/resources/templates/crawl/crawlSingleTask_add.html b/novel-crawl/src/main/resources/templates/crawl/crawlSingleTask_add.html index b247301..f478835 100644 --- a/novel-crawl/src/main/resources/templates/crawl/crawlSingleTask_add.html +++ b/novel-crawl/src/main/resources/templates/crawl/crawlSingleTask_add.html @@ -30,6 +30,7 @@ diff --git a/novel-crawl/src/main/resources/templates/crawl/crawlSingleTask_list.html b/novel-crawl/src/main/resources/templates/crawl/crawlSingleTask_list.html index 786af82..a64b5d0 100644 --- a/novel-crawl/src/main/resources/templates/crawl/crawlSingleTask_list.html +++ b/novel-crawl/src/main/resources/templates/crawl/crawlSingleTask_list.html @@ -30,6 +30,7 @@ diff --git a/novel-crawl/src/main/resources/templates/crawl/crawlSource_add.html b/novel-crawl/src/main/resources/templates/crawl/crawlSource_add.html index 02833f4..7ee95d1 100644 --- a/novel-crawl/src/main/resources/templates/crawl/crawlSource_add.html +++ b/novel-crawl/src/main/resources/templates/crawl/crawlSource_add.html @@ -30,6 +30,7 @@ diff --git a/novel-crawl/src/main/resources/templates/crawl/crawlSource_list.html b/novel-crawl/src/main/resources/templates/crawl/crawlSource_list.html index d054411..1a7dc3f 100644 --- a/novel-crawl/src/main/resources/templates/crawl/crawlSource_list.html +++ b/novel-crawl/src/main/resources/templates/crawl/crawlSource_list.html @@ -29,6 +29,7 @@ @@ -38,7 +39,7 @@

爬虫源列表

- +
@@ -119,8 +120,8 @@ + + + + + diff --git a/novel-crawl/src/main/resources/templates/crawl/crawlSource_update.html b/novel-crawl/src/main/resources/templates/crawl/crawlSource_update.html new file mode 100644 index 0000000..7d2443a --- /dev/null +++ b/novel-crawl/src/main/resources/templates/crawl/crawlSource_update.html @@ -0,0 +1,522 @@ + + + + + + + 爬虫管理系统-小说精品屋 + + + + + + +
+ +
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+ + + +
+
+
+

爬虫源信息填写(示例均为顶点小说网:dingdiann.com)

+
    +
  • + 示例:新顶点小说网 +
  • + + 示例:http://m.xdingdiann.com/sort/{catId}/{page}.html ({catId}代表分类ID,{page}代表分页页码) +
  • + 示例:1 +
  • + 示例:2 +
  • + 示例:3 +
  • + 示例:4 +
  • + 示例:5 +
  • + 示例:6 +
  • + 示例:7 +
  • + 示例:href="/ddk(\d+)/" +
  • + value="(\d+)/\d+" +
  • + value="\d+/(\d+)" +
  • + http://m.xdingdiann.com/ddk{bookId} (bookId代表小说ID) +
  • + 示例:<p class="title">([^/]+)</p> +
  • + 示例:作者:([^/]+)< +
  • + 示例:<img src="([^>]+)"\s+onerror="this.src= +
  • + 可空,适用于图片路径为相对路径的源站,加上小说图片路径,则为完整的可访问的图片路径 +
  • + 示例:状态:([^/]+)</li> +
  • + 示例:连载 +
  • + 示例:完结 +
  • + 示例:<div\s+class="score">(\d+\.\d+)分</div> +
  • + 示例: +
  • + 示例:<p class="review"> +
  • + 示例:</p> +
  • +
  • + 示例:更新:(\d+-\d+-\d+\s\d+:\d+:\d+)</a> +
  • + 示例:yyyy-MM-dd HH:mm:ss +
  • + 示例:http://m.xdingdiann.com/ddk{bookId}/all.html (bookId代表小说ID) +
  • + 可空,适用于最新章节列表和全部章节列表在同一个页面的源站 +
  • + 示例:<a\s+style=""\s+href="/ddk\d+/(\d+)\.html">[^/]+</a> +
  • + 示例:<a\s+style=""\s+href="/ddk\d+/\d+\.html">([^/]+)</a> +
  • + 示例:http://m.xdingdiann.com/ddk{bookId}/{indexId}.html + (bookId代表小说ID,{indexId}代表目录ID) +
  • + 示例:id="content"> +
  • + 示例:<script> +
  • + +
  • +
+
+ +
+ +
+
+
+
+ + + + + + + + + diff --git a/pom.xml b/pom.xml index 4b46641..9561928 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ 1.8 true 8.0.11 - 1.3.2 + 2.1.4 1.4.0 1.1.4 1.2.5 @@ -112,4 +112,4 @@ - \ No newline at end of file +