From 5f7c29ce260bbc4833cb610e1a27848340b763b0 Mon Sep 17 00:00:00 2001
From: xxy <1179705413@qq.com>
Date: Fri, 15 Nov 2019 07:55:57 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 4 -
fiction_hourse.iml | 107 -
pom.xml | 113 -
.../xyz/zinglizingli/BookApplication.java | 34 -
.../books/constant/CacheKeyConstans.java | 10 -
.../books/mapper/BookContentMapper.java | 33 -
.../books/mapper/BookIndexMapper.java | 39 -
.../zinglizingli/books/mapper/BookMapper.java | 50 -
.../books/mapper/CategoryMapper.java | 31 -
.../books/mapper/ScreenBulletMapper.java | 31 -
.../zinglizingli/books/mapper/UserMapper.java | 31 -
.../books/mapper/UserRefBookMapper.java | 31 -
.../java/xyz/zinglizingli/books/po/Book.java | 149 -
.../zinglizingli/books/po/BookContent.java | 55 -
.../books/po/BookContentExample.java | 510 -
.../zinglizingli/books/po/BookExample.java | 851 --
.../xyz/zinglizingli/books/po/BookIndex.java | 45 -
.../books/po/BookIndexExample.java | 450 -
.../xyz/zinglizingli/books/po/Category.java | 53 -
.../books/po/CategoryExample.java | 530 -
.../zinglizingli/books/po/ScreenBullet.java | 45 -
.../books/po/ScreenBulletExample.java | 451 -
.../java/xyz/zinglizingli/books/po/User.java | 33 -
.../zinglizingli/books/po/UserExample.java | 400 -
.../zinglizingli/books/po/UserRefBook.java | 33 -
.../books/po/UserRefBookExample.java | 380 -
.../books/service/BookService.java | 609 --
.../books/service/MailService.java | 113 -
.../books/service/UserService.java | 86 -
.../zinglizingli/books/util/ExcutorUtils.java | 20 -
.../xyz/zinglizingli/books/util/MD5Util.java | 39 -
.../books/util/RandomValueUtil.java | 125 -
.../zinglizingli/books/util/UUIDUtils.java | 93 -
.../xyz/zinglizingli/books/vo/BookVO.java | 16 -
.../books/web/ApiBookController.java | 188 -
.../books/web/BookController.java | 308 -
.../books/web/UserController.java | 152 -
.../common/cache/CommonCacheUtil.java | 56 -
.../common/cache/impl/EHCacheUtil.java | 150 -
.../common/config/ErrorConfig.java | 23 -
.../common/config/FilterConfig.java | 18 -
.../common/config/IndexRecBooksConfig.java | 33 -
.../common/filter/SearchFilter.java | 654 --
.../common/schedule/CrawlBooksSchedule.java | 800 --
.../common/schedule/SendEmaillSchedule.java | 56 -
.../common/schedule/SendUrlSchedule.java | 84 -
.../common/schedule/SendWeiboSchedule.java | 497 -
.../common/utils/ContentFactory.java | 65 -
.../zinglizingli/common/utils/NumberUtil.java | 117 -
.../common/utils/RestTemplateUtil.java | 30 -
.../zinglizingli/common/utils/SpringUtil.java | 54 -
.../common/web/IndexController.java | 64 -
src/main/resources/application.yml | 89 -
src/main/resources/banner.txt | 6 -
src/main/resources/ehcache.xml | 30 -
src/main/resources/logback-boot.xml | 62 -
.../resources/mybatis/generatorConfig.xml | 50 -
.../mybatis/mapping/BookContentMapper.xml | 228 -
.../mybatis/mapping/BookIndexMapper.xml | 223 -
.../resources/mybatis/mapping/BookMapper.xml | 391 -
.../mybatis/mapping/CategoryMapper.xml | 211 -
.../mybatis/mapping/ScreenBulletMapper.xml | 196 -
.../resources/mybatis/mapping/UserMapper.xml | 181 -
.../mybatis/mapping/UserRefBookMapper.xml | 181 -
src/main/resources/static/HotBook.apk | Bin 184572 -> 0 bytes
src/main/resources/static/IMG_1470.JPG | Bin 57381 -> 0 bytes
.../static/baidu_verify_ANtJi2eSPQ.html | 1 -
.../static/baidu_verify_Ep8xaWQJAI.html | 1 -
.../static/baidu_verify_L6sR9GjEtg.html | 1 -
src/main/resources/static/book_content.html | 90 -
src/main/resources/static/book_detail.html | 92 -
src/main/resources/static/book_index.html | 88 -
src/main/resources/static/book_search.html | 313 -
src/main/resources/static/favicon.ico | Bin 2836 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.001.png | Bin 22836 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.002.png | Bin 80793 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.003.png | Bin 84846 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.004.png | Bin 68238 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.005.png | Bin 50420 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.006.png | Bin 64763 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.007.png | Bin 56468 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.008.png | Bin 63302 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.009.png | Bin 56456 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.010.png | Bin 50260 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.011.png | Bin 55542 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.012.png | Bin 69275 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.013.png | Bin 78062 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.014.png | Bin 49810 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.015.png | Bin 47290 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.016.png | Bin 11619 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.017.png | Bin 449951 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.018.png | Bin 39895 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.019.png | Bin 60420 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.020.png | Bin 24720 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.021.png | Bin 32257 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.022.png | Bin 1190 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.023.png | Bin 42055 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.024.png | Bin 50116 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.025.png | Bin 19153 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.026.png | Bin 69717 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.027.png | Bin 12441 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.028.png | Bin 42079 -> 0 bytes
...4a540e-1759-4268-90fa-7fb652c3604a.030.png | Bin 71672 -> 0 bytes
src/main/resources/static/html/note_1.html | 270 -
src/main/resources/static/html/note_2.html | 280 -
src/main/resources/static/html/note_3.html | 243 -
src/main/resources/static/html/note_4.html | 2019 ----
src/main/resources/static/index.html | 376 -
src/main/resources/static/js/common.js | 36 -
src/main/resources/static/js/jquery-1.9.1.js | 9597 -----------------
src/main/resources/static/js/read.js | 197 -
src/main/resources/static/js/wap_collect.js | 107 -
src/main/resources/static/layui/css/layui.css | 5018 ---------
.../static/layui/css/layui.mobile.css | 2 -
.../static/layui/css/modules/code.css | 2 -
.../css/modules/laydate/default/laydate.css | 2 -
.../css/modules/layer/default/icon-ext.png | Bin 5911 -> 0 bytes
.../layui/css/modules/layer/default/icon.png | Bin 11493 -> 0 bytes
.../layui/css/modules/layer/default/layer.css | 2 -
.../css/modules/layer/default/loading-0.gif | Bin 5793 -> 0 bytes
.../css/modules/layer/default/loading-1.gif | Bin 701 -> 0 bytes
.../css/modules/layer/default/loading-2.gif | Bin 1787 -> 0 bytes
.../layui/css/modules/layim/html/chatlog.html | 96 -
.../layui/css/modules/layim/html/find.html | 38 -
.../layui/css/modules/layim/html/getmsg.json | 87 -
.../layui/css/modules/layim/html/msgbox.html | 208 -
.../static/layui/css/modules/layim/layim.css | 2 -
.../layui/css/modules/layim/mobile/layim.css | 2 -
.../static/layui/css/modules/layim/skin/1.jpg | Bin 18386 -> 0 bytes
.../static/layui/css/modules/layim/skin/2.jpg | Bin 11883 -> 0 bytes
.../static/layui/css/modules/layim/skin/3.jpg | Bin 18610 -> 0 bytes
.../static/layui/css/modules/layim/skin/4.jpg | Bin 39279 -> 0 bytes
.../static/layui/css/modules/layim/skin/5.jpg | Bin 33379 -> 0 bytes
.../layui/css/modules/layim/skin/logo.jpg | Bin 3284 -> 0 bytes
.../layui/css/modules/layim/voice/default.mp3 | Bin 9341 -> 0 bytes
.../resources/static/layui/font/iconfont.eot | Bin 40844 -> 0 bytes
.../resources/static/layui/font/iconfont.svg | 473 -
.../resources/static/layui/font/iconfont.ttf | Bin 40668 -> 0 bytes
.../resources/static/layui/font/iconfont.woff | Bin 26744 -> 0 bytes
.../resources/static/layui/images/face/0.gif | Bin 2689 -> 0 bytes
.../resources/static/layui/images/face/1.gif | Bin 5514 -> 0 bytes
.../resources/static/layui/images/face/10.gif | Bin 2797 -> 0 bytes
.../resources/static/layui/images/face/11.gif | Bin 4121 -> 0 bytes
.../resources/static/layui/images/face/12.gif | Bin 3361 -> 0 bytes
.../resources/static/layui/images/face/13.gif | Bin 7425 -> 0 bytes
.../resources/static/layui/images/face/14.gif | Bin 2375 -> 0 bytes
.../resources/static/layui/images/face/15.gif | Bin 1793 -> 0 bytes
.../resources/static/layui/images/face/16.gif | Bin 6721 -> 0 bytes
.../resources/static/layui/images/face/17.gif | Bin 4439 -> 0 bytes
.../resources/static/layui/images/face/18.gif | Bin 3017 -> 0 bytes
.../resources/static/layui/images/face/19.gif | Bin 3040 -> 0 bytes
.../resources/static/layui/images/face/2.gif | Bin 3222 -> 0 bytes
.../resources/static/layui/images/face/20.gif | Bin 5144 -> 0 bytes
.../resources/static/layui/images/face/21.gif | Bin 5191 -> 0 bytes
.../resources/static/layui/images/face/22.gif | Bin 9823 -> 0 bytes
.../resources/static/layui/images/face/23.gif | Bin 3792 -> 0 bytes
.../resources/static/layui/images/face/24.gif | Bin 8096 -> 0 bytes
.../resources/static/layui/images/face/25.gif | Bin 3127 -> 0 bytes
.../resources/static/layui/images/face/26.gif | Bin 3291 -> 0 bytes
.../resources/static/layui/images/face/27.gif | Bin 4377 -> 0 bytes
.../resources/static/layui/images/face/28.gif | Bin 2793 -> 0 bytes
.../resources/static/layui/images/face/29.gif | Bin 4854 -> 0 bytes
.../resources/static/layui/images/face/3.gif | Bin 4017 -> 0 bytes
.../resources/static/layui/images/face/30.gif | Bin 2555 -> 0 bytes
.../resources/static/layui/images/face/31.gif | Bin 2002 -> 0 bytes
.../resources/static/layui/images/face/32.gif | Bin 3481 -> 0 bytes
.../resources/static/layui/images/face/33.gif | Bin 2454 -> 0 bytes
.../resources/static/layui/images/face/34.gif | Bin 3700 -> 0 bytes
.../resources/static/layui/images/face/35.gif | Bin 1800 -> 0 bytes
.../resources/static/layui/images/face/36.gif | Bin 2331 -> 0 bytes
.../resources/static/layui/images/face/37.gif | Bin 1513 -> 0 bytes
.../resources/static/layui/images/face/38.gif | Bin 3615 -> 0 bytes
.../resources/static/layui/images/face/39.gif | Bin 6495 -> 0 bytes
.../resources/static/layui/images/face/4.gif | Bin 5689 -> 0 bytes
.../resources/static/layui/images/face/40.gif | Bin 3154 -> 0 bytes
.../resources/static/layui/images/face/41.gif | Bin 3644 -> 0 bytes
.../resources/static/layui/images/face/42.gif | Bin 5305 -> 0 bytes
.../resources/static/layui/images/face/43.gif | Bin 2674 -> 0 bytes
.../resources/static/layui/images/face/44.gif | Bin 4126 -> 0 bytes
.../resources/static/layui/images/face/45.gif | Bin 3417 -> 0 bytes
.../resources/static/layui/images/face/46.gif | Bin 3007 -> 0 bytes
.../resources/static/layui/images/face/47.gif | Bin 2333 -> 0 bytes
.../resources/static/layui/images/face/48.gif | Bin 2689 -> 0 bytes
.../resources/static/layui/images/face/49.gif | Bin 2315 -> 0 bytes
.../resources/static/layui/images/face/5.gif | Bin 4567 -> 0 bytes
.../resources/static/layui/images/face/50.gif | Bin 5866 -> 0 bytes
.../resources/static/layui/images/face/51.gif | Bin 2785 -> 0 bytes
.../resources/static/layui/images/face/52.gif | Bin 777 -> 0 bytes
.../resources/static/layui/images/face/53.gif | Bin 2127 -> 0 bytes
.../resources/static/layui/images/face/54.gif | Bin 2196 -> 0 bytes
.../resources/static/layui/images/face/55.gif | Bin 1971 -> 0 bytes
.../resources/static/layui/images/face/56.gif | Bin 2034 -> 0 bytes
.../resources/static/layui/images/face/57.gif | Bin 2705 -> 0 bytes
.../resources/static/layui/images/face/58.gif | Bin 2258 -> 0 bytes
.../resources/static/layui/images/face/59.gif | Bin 10311 -> 0 bytes
.../resources/static/layui/images/face/6.gif | Bin 2213 -> 0 bytes
.../resources/static/layui/images/face/60.gif | Bin 3245 -> 0 bytes
.../resources/static/layui/images/face/61.gif | Bin 2495 -> 0 bytes
.../resources/static/layui/images/face/62.gif | Bin 2017 -> 0 bytes
.../resources/static/layui/images/face/63.gif | Bin 5871 -> 0 bytes
.../resources/static/layui/images/face/64.gif | Bin 6448 -> 0 bytes
.../resources/static/layui/images/face/65.gif | Bin 3576 -> 0 bytes
.../resources/static/layui/images/face/66.gif | Bin 3029 -> 0 bytes
.../resources/static/layui/images/face/67.gif | Bin 2701 -> 0 bytes
.../resources/static/layui/images/face/68.gif | Bin 1424 -> 0 bytes
.../resources/static/layui/images/face/69.gif | Bin 2431 -> 0 bytes
.../resources/static/layui/images/face/7.gif | Bin 3398 -> 0 bytes
.../resources/static/layui/images/face/70.gif | Bin 4590 -> 0 bytes
.../resources/static/layui/images/face/71.gif | Bin 5304 -> 0 bytes
.../resources/static/layui/images/face/8.gif | Bin 4050 -> 0 bytes
.../resources/static/layui/images/face/9.gif | Bin 4221 -> 0 bytes
.../static/layui/lay/modules/carousel.js | 2 -
.../static/layui/lay/modules/code.js | 2 -
.../static/layui/lay/modules/colorpicker.js | 2 -
.../static/layui/lay/modules/element.js | 2 -
.../static/layui/lay/modules/flow.js | 2 -
.../static/layui/lay/modules/form.js | 2 -
.../static/layui/lay/modules/jquery.js | 5 -
.../static/layui/lay/modules/laydate.js | 2 -
.../static/layui/lay/modules/layedit.js | 2 -
.../static/layui/lay/modules/layer.js | 2 -
.../static/layui/lay/modules/layim.js | 3 -
.../static/layui/lay/modules/laypage.js | 95 -
.../static/layui/lay/modules/laytpl.js | 2 -
.../static/layui/lay/modules/mobile.js | 2 -
.../static/layui/lay/modules/rate.js | 2 -
.../static/layui/lay/modules/slider.js | 2 -
.../static/layui/lay/modules/table.js | 2 -
.../static/layui/lay/modules/tree.js | 2 -
.../static/layui/lay/modules/upload.js | 2 -
.../static/layui/lay/modules/util.js | 2 -
src/main/resources/static/layui/layui.all.js | 5 -
src/main/resources/static/layui/layui.js | 2 -
src/main/resources/static/mang.html | 13 -
src/main/resources/static/mang.png | Bin 61774 -> 0 bytes
.../static/shenma-site-verification.txt | 1 -
.../static/shenma-site-verification2.txt | 1 -
src/main/resources/static/static/23446.jpg | Bin 38164 -> 0 bytes
src/main/resources/static/static/4868.jpg | Bin 29383 -> 0 bytes
src/main/resources/static/static/5082.jpg | Bin 22995 -> 0 bytes
.../851bd749efa54b8a8445b03108722163.jpg | Bin 9385 -> 0 bytes
...U770P4T8D8933761F19930DT20190821203252.jpg | Bin 9110 -> 0 bytes
...U770P4T8D8933772F19930DT20190821204700.jpg | Bin 16783 -> 0 bytes
...U770P4T8D8933775F19930DT20190821204952.jpg | Bin 14496 -> 0 bytes
...U770P4T8D8933777F19930DT20190821205124.jpg | Bin 9341 -> 0 bytes
...U849P4T8D8933738F19930DT20190821200104.jpg | Bin 9843 -> 0 bytes
src/main/resources/static/static/core.php | 1 -
.../resources/static/static/icon-backtop.gif | Bin 812 -> 0 bytes
src/main/resources/static/static/index.css | 176 -
src/main/resources/static/static/logo.png | Bin 82189 -> 0 bytes
.../static/static/page/book_detail.html | 0
.../resources/static/static/sl_104147940.jpg | Bin 13240 -> 0 bytes
.../resources/static/static/sl_104148030.jpg | Bin 11706 -> 0 bytes
.../resources/static/static/sl_104148150.jpg | Bin 10424 -> 0 bytes
.../resources/static/static/sl_104152260.jpg | Bin 15277 -> 0 bytes
.../resources/static/static/sl_104153130.jpg | Bin 9753 -> 0 bytes
.../resources/static/static/sl_104155330.jpg | Bin 11389 -> 0 bytes
.../resources/static/static/sl_104155520.JPG | Bin 12305 -> 0 bytes
.../resources/static/static/sl_104156600.JPG | Bin 10910 -> 0 bytes
.../resources/static/static/sl_104157470.jpg | Bin 14975 -> 0 bytes
.../resources/static/static/sl_104157670.jpg | Bin 8903 -> 0 bytes
.../resources/static/static/sl_104158410.jpg | Bin 12860 -> 0 bytes
...smimg_8992d763a682448aa74347c634da3d94.jpg | Bin 14956 -> 0 bytes
...smimg_d640709a27df412d82b084b64677b115.jpg | Bin 11364 -> 0 bytes
...smimg_e5dd6053d3344ea49bd7e6df022b969a.jpg | Bin 16297 -> 0 bytes
src/main/resources/static/static/z_stat.php | 23 -
.../templates/books/book_content.html | 493 -
.../templates/books/book_detail.html | 379 -
.../resources/templates/books/book_index.html | 103 -
.../templates/books/book_search.html | 260 -
src/main/resources/templates/books/index.html | 283 -
.../templates/books/soft_book_search.html | 313 -
src/main/resources/templates/common/css.html | 3 -
.../resources/templates/common/footer.html | 18 -
src/main/resources/templates/common/js.html | 3 -
.../templates/common/soft_footer.html | 19 -
src/main/resources/templates/index.html | 489 -
src/main/resources/templates/user/login.html | 137 -
.../common/SearchApplicationTests.java | 16 -
279 files changed, 33315 deletions(-)
delete mode 100644 .gitignore
delete mode 100644 fiction_hourse.iml
delete mode 100644 pom.xml
delete mode 100644 src/main/java/xyz/zinglizingli/BookApplication.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/constant/CacheKeyConstans.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/mapper/BookContentMapper.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/mapper/BookIndexMapper.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/mapper/BookMapper.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/mapper/CategoryMapper.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/mapper/ScreenBulletMapper.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/mapper/UserMapper.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/mapper/UserRefBookMapper.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/Book.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/BookContent.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/BookContentExample.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/BookExample.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/BookIndex.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/BookIndexExample.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/Category.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/CategoryExample.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/ScreenBullet.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/ScreenBulletExample.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/User.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/UserExample.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/UserRefBook.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/po/UserRefBookExample.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/service/BookService.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/service/MailService.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/service/UserService.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/util/ExcutorUtils.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/util/MD5Util.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/util/RandomValueUtil.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/util/UUIDUtils.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/vo/BookVO.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/web/ApiBookController.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/web/BookController.java
delete mode 100644 src/main/java/xyz/zinglizingli/books/web/UserController.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/cache/CommonCacheUtil.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/cache/impl/EHCacheUtil.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/config/ErrorConfig.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/config/FilterConfig.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/config/IndexRecBooksConfig.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/filter/SearchFilter.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/schedule/CrawlBooksSchedule.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/schedule/SendEmaillSchedule.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/schedule/SendUrlSchedule.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/schedule/SendWeiboSchedule.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/utils/ContentFactory.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/utils/NumberUtil.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/utils/RestTemplateUtil.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/utils/SpringUtil.java
delete mode 100644 src/main/java/xyz/zinglizingli/common/web/IndexController.java
delete mode 100644 src/main/resources/application.yml
delete mode 100644 src/main/resources/banner.txt
delete mode 100644 src/main/resources/ehcache.xml
delete mode 100644 src/main/resources/logback-boot.xml
delete mode 100644 src/main/resources/mybatis/generatorConfig.xml
delete mode 100644 src/main/resources/mybatis/mapping/BookContentMapper.xml
delete mode 100644 src/main/resources/mybatis/mapping/BookIndexMapper.xml
delete mode 100644 src/main/resources/mybatis/mapping/BookMapper.xml
delete mode 100644 src/main/resources/mybatis/mapping/CategoryMapper.xml
delete mode 100644 src/main/resources/mybatis/mapping/ScreenBulletMapper.xml
delete mode 100644 src/main/resources/mybatis/mapping/UserMapper.xml
delete mode 100644 src/main/resources/mybatis/mapping/UserRefBookMapper.xml
delete mode 100644 src/main/resources/static/HotBook.apk
delete mode 100644 src/main/resources/static/IMG_1470.JPG
delete mode 100644 src/main/resources/static/baidu_verify_ANtJi2eSPQ.html
delete mode 100644 src/main/resources/static/baidu_verify_Ep8xaWQJAI.html
delete mode 100644 src/main/resources/static/baidu_verify_L6sR9GjEtg.html
delete mode 100644 src/main/resources/static/book_content.html
delete mode 100644 src/main/resources/static/book_detail.html
delete mode 100644 src/main/resources/static/book_index.html
delete mode 100644 src/main/resources/static/book_search.html
delete mode 100644 src/main/resources/static/favicon.ico
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.001.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.002.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.003.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.004.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.005.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.006.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.007.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.008.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.009.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.010.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.011.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.012.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.013.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.014.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.015.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.016.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.017.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.018.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.019.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.020.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.021.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.022.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.023.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.024.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.025.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.026.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.027.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.028.png
delete mode 100644 src/main/resources/static/html/9a4a540e-1759-4268-90fa-7fb652c3604a.030.png
delete mode 100644 src/main/resources/static/html/note_1.html
delete mode 100644 src/main/resources/static/html/note_2.html
delete mode 100644 src/main/resources/static/html/note_3.html
delete mode 100644 src/main/resources/static/html/note_4.html
delete mode 100644 src/main/resources/static/index.html
delete mode 100644 src/main/resources/static/js/common.js
delete mode 100644 src/main/resources/static/js/jquery-1.9.1.js
delete mode 100644 src/main/resources/static/js/read.js
delete mode 100644 src/main/resources/static/js/wap_collect.js
delete mode 100644 src/main/resources/static/layui/css/layui.css
delete mode 100644 src/main/resources/static/layui/css/layui.mobile.css
delete mode 100644 src/main/resources/static/layui/css/modules/code.css
delete mode 100644 src/main/resources/static/layui/css/modules/laydate/default/laydate.css
delete mode 100644 src/main/resources/static/layui/css/modules/layer/default/icon-ext.png
delete mode 100644 src/main/resources/static/layui/css/modules/layer/default/icon.png
delete mode 100644 src/main/resources/static/layui/css/modules/layer/default/layer.css
delete mode 100644 src/main/resources/static/layui/css/modules/layer/default/loading-0.gif
delete mode 100644 src/main/resources/static/layui/css/modules/layer/default/loading-1.gif
delete mode 100644 src/main/resources/static/layui/css/modules/layer/default/loading-2.gif
delete mode 100644 src/main/resources/static/layui/css/modules/layim/html/chatlog.html
delete mode 100644 src/main/resources/static/layui/css/modules/layim/html/find.html
delete mode 100644 src/main/resources/static/layui/css/modules/layim/html/getmsg.json
delete mode 100644 src/main/resources/static/layui/css/modules/layim/html/msgbox.html
delete mode 100644 src/main/resources/static/layui/css/modules/layim/layim.css
delete mode 100644 src/main/resources/static/layui/css/modules/layim/mobile/layim.css
delete mode 100644 src/main/resources/static/layui/css/modules/layim/skin/1.jpg
delete mode 100644 src/main/resources/static/layui/css/modules/layim/skin/2.jpg
delete mode 100644 src/main/resources/static/layui/css/modules/layim/skin/3.jpg
delete mode 100644 src/main/resources/static/layui/css/modules/layim/skin/4.jpg
delete mode 100644 src/main/resources/static/layui/css/modules/layim/skin/5.jpg
delete mode 100644 src/main/resources/static/layui/css/modules/layim/skin/logo.jpg
delete mode 100644 src/main/resources/static/layui/css/modules/layim/voice/default.mp3
delete mode 100644 src/main/resources/static/layui/font/iconfont.eot
delete mode 100644 src/main/resources/static/layui/font/iconfont.svg
delete mode 100644 src/main/resources/static/layui/font/iconfont.ttf
delete mode 100644 src/main/resources/static/layui/font/iconfont.woff
delete mode 100644 src/main/resources/static/layui/images/face/0.gif
delete mode 100644 src/main/resources/static/layui/images/face/1.gif
delete mode 100644 src/main/resources/static/layui/images/face/10.gif
delete mode 100644 src/main/resources/static/layui/images/face/11.gif
delete mode 100644 src/main/resources/static/layui/images/face/12.gif
delete mode 100644 src/main/resources/static/layui/images/face/13.gif
delete mode 100644 src/main/resources/static/layui/images/face/14.gif
delete mode 100644 src/main/resources/static/layui/images/face/15.gif
delete mode 100644 src/main/resources/static/layui/images/face/16.gif
delete mode 100644 src/main/resources/static/layui/images/face/17.gif
delete mode 100644 src/main/resources/static/layui/images/face/18.gif
delete mode 100644 src/main/resources/static/layui/images/face/19.gif
delete mode 100644 src/main/resources/static/layui/images/face/2.gif
delete mode 100644 src/main/resources/static/layui/images/face/20.gif
delete mode 100644 src/main/resources/static/layui/images/face/21.gif
delete mode 100644 src/main/resources/static/layui/images/face/22.gif
delete mode 100644 src/main/resources/static/layui/images/face/23.gif
delete mode 100644 src/main/resources/static/layui/images/face/24.gif
delete mode 100644 src/main/resources/static/layui/images/face/25.gif
delete mode 100644 src/main/resources/static/layui/images/face/26.gif
delete mode 100644 src/main/resources/static/layui/images/face/27.gif
delete mode 100644 src/main/resources/static/layui/images/face/28.gif
delete mode 100644 src/main/resources/static/layui/images/face/29.gif
delete mode 100644 src/main/resources/static/layui/images/face/3.gif
delete mode 100644 src/main/resources/static/layui/images/face/30.gif
delete mode 100644 src/main/resources/static/layui/images/face/31.gif
delete mode 100644 src/main/resources/static/layui/images/face/32.gif
delete mode 100644 src/main/resources/static/layui/images/face/33.gif
delete mode 100644 src/main/resources/static/layui/images/face/34.gif
delete mode 100644 src/main/resources/static/layui/images/face/35.gif
delete mode 100644 src/main/resources/static/layui/images/face/36.gif
delete mode 100644 src/main/resources/static/layui/images/face/37.gif
delete mode 100644 src/main/resources/static/layui/images/face/38.gif
delete mode 100644 src/main/resources/static/layui/images/face/39.gif
delete mode 100644 src/main/resources/static/layui/images/face/4.gif
delete mode 100644 src/main/resources/static/layui/images/face/40.gif
delete mode 100644 src/main/resources/static/layui/images/face/41.gif
delete mode 100644 src/main/resources/static/layui/images/face/42.gif
delete mode 100644 src/main/resources/static/layui/images/face/43.gif
delete mode 100644 src/main/resources/static/layui/images/face/44.gif
delete mode 100644 src/main/resources/static/layui/images/face/45.gif
delete mode 100644 src/main/resources/static/layui/images/face/46.gif
delete mode 100644 src/main/resources/static/layui/images/face/47.gif
delete mode 100644 src/main/resources/static/layui/images/face/48.gif
delete mode 100644 src/main/resources/static/layui/images/face/49.gif
delete mode 100644 src/main/resources/static/layui/images/face/5.gif
delete mode 100644 src/main/resources/static/layui/images/face/50.gif
delete mode 100644 src/main/resources/static/layui/images/face/51.gif
delete mode 100644 src/main/resources/static/layui/images/face/52.gif
delete mode 100644 src/main/resources/static/layui/images/face/53.gif
delete mode 100644 src/main/resources/static/layui/images/face/54.gif
delete mode 100644 src/main/resources/static/layui/images/face/55.gif
delete mode 100644 src/main/resources/static/layui/images/face/56.gif
delete mode 100644 src/main/resources/static/layui/images/face/57.gif
delete mode 100644 src/main/resources/static/layui/images/face/58.gif
delete mode 100644 src/main/resources/static/layui/images/face/59.gif
delete mode 100644 src/main/resources/static/layui/images/face/6.gif
delete mode 100644 src/main/resources/static/layui/images/face/60.gif
delete mode 100644 src/main/resources/static/layui/images/face/61.gif
delete mode 100644 src/main/resources/static/layui/images/face/62.gif
delete mode 100644 src/main/resources/static/layui/images/face/63.gif
delete mode 100644 src/main/resources/static/layui/images/face/64.gif
delete mode 100644 src/main/resources/static/layui/images/face/65.gif
delete mode 100644 src/main/resources/static/layui/images/face/66.gif
delete mode 100644 src/main/resources/static/layui/images/face/67.gif
delete mode 100644 src/main/resources/static/layui/images/face/68.gif
delete mode 100644 src/main/resources/static/layui/images/face/69.gif
delete mode 100644 src/main/resources/static/layui/images/face/7.gif
delete mode 100644 src/main/resources/static/layui/images/face/70.gif
delete mode 100644 src/main/resources/static/layui/images/face/71.gif
delete mode 100644 src/main/resources/static/layui/images/face/8.gif
delete mode 100644 src/main/resources/static/layui/images/face/9.gif
delete mode 100644 src/main/resources/static/layui/lay/modules/carousel.js
delete mode 100644 src/main/resources/static/layui/lay/modules/code.js
delete mode 100644 src/main/resources/static/layui/lay/modules/colorpicker.js
delete mode 100644 src/main/resources/static/layui/lay/modules/element.js
delete mode 100644 src/main/resources/static/layui/lay/modules/flow.js
delete mode 100644 src/main/resources/static/layui/lay/modules/form.js
delete mode 100644 src/main/resources/static/layui/lay/modules/jquery.js
delete mode 100644 src/main/resources/static/layui/lay/modules/laydate.js
delete mode 100644 src/main/resources/static/layui/lay/modules/layedit.js
delete mode 100644 src/main/resources/static/layui/lay/modules/layer.js
delete mode 100644 src/main/resources/static/layui/lay/modules/layim.js
delete mode 100644 src/main/resources/static/layui/lay/modules/laypage.js
delete mode 100644 src/main/resources/static/layui/lay/modules/laytpl.js
delete mode 100644 src/main/resources/static/layui/lay/modules/mobile.js
delete mode 100644 src/main/resources/static/layui/lay/modules/rate.js
delete mode 100644 src/main/resources/static/layui/lay/modules/slider.js
delete mode 100644 src/main/resources/static/layui/lay/modules/table.js
delete mode 100644 src/main/resources/static/layui/lay/modules/tree.js
delete mode 100644 src/main/resources/static/layui/lay/modules/upload.js
delete mode 100644 src/main/resources/static/layui/lay/modules/util.js
delete mode 100644 src/main/resources/static/layui/layui.all.js
delete mode 100644 src/main/resources/static/layui/layui.js
delete mode 100644 src/main/resources/static/mang.html
delete mode 100644 src/main/resources/static/mang.png
delete mode 100644 src/main/resources/static/shenma-site-verification.txt
delete mode 100644 src/main/resources/static/shenma-site-verification2.txt
delete mode 100644 src/main/resources/static/static/23446.jpg
delete mode 100644 src/main/resources/static/static/4868.jpg
delete mode 100644 src/main/resources/static/static/5082.jpg
delete mode 100644 src/main/resources/static/static/851bd749efa54b8a8445b03108722163.jpg
delete mode 100644 src/main/resources/static/static/U770P4T8D8933761F19930DT20190821203252.jpg
delete mode 100644 src/main/resources/static/static/U770P4T8D8933772F19930DT20190821204700.jpg
delete mode 100644 src/main/resources/static/static/U770P4T8D8933775F19930DT20190821204952.jpg
delete mode 100644 src/main/resources/static/static/U770P4T8D8933777F19930DT20190821205124.jpg
delete mode 100644 src/main/resources/static/static/U849P4T8D8933738F19930DT20190821200104.jpg
delete mode 100644 src/main/resources/static/static/core.php
delete mode 100644 src/main/resources/static/static/icon-backtop.gif
delete mode 100644 src/main/resources/static/static/index.css
delete mode 100644 src/main/resources/static/static/logo.png
delete mode 100644 src/main/resources/static/static/page/book_detail.html
delete mode 100644 src/main/resources/static/static/sl_104147940.jpg
delete mode 100644 src/main/resources/static/static/sl_104148030.jpg
delete mode 100644 src/main/resources/static/static/sl_104148150.jpg
delete mode 100644 src/main/resources/static/static/sl_104152260.jpg
delete mode 100644 src/main/resources/static/static/sl_104153130.jpg
delete mode 100644 src/main/resources/static/static/sl_104155330.jpg
delete mode 100644 src/main/resources/static/static/sl_104155520.JPG
delete mode 100644 src/main/resources/static/static/sl_104156600.JPG
delete mode 100644 src/main/resources/static/static/sl_104157470.jpg
delete mode 100644 src/main/resources/static/static/sl_104157670.jpg
delete mode 100644 src/main/resources/static/static/sl_104158410.jpg
delete mode 100644 src/main/resources/static/static/smimg_8992d763a682448aa74347c634da3d94.jpg
delete mode 100644 src/main/resources/static/static/smimg_d640709a27df412d82b084b64677b115.jpg
delete mode 100644 src/main/resources/static/static/smimg_e5dd6053d3344ea49bd7e6df022b969a.jpg
delete mode 100644 src/main/resources/static/static/z_stat.php
delete mode 100644 src/main/resources/templates/books/book_content.html
delete mode 100644 src/main/resources/templates/books/book_detail.html
delete mode 100644 src/main/resources/templates/books/book_index.html
delete mode 100644 src/main/resources/templates/books/book_search.html
delete mode 100644 src/main/resources/templates/books/index.html
delete mode 100644 src/main/resources/templates/books/soft_book_search.html
delete mode 100644 src/main/resources/templates/common/css.html
delete mode 100644 src/main/resources/templates/common/footer.html
delete mode 100644 src/main/resources/templates/common/js.html
delete mode 100644 src/main/resources/templates/common/soft_footer.html
delete mode 100644 src/main/resources/templates/index.html
delete mode 100644 src/main/resources/templates/user/login.html
delete mode 100644 src/test/java/xyz/zinglizingli/common/SearchApplicationTests.java
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index cb9a91d..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/target
-/.idea
-/cachedata
-/logs
diff --git a/fiction_hourse.iml b/fiction_hourse.iml
deleted file mode 100644
index b61e1e0..0000000
--- a/fiction_hourse.iml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index 371d20e..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
- 4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.0.1.RELEASE
-
-
- xyz.zinglizingli
- fiction_hourse
- 1.3.0
- fiction_hourse
- 小说精品楼
-
-
-
- UTF-8
- UTF-8
- 1.8
-
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.springframework.boot
- spring-boot-starter-cache
-
-
- net.sf.ehcache
- ehcache
-
-
-
- org.springframework.boot
- spring-boot-starter-thymeleaf
-
-
-
-
- com.github.pagehelper
- pagehelper-spring-boot-starter
- 1.2.5
-
-
- com.cuisongliu
- orderbyhelper-spring-boot-starter
- 1.0.2
-
-
-
- mysql
- mysql-connector-java
- 8.0.11
-
-
- org.mybatis.spring.boot
- mybatis-spring-boot-starter
- 1.3.2
-
-
-
-
-
- org.apache.httpcomponents
- httpcore
- 4.4.10
-
-
-
-
- org.apache.httpcomponents
- httpclient
- 4.5.6
-
-
-
- org.springframework.boot
- spring-boot-starter-mail
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
-
-
- alimaven
- aliyun maven
- http://maven.aliyun.com/nexus/content/groups/public/
-
-
-
-
-
-
diff --git a/src/main/java/xyz/zinglizingli/BookApplication.java b/src/main/java/xyz/zinglizingli/BookApplication.java
deleted file mode 100644
index 5db3b5f..0000000
--- a/src/main/java/xyz/zinglizingli/BookApplication.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package xyz.zinglizingli;
-
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.context.annotation.Bean;
-import org.springframework.scheduling.TaskScheduler;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
-
-@SpringBootApplication
-@EnableCaching
-@EnableScheduling
-@MapperScan({"xyz.zinglizingli.*.mapper"})
-public class BookApplication {
-
- public static void main(String[] args) {
-
-
- SpringApplication.run(BookApplication.class, args);
- }
-
- /**
- * 解决同一时间只能一个定时任务执行的问题
- * */
- @Bean
- public TaskScheduler taskScheduler() {
- ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
- taskScheduler.setPoolSize(5);
- return taskScheduler;
- }
-
-}
diff --git a/src/main/java/xyz/zinglizingli/books/constant/CacheKeyConstans.java b/src/main/java/xyz/zinglizingli/books/constant/CacheKeyConstans.java
deleted file mode 100644
index 898daf7..0000000
--- a/src/main/java/xyz/zinglizingli/books/constant/CacheKeyConstans.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package xyz.zinglizingli.books.constant;
-
-public class CacheKeyConstans {
- public static final String HOT_BOOK_LIST_KEY = "hotBookListKey";
- public static final String NEWST_BOOK_LIST_KEY = "newstBookListKey";
- public static final String BOOK_CONTENT_KEY_PREFIX = "bookContentKeyPrefix";
- public static final String EMAIL_URL_PREFIX_KEY = "emailUrlPrefixKey";
- public static final String RANDOM_NEWS_CONTENT_KEY = "randomNewsContentKey";
- public static final String REC_BOOK_LIST_KEY = "recBookListKey";
-}
diff --git a/src/main/java/xyz/zinglizingli/books/mapper/BookContentMapper.java b/src/main/java/xyz/zinglizingli/books/mapper/BookContentMapper.java
deleted file mode 100644
index f389b28..0000000
--- a/src/main/java/xyz/zinglizingli/books/mapper/BookContentMapper.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package xyz.zinglizingli.books.mapper;
-
-import org.apache.ibatis.annotations.Param;
-import xyz.zinglizingli.books.po.BookContent;
-import xyz.zinglizingli.books.po.BookContentExample;
-
-import java.util.List;
-
-public interface BookContentMapper {
- int countByExample(BookContentExample example);
-
- int deleteByExample(BookContentExample example);
-
- int deleteByPrimaryKey(Long id);
-
- int insert(BookContent record);
-
- int insertSelective(BookContent record);
-
- List selectByExample(BookContentExample example);
-
- BookContent selectByPrimaryKey(Long id);
-
- int updateByExampleSelective(@Param("record") BookContent record, @Param("example") BookContentExample example);
-
- int updateByExample(@Param("record") BookContent record, @Param("example") BookContentExample example);
-
- int updateByPrimaryKeySelective(BookContent record);
-
- int updateByPrimaryKey(BookContent record);
-
- void insertBatch(List bookContent);
-}
\ No newline at end of file
diff --git a/src/main/java/xyz/zinglizingli/books/mapper/BookIndexMapper.java b/src/main/java/xyz/zinglizingli/books/mapper/BookIndexMapper.java
deleted file mode 100644
index ac52e37..0000000
--- a/src/main/java/xyz/zinglizingli/books/mapper/BookIndexMapper.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package xyz.zinglizingli.books.mapper;
-
-import org.apache.ibatis.annotations.Param;
-import xyz.zinglizingli.books.po.Book;
-import xyz.zinglizingli.books.po.BookIndex;
-import xyz.zinglizingli.books.po.BookIndexExample;
-
-import java.util.List;
-import java.util.Map;
-
-public interface BookIndexMapper {
- int countByExample(BookIndexExample example);
-
- int deleteByExample(BookIndexExample example);
-
- int deleteByPrimaryKey(Long id);
-
- int insert(BookIndex record);
-
- int insertSelective(BookIndex record);
-
- List selectByExample(BookIndexExample example);
-
- BookIndex selectByPrimaryKey(Long id);
-
- int updateByExampleSelective(@Param("record") BookIndex record, @Param("example") BookIndexExample example);
-
- int updateByExample(@Param("record") BookIndex record, @Param("example") BookIndexExample example);
-
- int updateByPrimaryKeySelective(BookIndex record);
-
- int updateByPrimaryKey(BookIndex record);
-
- void insertBatch(List bookIndex);
-
- String queryNewstIndexName(@Param("bookId") Long bookId);
-
-
-}
\ No newline at end of file
diff --git a/src/main/java/xyz/zinglizingli/books/mapper/BookMapper.java b/src/main/java/xyz/zinglizingli/books/mapper/BookMapper.java
deleted file mode 100644
index 142ee95..0000000
--- a/src/main/java/xyz/zinglizingli/books/mapper/BookMapper.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package xyz.zinglizingli.books.mapper;
-
-import org.apache.ibatis.annotations.Param;
-import xyz.zinglizingli.books.po.Book;
-import xyz.zinglizingli.books.po.BookExample;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public interface BookMapper {
- int countByExample(BookExample example);
-
- int deleteByExample(BookExample example);
-
- int deleteByPrimaryKey(Long id);
-
- int insert(Book record);
-
- int insertSelective(Book record);
-
- List selectByExample(BookExample example);
-
- Book selectByPrimaryKey(Long id);
-
- int updateByExampleSelective(@Param("record") Book record, @Param("example") BookExample example);
-
- int updateByExample(@Param("record") Book record, @Param("example") BookExample example);
-
- int updateByPrimaryKeySelective(Book record);
-
- int updateByPrimaryKey(Book record);
-
- List search(@Param("userId") String userId, @Param("ids") String ids, @Param("keyword") String keyword, @Param("catId") Integer catId, @Param("softCat") Integer softCat,@Param("softTag") String softTag, @Param("bookStatus") String bookStatus);
-
- void addVisitCount(@Param("bookId") Long bookId);
-
- Book queryRandomBook();
-
- Book queryNewstBook(Set sendIds);
-
- List queryNewstBookIdList();
-
- List queryEndBookIdList();
-
- /**
- * 查询推荐书籍数据
- * */
- List queryRecBooks(List
");
- Matcher descMatch = descPatten.matcher(body);
- if (descMatch.find()) {
- String desc = descMatch.group(1);
-
-
- Book book = new Book();
- book.setAuthor(author);
- book.setCatid(catNum);
- book.setBookDesc(desc);
- book.setBookName(bookName);
- book.setScore(score > 10 ? 8.0f : score);
- book.setPicUrl(picSrc);
- book.setBookStatus(status);
- book.setUpdateTime(updateTime);
-
- List indexList = new ArrayList<>();
- List contentList = new ArrayList<>();
-
- //读取目录
- Pattern indexPatten = Pattern.compile("查看完整目录");
- Matcher indexMatch = indexPatten.matcher(body);
- if (indexMatch.find()) {
- String indexUrl = baseUrl + indexMatch.group(1);
- String body2 = getByHttpClient(indexUrl);
- if (body2 != null) {
- Pattern indexListPatten = Pattern.compile("([^/]+)");
- Matcher indexListMatch = indexListPatten.matcher(body2);
-
- boolean isFindIndex = indexListMatch.find();
-
- int indexNum = 0;
-
- //查询该书籍已存在目录号
- List hasIndexNum = bookService.queryIndexCountByBookNameAndBAuthor(bookName, author);
- //更新和插入分别开,插入只在凌晨做一次
- if ((isUpdate && hasIndexNum.size() > 0) || (!isUpdate && hasIndexNum.size() == 0)) {
- while (isFindIndex) {
- if (!hasIndexNum.contains(indexNum)) {
-
- String contentUrl = baseUrl + indexListMatch.group(1);
- String indexName = indexListMatch.group(2);
-
-
- //查询章节内容
- String body3 = getByHttpClient(contentUrl);
- if (body3 != null) {
- Pattern contentPattten = Pattern.compile("章节错误,点此举报(.*)加入书签,方便阅读");
- String start = "『章节错误,点此举报』";
- String end = "『加入书签,方便阅读』";
- String content = body3.substring(body3.indexOf(start) + start.length(), body3.indexOf(end));
- //TODO插入章节目录和章节内容
- BookIndex bookIndex = new BookIndex();
- bookIndex.setIndexName(indexName);
- bookIndex.setIndexNum(indexNum);
- indexList.add(bookIndex);
- BookContent bookContent = new BookContent();
- bookContent.setContent(content);
- bookContent.setIndexNum(indexNum);
- contentList.add(bookContent);
-
-
- } else {
- break;
- }
-
-
- }
- indexNum++;
- isFindIndex = indexListMatch.find();
- }
-
- if (indexList.size() == contentList.size() && indexList.size() > 0) {
- ExcutorUtils.excuteFixedTask(new Runnable() {
- @Override
- public void run() {
- bookService.saveBookAndIndexAndContent(book, indexList, contentList);
- }
- });
-
- }
- }
- }
-
-
- }
-
-
- }
-
-
- }
- }
- }
- }
-
-
- }
-
- }
-
-
- } catch (Exception e) {
-
- e.printStackTrace();
-
- } finally {
- matcher2.find();
- isFind = matcher2.find();//需要找两次,应为有两个一样的路径匹配
- scoreFind = scoreMatch.find();
- isBookNameMatch = bookNameMatch.find();
- }
-
-
- }
-
- }
-
- private String getByHttpClient(String catBookListUrl) {
- try {
- /* HttpClient httpClient = new DefaultHttpClient();
- HttpGet getReq = new HttpGet(catBookListUrl);
- getReq.setHeader("user-agent", "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1");
- HttpResponse execute = httpClient.execute(getReq);
- if (execute.getStatusLine().getStatusCode() == HttpStatus.OK.value()) {
- HttpEntity entity = execute.getEntity();
- return EntityUtils.toString(entity, "utf-8");
- } else {
- return null;
- }*/
- //经测试restTemplate比httpClient效率高出很多倍,所有选择restTemplate
- ResponseEntity forEntity = restTemplate.getForEntity(catBookListUrl, String.class);
- if (forEntity.getStatusCode() == HttpStatus.OK) {
- return forEntity.getBody();
- } else {
- return null;
- }
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
-
- /***
- * 解析书籍详情之后的页面
- */
- private void parseBook(Pattern bookPatten, String forObject, RestTemplate restTemplate, int catNum, String baseUrl) throws ParseException {
- Matcher matcher2 = bookPatten.matcher(forObject);
- boolean isFind = matcher2.find();
- Pattern scorePatten = Pattern.compile("(\\d+\\.\\d+)分
");
- Matcher scoreMatch = scorePatten.matcher(forObject);
- boolean scoreFind = scoreMatch.find();
-
- Pattern bookNamePatten = Pattern.compile("([^/]+)
");
- Matcher bookNameMatch = bookNamePatten.matcher(forObject);
- boolean isBookNameMatch = bookNameMatch.find();
-
- Pattern authorPatten = Pattern.compile(">作者:([^/]+)<");
- Matcher authoreMatch = authorPatten.matcher(forObject);
- boolean isFindAuthor = authoreMatch.find();
-
-
- System.out.println("匹配书籍url" + isFind);
-
- System.out.println("匹配分数" + scoreFind);
- while (isFind && scoreFind && isBookNameMatch && isFindAuthor) {
-
- try {
- Float score = Float.parseFloat(scoreMatch.group(1));
-
- if (score < lowestScore) {//数据库空间有限,暂时爬取8.0分以上的小说
- continue;
- }
- String bookName = bookNameMatch.group(1);
- String author = authoreMatch.group(1);
-
- String bokNum = matcher2.group(1);
- String bookUrl = baseUrl + "/" + bokNum + "/";
-
- ResponseEntity forEntity = restTemplate.getForEntity(bookUrl, String.class);
- if (forEntity.getStatusCode() == HttpStatus.OK) {
-
- String body = forEntity.getBody();
-
- Pattern statusPatten = Pattern.compile("状态:([^/]+)");
- Matcher statusMatch = statusPatten.matcher(body);
- if (statusMatch.find()) {
- String status = statusMatch.group(1);
- Pattern updateTimePatten = Pattern.compile("更新:(\\d+-\\d+-\\d+\\s\\d+:\\d+:\\d+)");
- Matcher updateTimeMatch = updateTimePatten.matcher(body);
- if (updateTimeMatch.find()) {
- String updateTimeStr = updateTimeMatch.group(1);
- SimpleDateFormat format = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
- Date updateTime = format.parse(updateTimeStr);
- Pattern picPatten = Pattern.compile("
]+)\"\\s+onerror=\"this.src=");
- Matcher picMather = picPatten.matcher(body);
- if (picMather.find()) {
- String picSrc = picMather.group(1);
-
- Pattern descPatten = Pattern.compile("class=\"review\">([^<]+)");
- Matcher descMatch = descPatten.matcher(body);
- if (descMatch.find()) {
- String desc = descMatch.group(1);
-
-
- Book book = new Book();
- book.setAuthor(author);
- book.setCatid(catNum);
- book.setBookDesc(desc);
- book.setBookName(bookName);
- book.setScore(score > 10 ? 8.0f : score);
- book.setPicUrl(picSrc);
- book.setBookStatus(status);
- book.setUpdateTime(updateTime);
-
- List indexList = new ArrayList<>();
- List contentList = new ArrayList<>();
-
- //读取目录
- Pattern indexPatten = Pattern.compile("查看完整目录");
- Matcher indexMatch = indexPatten.matcher(body);
- if (indexMatch.find()) {
- String indexUrl = baseUrl + indexMatch.group(1);
- ResponseEntity forEntity1 = restTemplate.getForEntity(indexUrl, String.class);
- if (forEntity1.getStatusCode() == HttpStatus.OK) {
- String body2 = forEntity1.getBody();
- Pattern indexListPatten = Pattern.compile("([^/]+)");
- Matcher indexListMatch = indexListPatten.matcher(body2);
-
- boolean isFindIndex = indexListMatch.find();
-
- int indexNum = 0;
-
- //查询该书籍已存在目录号
- List hasIndexNum = bookService.queryIndexCountByBookNameAndBAuthor(bookName, author);
-
- while (isFindIndex) {
- if (!hasIndexNum.contains(indexNum)) {
-
- String contentUrl = baseUrl + indexListMatch.group(1);
- String indexName = indexListMatch.group(2);
-
-
- //查询章节内容
- ResponseEntity forEntity2 = restTemplate.getForEntity(contentUrl, String.class);
- if (forEntity2.getStatusCode() == HttpStatus.OK) {
- String body3 = forEntity2.getBody();
- Pattern contentPattten = Pattern.compile("章节错误,点此举报(.*)加入书签,方便阅读");
- String start = "『章节错误,点此举报』";
- String end = "『加入书签,方便阅读』";
- String content = body3.substring(body3.indexOf(start) + start.length(), body3.indexOf(end));
- //TODO插入章节目录和章节内容
- BookIndex bookIndex = new BookIndex();
- bookIndex.setIndexName(indexName);
- bookIndex.setIndexNum(indexNum);
- indexList.add(bookIndex);
- BookContent bookContent = new BookContent();
- bookContent.setContent(content);
- bookContent.setIndexNum(indexNum);
- contentList.add(bookContent);
-
-
- } else {
- break;
- }
-
- }
-
- indexNum++;
- isFindIndex = indexListMatch.find();
- }
- if (indexList.size() == contentList.size() && indexList.size() > 0) {
- bookService.saveBookAndIndexAndContent(book, indexList, contentList);
- }
-
-
- }
- }
-
-
- }
-
-
- }
- }
-
-
- }
-
- }
-
- } catch (Exception e) {
-
- e.printStackTrace();
-
- } finally {
- matcher2.find();
- isFind = matcher2.find();//需要找两次,应为有两个一样的路径匹配
- scoreFind = scoreMatch.find();
- isBookNameMatch = bookNameMatch.find();
- isFindAuthor = authoreMatch.find();
- }
-
-
- }
-
- }
-}
diff --git a/src/main/java/xyz/zinglizingli/common/schedule/SendEmaillSchedule.java b/src/main/java/xyz/zinglizingli/common/schedule/SendEmaillSchedule.java
deleted file mode 100644
index bda344f..0000000
--- a/src/main/java/xyz/zinglizingli/common/schedule/SendEmaillSchedule.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package xyz.zinglizingli.common.schedule;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import xyz.zinglizingli.books.constant.CacheKeyConstans;
-import xyz.zinglizingli.books.service.MailService;
-import xyz.zinglizingli.books.util.RandomValueUtil;
-import xyz.zinglizingli.common.cache.CommonCacheUtil;
-
-import java.util.Random;
-
-
-/*
-主动推送:最为快速的提交方式,
-建议您将站点当天新产出链接立即通过此方式推送给百度,
-以保证新链接可以及时被百度收录。
-*/
-@Service
-public class SendEmaillSchedule {
-
- @Autowired
- private CommonCacheUtil cacheUtil;
-
- @Autowired
- private MailService mailService;
-
-
- private Logger log = LoggerFactory.getLogger(SendEmaillSchedule.class);
-
-
- // @Scheduled(fixedRate = 1000*60*60*24)
- public void sendEmaill() {
- System.out.println("SendEmaillSchedule。。。。。。。。。。。。。。。");
-
- for(int i = 0 ; i < 1000; i++){
- String email = RandomValueUtil.getEmail();
- if(cacheUtil.get(CacheKeyConstans.EMAIL_URL_PREFIX_KEY+email)!=null){
- continue;
- }
- cacheUtil.setObject(CacheKeyConstans.EMAIL_URL_PREFIX_KEY+email,email,60*60*24*30);
- String subject = "推荐一个看小说的弹幕网站";
- String content = "精品小说楼是国内优秀的小说弹幕网站,精品小说楼提供海量热门网络小说,日本轻小说,国产轻小说,动漫小说,轻小说在线阅读和TXT小说下载,致力于网络精品小说的收集,智能计算小说评分,打造小说精品排行榜,致力于无广告无弹窗的小说阅读环境。" +
- "
点击进入"
- +"
";
- mailService.sendHtmlMail(email, subject, content);
- try {
- Thread.sleep(new Random().nextInt(1000*60*10)+1000*60);
- } catch (InterruptedException e) {
- log.error(e.getMessage(),e);
- }
- }
-
- }
-}
diff --git a/src/main/java/xyz/zinglizingli/common/schedule/SendUrlSchedule.java b/src/main/java/xyz/zinglizingli/common/schedule/SendUrlSchedule.java
deleted file mode 100644
index 8175fed..0000000
--- a/src/main/java/xyz/zinglizingli/common/schedule/SendUrlSchedule.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package xyz.zinglizingli.common.schedule;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Service;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.RestTemplate;
-import xyz.zinglizingli.books.service.BookService;
-import xyz.zinglizingli.common.cache.CommonCacheUtil;
-import xyz.zinglizingli.common.utils.RestTemplateUtil;
-
-import java.util.*;
-
-
-/*
-主动推送:最为快速的提交方式,
-建议您将站点当天新产出链接立即通过此方式推送给百度,
-以保证新链接可以及时被百度收录。
-*/
-@Service
-public class SendUrlSchedule {
-
- @Autowired
- private CommonCacheUtil cacheUtil;
-
- @Autowired
- private BookService bookService;
-
- @Value("${baidu.record.ids}")
- private String recordedIds;
-
- private Logger log = LoggerFactory.getLogger(SendUrlSchedule.class);
-
-
- //@Scheduled(cron = "0 0 1 * * 1")
- public void sendAllBookToBaidu() {
- System.out.println("sendAllBookToBaidu。。。。。。。。。。。。。。。");
-
- List recordedIdsList = Arrays.asList(recordedIds.split(","));
- List idList = bookService.queryEndBookIdList();
- RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
-
-
- String reqBody = "";
- for (String id : idList) {
- try {
- if (!recordedIdsList.contains(id)) {
- reqBody += ("https://www.zinglizingli.xyz/book/" + id + ".html" + "\n");
- //reqBody+=("http://www.zinglizingli.xyz/book/"+id+".html"+"\n");
- if (reqBody.length() > 2000) {
- MultiValueMap map = new LinkedMultiValueMap<>();
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.TEXT_PLAIN);
- //headers.add("User-Agent","curl/7.12.1");
- headers.add("Host", "data.zz.baidu.com");
- headers.setContentLength(reqBody.length());
- HttpEntity request = new HttpEntity<>(reqBody, headers);
- System.out.println("推送数据:" + reqBody);
- ResponseEntity stringResponseEntity = restTemplate.postForEntity("http://data.zz.baidu.com/urls?site=www.zinglizingli.xyz&token=IuK7oVrPKe3U606x", request, String.class);
- System.out.println("推送URL结果:code:" + stringResponseEntity.getStatusCode().value() + ",body:" + stringResponseEntity.getBody());
- Thread.sleep(1000 * 10);
- System.out.println("推送数据:" + reqBody);
- stringResponseEntity = restTemplate.postForEntity("http://data.zz.baidu.com/urls?appid=1643715155923937&token=fkEcTlId6Cf21Sz3&type=batch", request, String.class);
- System.out.println("推送URL结果:code:" + stringResponseEntity.getStatusCode().value() + ",body:" + stringResponseEntity.getBody());
-
- reqBody = "";
- Thread.sleep(1000 * 10);
- }
- }
- } catch (Exception e) {
- log.error(e.getMessage(), e);
- }
- }
-
- }
-}
diff --git a/src/main/java/xyz/zinglizingli/common/schedule/SendWeiboSchedule.java b/src/main/java/xyz/zinglizingli/common/schedule/SendWeiboSchedule.java
deleted file mode 100644
index e689273..0000000
--- a/src/main/java/xyz/zinglizingli/common/schedule/SendWeiboSchedule.java
+++ /dev/null
@@ -1,497 +0,0 @@
-package xyz.zinglizingli.common.schedule;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Service;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.RestTemplate;
-import xyz.zinglizingli.books.po.Book;
-import xyz.zinglizingli.books.service.BookService;
-import xyz.zinglizingli.common.cache.CommonCacheUtil;
-import xyz.zinglizingli.common.utils.RestTemplateUtil;
-
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-@Service
-public class SendWeiboSchedule {
-
- @Autowired
- private CommonCacheUtil cacheUtil;
-
- @Autowired
- private BookService bookService;
-
- private Logger log = LoggerFactory.getLogger(SendWeiboSchedule.class);
-
- private boolean isExcuting = false;//是否正在执行
-
- private long excuteNum = 0;
-
- @Value("${search.schedule.isRunExcute}")
- private String isRunExcute;//是否在运行时就执行sendAtNight定时器
-
- @Value("${browser.cookie}")
- private String cookieStr;
-
- private static final String BOOKNAME_CACHE_PREFIX = "bookName_Cache_Prefix:";
-
-
- //@Scheduled(fixedRate = 1000 * 60 * 35)
- public void sendAtDay() {
- log.debug("sendWeoboSchedule执行中。。。。。。。。。。。。");
- if (!isExcuting) {
- isExcuting = true;
- excuteNum++;
- //long sleepMillis = 1000 * 60 * 5;
- long sleepMillis = 1000 * 60 * 5;
- try {
-
- String name;
- String desc;
- String author;
- String bookNum;
- String resultCode;
- long realSleepMillis;
-
- RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
-
- //发送数据库中的一篇文章
- Map dataMap = bookService.queryNewstBook();
- log.debug("dataMap大小:" + dataMap.size());
- if (dataMap.size() > 1) {
- Book book = (Book) dataMap.get("book");
- String newstIndexName = (String) dataMap.get("newstIndexName");
- name = newstIndexName + "_" + book.getBookName();
- desc = book.getBookDesc();
- author = book.getAuthor();
- bookNum = new Random().nextInt(100) + "";
- realSleepMillis = sleepMillis + (new Random().nextInt(15)) * 60 * 1000;
- log.debug("发送微博书籍名:" + book.getBookName());
- if (!name.equals(cacheUtil.get(BOOKNAME_CACHE_PREFIX + name))) {
- resultCode = sendOneSiteWeibo(restTemplate, book.getBookName(), newstIndexName, author, desc, "精品小说楼", bookNum, "https://www.zinglizingli.xyz/book/" + book.getId() + ".html");
- log.debug("发送微博书籍名:" + book.getBookName() + " 状态码:" + resultCode);
- if ("{\"code\":\"A00006\"}".equals(resultCode)) {
- cacheUtil.set(BOOKNAME_CACHE_PREFIX + name, name, 60 * 60 * 24 * 30);
- }
- Thread.sleep(realSleepMillis + 32);
- }
- }
-
-
- //分享喜羊羊小说网
- String url2 = "http://m.zinglizingli.xyz/class/0/1.html";
-
- ResponseEntity forEntity2 = restTemplate.getForEntity(url2, String.class);
-
-
- String forObject2 = forEntity2.getBody();
- Pattern pattern = Pattern.compile("" +
- "\\s*((.*))
\\s*" +
- "");
- Matcher match = pattern.matcher(forObject2);
- boolean isFind = match.find();
- if (isFind) {
- while (isFind) {
-
- float score = Float.parseFloat(match.group(4));
-
- if (score >= 7.0) {
-
- bookNum = match.group(1);
- String href = "http://m.zinglizingli.xyz/" + bookNum + ".html";
- name = match.group(2);
- if (!name.equals(cacheUtil.get(BOOKNAME_CACHE_PREFIX + name))) {
- author = match.group(3);
- desc = match.group(5);
-
- resultCode = sendOneSiteWeibo(restTemplate, name, "", author, desc, "看小说吧", bookNum, href);
- if ("{\"code\":\"A00006\"}".equals(resultCode)) {
- cacheUtil.set(BOOKNAME_CACHE_PREFIX + name, name, 60 * 60 * 24 * 30);
- }
-
- realSleepMillis = sleepMillis + (new Random().nextInt(15)) * 60 * 1000;
- Thread.sleep(realSleepMillis);
-
- }
- }
- isFind = match.find();
- }
-
-
- }
-
- } catch (Exception e) {
- log.error(e.getMessage(), e);
-
- } finally {
- isExcuting = false;
- }
-
- }
-
- }
-
- //@Scheduled(fixedRate = 1000 * 60 * 35)
- //@Scheduled(fixedRate = 1000 * 60 * 5)
- /*public void sendAtDay() {
- if (!isExcuting) {
- isExcuting = true;
- excuteNum++;
- //long sleepMillis = 1000 * 60 * 5;
- long sleepMillis = 1000 * 60 * 25;
- try {
- RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
- //分享酸味书屋
- String url = "http://www.zinglizingli.xyz/paihangbang_lastupdate/1.html";
-
- //分享喜羊羊小说网
- String url2 = "http://m.zinglizingli.xyz/class/0/1.html";
-
- ResponseEntity forEntity = restTemplate.getForEntity(url, String.class);
- ResponseEntity forEntity2 = restTemplate.getForEntity(url2, String.class);
-
- String forObject = forEntity.getBody();
- Pattern pattern = Pattern.compile("\n" +
- "(.*)\n" +
- "(.*)\n" +
- "(.*)\\.\\.\\.\n" +
- "(\\d*)人在看\n" +
- "");
- Matcher match = pattern.matcher(forObject);
- boolean isFind = match.find();
- if (isFind) {
- while (isFind) {
-
- int lookNum = Integer.parseInt(match.group(5));
- if (lookNum > 5000) {
- String bookNum = match.group(1);
- String href = "http://www.zinglizingli.xyz/" + bookNum + ".html";
- String name = match.group(2);
- log.debug(excuteNum + ":" + name + "_BOOKNAME_CACHE:" + cacheUtil.get(BOOKNAME_CACHE_PREFIX + name));
- if (!name.equals(cacheUtil.get(BOOKNAME_CACHE_PREFIX + name))) {
-
- String author = match.group(3);
- String desc = match.group(4);
- log.debug(excuteNum + ":" + name);
- String resultCode = sendOneSiteWeibo(restTemplate, name, author, desc, "酸味书屋", bookNum, href);
- log.debug(excuteNum + ":" + name + ":" + resultCode);
- log.debug(excuteNum + ":resultCode=={\"code\":\"A00006\"}" + "{\"code\":\"A00006\"}".equals(resultCode));
-
- if ("{\"code\":\"A00006\"}".equals(resultCode)) {
- cacheUtil.set(BOOKNAME_CACHE_PREFIX + name, name, 60 * 60 * 24 * 30);
- }
- long realSleepMillis = sleepMillis + (new Random().nextInt(15)) * 60 * 1000;
- Thread.sleep(realSleepMillis);
- }
-
- }
- isFind = match.find();
- }
-
-
- String forObject2 = forEntity2.getBody();
- pattern = Pattern.compile("" +
- "\\s*((.*))
\\s*" +
- "");
- match = pattern.matcher(forObject2);
- isFind = match.find();
- if (isFind) {
- while (isFind) {
-
- float score = Float.parseFloat(match.group(4));
-
- if (score >= 7.0) {
-
- String bookNum = match.group(1);
- String href = "http://m.zinglizingli.xyz/" + bookNum + ".html";
- String name = match.group(2);
- if (!name.equals(cacheUtil.get(BOOKNAME_CACHE_PREFIX + name))) {
- String author = match.group(3);
- String desc = match.group(5);
-
- String resultCode = sendOneSiteWeibo(restTemplate, name, author, desc, "喜羊羊小说网", bookNum, href);
- if ("{\"code\":\"A00006\"}".equals(resultCode)) {
- cacheUtil.set(BOOKNAME_CACHE_PREFIX + name, name, 60 * 60 * 24 * 30);
- }
-
- long realSleepMillis = sleepMillis + (new Random().nextInt(15)) * 60 * 1000;
- Thread.sleep(realSleepMillis);
-
- }
- }
- isFind = match.find();
- }
-
-
- }
- }
-
- } catch (Exception e) {
- log.error(e.getMessage(),e);
-
- } finally {
- isExcuting = false;
- }
-
- }
-
- }
-*/
- //19点到23点,1点到4点每隔50分钟执行一次,20本书*2分钟+空闲时间
- //@Scheduled(cron = "0 */50 19-23,1-4 * * ?")
-
- /* public void sendAtNight() throws InterruptedException, IOException {
- if (!isExcuting) {
- isExcuting = true;
- log.info("sendAtNight定时器开始执行。。。。");
- long sleepMillis = 1000 * 60 * 2;
- sendAllSiteWeibo(sleepMillis);
- Thread.sleep(1000 * 60 * 10);
- isExcuting = false;
- }
-
-
- }*/
-
-
- //6点到17点每隔1小时执行一次,20本书*5分钟+空闲时间
- //@Scheduled(cron = "0 0 6-17/1 * * ?")
- /* public void sendAtDayTime() throws InterruptedException, IOException {
-
- if (!isExcuting) {
- isExcuting = true;
- log.info("sendAtDayTime定时器开始执行。。。。");
- long sleepMillis = 1000 * 60 * 5;
- sendAllSiteWeibo(sleepMillis);
- Thread.sleep(1000 * 60 * 10);
- isExcuting = false;
- }
-
- }*/
-
- /*private void sendAllSiteWeibo(long sleepMillis) throws InterruptedException {
- RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
- //分享酸味书屋
- String url = "http://www.zinglizingli.xyz/paihangbang_lastupdate/1.html";
-
- //分享喜羊羊小说网
- String url2 = "http://m.zinglizingli.xyz/class/0/1.html";
-
- ResponseEntity forEntity = restTemplate.getForEntity(url, String.class);
- ResponseEntity forEntity2 = restTemplate.getForEntity(url2, String.class);
-
- String forObject = forEntity.getBody();
- Pattern pattern = Pattern.compile("\n" +
- "(.*)\n" +
- "(.*)\n" +
- "(.*)\\.\\.\\.\n" +
- "(\\d*)人在看\n" +
- "");
- Matcher match = pattern.matcher(forObject);
- boolean isFind = match.find();
- if (isFind) {
- while (isFind) {
-
- int lookNum = Integer.parseInt(match.group(5));
- if (lookNum > 5000) {
- String bookNum = match.group(1);
- String href = "http://www.zinglizingli.xyz/" + bookNum;
- String name = match.group(2);
- String author = match.group(3);
- String desc = match.group(4);
- sendOneSiteWeibo(restTemplate, name, author, desc, "酸味书屋", bookNum, href);
- long realSleepMillis = sleepMillis + (new Random().nextInt(15)) * 60 * 1000;
- Thread.sleep(realSleepMillis);
- }
-
- isFind = match.find();
-
- }
- }
-
-
- String forObject2 = forEntity2.getBody();
- pattern = Pattern.compile("" +
- "\\s*((.*))
\\s*" +
- "");
- match = pattern.matcher(forObject2);
- isFind = match.find();
- if (isFind) {
- while (isFind) {
-
- float score = Float.parseFloat(match.group(4));
-
- if (score >= 7.0) {
-
- String bookNum = match.group(1);
- String href = "http://m.zinglizingli.xyz/" + bookNum;
- String name = match.group(2);
- String author = match.group(3);
- String desc = match.group(5);
-
- sendOneSiteWeibo(restTemplate, name, author, desc, "喜羊羊小说网", bookNum, href);
-
- long realSleepMillis = sleepMillis + (new Random().nextInt(15)) * 60 * 1000;
- Thread.sleep(realSleepMillis);
- }
-
- isFind = match.find();
-
-
- }
- }
- }*/
-
-
- public static void main(String[] args) throws Exception {
- RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
- //分享酸味书屋
- String url = "http://www.zinglizingli.xyz/paihangbang_lastupdate/1.html";
- ResponseEntity forEntity = restTemplate.getForEntity(url, String.class);
- String forObject = forEntity.getBody();
- Pattern pattern = Pattern.compile("\n" +
- "(.*)\n" +
- "(.*)\n" +
- "(.*)\\.\\.\\.\n" +
- "\\d*人在看\n" +
- "");
- Matcher match = pattern.matcher(forObject);
- boolean isFind = match.find();
- if (isFind) {
- while (isFind) {
- String bookNum = match.group(1);
- String href = "http://www.zinglizingli.xyz/" + bookNum;
- String name = match.group(2);
- String author = match.group(3);
- String desc = match.group(4);
-
-
- isFind = match.find();
-
- }
- }
-
- //分享喜羊羊小说网
- url = "http://m.zinglizingli.xyz/class/0/1.html";
- forEntity = restTemplate.getForEntity(url, String.class);
- forObject = forEntity.getBody();
- pattern = Pattern.compile("" +
- "\\s*((.*))
\\s*" +
- "");
- match = pattern.matcher(forObject);
- isFind = match.find();
- if (isFind) {
- while (isFind) {
- String bookNum = match.group(1);
- String href = "http://m.zinglizingli.xyz/" + bookNum;
- String name = match.group(2);
- String author = match.group(3);
- String desc = match.group(4);
- // sendOneSiteWeibo(restTemplate, name, author, desc, "喜羊羊小说网", bookNum, href);
-
-
- isFind = match.find();
-
-
- }
- }
-
-
- }
-
- private String sendOneSiteWeibo(RestTemplate template, String bookName, String indexName, String author, String desc, String wapName, String bookNum, String href) {
- String baseUrl = "http://service.weibo.com/share/aj_share.php";
- Map param = new HashMap<>();
- /*String content = bookName + "小说最新章节列表," + bookName + "小说免费在线阅读," + bookName +
- "小说TXT下载,尽在" + wapName +href+ "\n";
- if(indexName != null){
- content+=("最新章节:"+indexName+"\n");
- }
- content = content + "作者:"+(author.replace("作者:","")) + "\n";
- content += ("简介:"+desc.replace("简介:",""));*/
- String content = bookName+"最新章节,小说"+bookName+"("+author.replace("作者:","")+")手机阅读,小说"+bookName+"TXT下载 - "+href;
- param.put("content", content );
- param.put("styleid", "1");
- param.put("from", "share");
- param.put("appkey", "2351975812");
- param.put("refer", "http://www.zinglizingli.xyz/" + bookNum + "/");
- param.put("url_type", "0");
- param.put("visible", "0");
- //byte[] bytes = sendPostRequest(baseUrl, param);
-
-
- MultiValueMap map = new LinkedMultiValueMap<>();
- map.setAll(param);
- HttpHeaders headers = new HttpHeaders();
- headers.add("Accept", "*/*");
- headers.add("Accept-Encoding", "gzip, deflate");
- headers.add("Accept-Language", "zh-CN,zh;q=0.9");
- headers.add("Connection", "keep-alive");
- headers.add("Content-Length", "1146");
- headers.add("Content-Type", "application/x-www-form-urlencoded");
-
- String[] cookieArr = cookieStr.split(";");
- List cookies = Arrays.asList(cookieArr);
- headers.put(HttpHeaders.COOKIE, cookies);
-
- headers.add("Host", "service.weibo.com");
- headers.add("Origin", "http://service.weibo.com");
- headers.add("Referer", "http://service.weibo.com/share/share.php?appkey=2351975812&searchPic=true&title=%C2%A1%C2%BE%E4%BF%AE%E7%9C%9F%E8%81%8A%E5%A4%A9%E7%BE%A4%E6%9C%80%E6%96%B0%E7%AB%A0%E8%8A%82%E5%88%97%E8%A1%A8_%E4%BF%AE%E7%9C%9F%E8%81%8A%E5%A4%A9%E7%BE%A4%E6%9C%80%E6%96%B0%E7%AB%A0%E8%8A%82%E7%9B%AE%E5%BD%95_%E9%85%B8%E5%91%B3%E4%B9%A6%E5%B1%8B%C2%A1%C2%BF%E4%BF%AE%E7%9C%9F%E8%81%8A%E5%A4%A9%E7%BE%A4%E6%9C%80%E6%96%B0%E7%AB%A0%E8%8A%82%E7%94%B1%E7%BD%91%E5%8F%8B%E6%8F%90%E4%BE%9B%EF%BC%8C%E3%80%8A%E4%BF%AE%E7%9C%9F%E8%81%8A%E5%A4%A9%E7%BE%A4%E3%80%8B%E6%83%85%E8%8A%82%E8%B7%8C%E5%AE%95%E8%B5%B7%E4%BC%8F%E3%80%81%E6%89%A3%E4%BA%BA%E5%BF%83%E5%BC%A6%EF%BC%8C%E6%98%AF%E4%B8%80%E6%9C%AC%E6%83%85%E8%8A%82%E4%B8%8E%E6%96%87%E7%AC%94%E4%BF%B1%E4%BD%B3%E7%9A%84%E9%83%BD%E5%B8%82%E5%B0%8F%E8%AF%B4%E5%B0%8F%E8%AF%B4%EF%BC%8C%E9%85%B8%E5%91%B3%E4%B9%A6%E5%B1%8B%E5%85%8D%E8%B4%B9%E6%8F%90%E4%BE%9B%E5%94%90%E7%A0%96%E6%9C%80%E6%96%B0%E6%B8%85%E7%88%BD%E5%B9%B2%E5%87%80%E7%9A%84%E6%96%87%E5%AD%97%E7%AB%A0%E8%8A%82%E5%9C%A8%E7%BA%BF%E9%98%85%E8%AF%BB.&url=http%3A//www.zinglizingli.xyz/" + bookNum + "/");
- headers.add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE");
- headers.add("X-Requested-With", "XMLHttpRequest");
- headers.add("Accept-Encoding", "gzip, deflate");
- headers.add("Accept-Language", "zh-CN,zh;q=0.9");
- headers.add("Connection", "keep-alive");
- headers.add("Content-Length", "1146");
- headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
- HttpEntity> request = new HttpEntity<>(map, headers);
-
- ResponseEntity stringResponseEntity = template.postForEntity(baseUrl, request, String.class, map);
-
- return stringResponseEntity.getBody();
- }
-
-
-}
diff --git a/src/main/java/xyz/zinglizingli/common/utils/ContentFactory.java b/src/main/java/xyz/zinglizingli/common/utils/ContentFactory.java
deleted file mode 100644
index 2288057..0000000
--- a/src/main/java/xyz/zinglizingli/common/utils/ContentFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package xyz.zinglizingli.common.utils;
-
-import java.util.*;
-
-public class ContentFactory {
-
-
- private static String[] hotWords = {"雪鹰领主是我吃西红柿写作的一本非常经典的玄幻小说,本站免费提供雪鹰领主最新最全的TXT全文小说阅读。",
- "飞剑问道是我吃西红柿的经典仙侠小说作品,本站提供我吃西红柿TXT小说免费阅读。","" +
- "终极美女保镖小说阅读,《终极美女保镖》情节跌宕起伏、扣人心弦,是一本情节与文笔俱佳的玄幻小说,本站免费提供终极美女保镖最新清爽干净的文字章节在线阅读。",
- "一世倾城:冷宫弃妃,一世倾城:冷宫弃妃小说无弹窗阅读,一世倾城:冷宫弃妃小说无广告全文阅读,作者冷青衫",
- "校花之贴身高手最新章节,VIP章节免费阅读,校花之贴身高手由寂无倾情打造。看精品小说,上看小说吧!",
- "邪王追妻最新章节_邪王追妻免费全文阅读",
- "《最强反派系统》免费阅读,最强反派系统小说最新章节免费阅读,VIP章节免费阅读。",
- "大妖尊小说试阅读,大妖尊,大妖尊全文阅读,大妖尊最新章节",
- "诡秘之主,诡秘之主小说阅读。玄幻小说诡秘之主由作家爱潜水的乌贼创作,看小说吧提供诡秘之主首发最新章节及章节列表,诡秘之主最新更新尽在看小说吧",
- "全球高武,全球高武小说免费阅读。都市小说全球高武由作家老鹰吃小鸡创作,本站提供全球高武小说首发最新免费章节及章节列表,全球高武小说最新更新免费阅读","" +
- "前任无双由作家跃千愁创作,前任无双小说免费阅读,无双首发最新章节及章节列表免费阅读,无弹窗、无广告小说免费月的",
- "万古第一神小说是由作家风青阳所著的东方玄幻小说,本站提供万古第一神小说小说最新章节免费阅读",
- "《剑来》小说是烽火戏诸侯在著作的武侠仙侠, 本站提供无广告、无弹窗的剑来小说最新章节全文免费阅读,请随时关注更新最快的小说阅读网看小说吧。",
- "免费小说阅读,精彩免费小说最新章节尽在看小说吧,小说,小说网;网络小说;小说下载;小说txt,小说全文阅读,无弹窗广告尽在本站",
- "看小说吧收集、整理和免费分享作者几人哀愁的最新免费小说:回到过去当女神最新目录列表,回到过去当女神小说是属于网友受欢迎的奇幻玄幻类型的小说。",
- "大主宰无弹窗无广告最新免费章节由网友提供,《大主宰》小说情节跌宕起伏、扣人心弦:是一本情节与文笔俱佳的玄幻小说,看小说吧小说网免费大主宰最新免费的清爽干净的文字VIP章节在线阅读。",
- "旋风少女小说最新免费章节由网友提供,《旋风少女》是一本受欢迎的情节和文笔俱佳的都市小说,旋风少女无弹窗无广告小说最新章节目录免费阅读,旋风少女VIP章节免费阅读!",
- "斗破苍穹最新章节无弹窗是天蚕土豆倾力打造的一本非常耐读的小说,情节波澜起伏,由浅入深,层层推进,希望你能喜欢本书,支持天蚕土豆请收藏并推荐,斗破苍穹无弹窗最新免费章节目录免费提供"
- ,"九星霸体诀是平凡魔术师写作的一本非常经典的玄幻小说,本站免费提供平凡魔术师最新最全的TXT全文小说阅读。",
- "万古神帝是飞天鱼的经典仙侠小说作品,本站提供万古神帝TXT小说免费阅读。","" +
- "无敌真寂寞小说阅读,《无敌真寂寞》情节跌宕起伏、扣人心弦,是一本情节与文笔俱佳的玄幻小说,本站免费提供无敌真寂寞最新清爽干净的文字章节在线阅读。",
- "绝鼎丹尊,绝鼎丹尊小说无弹窗阅读,绝鼎丹尊小说无广告全文阅读,作者万古青莲",
- "龙王传说最新章节,VIP章节免费阅读,龙王传说由唐家三少打造。看精品小说,上看小说吧!",
- "人道至尊,人道至尊小说阅读。玄幻小说人道至尊由作家宅猪创作,看小说吧提供人道至尊首发最新章节及章节列表,人道至尊最新更新尽在看小说吧小说网",
- "还是地球人狠,还是地球人狠免费阅读。都市小说全球高武由作家剑舞秀创作,本站提供还是地球人狠小说首发最新免费章节及章节列表,全球高武小说最新更新免费阅读","" +
- "《求魔》小说是在耳根著作的武侠仙侠, 本站提供无广告、无弹窗的求魔小说最新章节全文免费阅读,请随时关注更新最快的小说阅读网看小说吧。",
- "看小说吧收集、整理和免费分享作者唐家三少的最新免费小说:天火大道最新目录列表,天火大道小说是属于网友受欢迎的奇幻玄幻类型的小说。",
- "饲养全人类无弹窗无广告最新免费章节由网友提供,《饲养全人类》小说情节跌宕起伏、扣人心弦:是一本情节与文笔俱佳的玄幻小说,看小说吧小说网免费饲养全人类最新免费的清爽干净的文字VIP章节在线阅读。",
- "方外:消失的八门小说最新免费章节由网友提供,《方外:消失的八门》是一本受欢迎的情节和文笔俱佳的都市小说,方外:消失的八门无弹窗无广告小说最新章节目录免费阅读,方外:消失的八门VIP章节免费阅读!",
- "武林赘婿最新章节无弹窗是左山左行倾力打造的一本非常耐读的小说,情节波澜起伏,由浅入深,层层推进,希望你能喜欢本书,支持武林赘婿请收藏并推荐,武林赘婿无弹窗最新免费章节目录免费提供"};
-
-
-
- public static Map giveRandomContent(){
- Map contentMap = new HashMap<>();
- int size = 0;
-
- for(int i = 0 ; i < hotWords.length ; i++){
- if(size >= 18){
- break;
- }
- String value = hotWords[new Random().nextInt(hotWords.length)];
- if(contentMap.values().contains(value)){
- continue;
- }
- contentMap.put("hotWord_"+size,value);
- size++;
- }
- if(size < 18){
- for(int i = 0 ; i< 18 - size ; i++){
- contentMap.put("hotWord_"+size,hotWords[new Random().nextInt(hotWords.length)]);
- size++;
- }
- }
- return contentMap;
-
- }
-}
diff --git a/src/main/java/xyz/zinglizingli/common/utils/NumberUtil.java b/src/main/java/xyz/zinglizingli/common/utils/NumberUtil.java
deleted file mode 100644
index f66bb4f..0000000
--- a/src/main/java/xyz/zinglizingli/common/utils/NumberUtil.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package xyz.zinglizingli.common.utils;
-
-
-public class NumberUtil {
-
- public static int solve(String s) {
- int i = s.indexOf("万");
- if (i != -1) {
- int l = solve(s.substring(0, i));
- int r = solve(s.substring(i+1));
- return l*10000 + r;
- }
- i = s.indexOf("千");
- if (i != -1) {
- int l = solve(s.substring(0, i));
- int r = solve(s.substring(i+1));
- return l*1000 + r;
- }
- i = s.indexOf("百");
- if (i != -1) {
- int l = solve(s.substring(0, i));
- int r = solve(s.substring(i+1));
- return l*100 + r;
- }
- i = s.indexOf("十");
- if (i != -1) {
- int l = solve(s.substring(0, i));
- if (l == 0)
- l = 1;
- int r = solve(s.substring(i+1));
- return l*10 + r;
- }
- i = s.indexOf("零");
- if (i != -1) {
- int l = solve(s.substring(0, i));
- int r = solve(s.substring(i+1));
- return l + r;
- }
- i = 0;
- switch (s) {
- case "九":
- return 9;
- case "八":
- return 8;
- case "七":
- return 7;
- case "六":
- return 6;
- case "五":
- return 5;
- case "四":
- return 4;
- case "三":
- return 3;
- case "二":
- return 2;
- case "一":
- return 1;
- }
- return 0;
- }
- public static String solve(int n) {
- int w = n / 10000, q = n / 1000, b = n / 100, s = n / 10;
- if (w > 0) {
- String l = solve(n/10000);
- String r = solve(n%10000);
- if ((n%10000)/1000 == 0)
- r = "零" + r;
- return l + "万" + r;
- }
- if (q > 0) {
- String l = solve(n/1000);
- String r = solve(n%1000);
- if ((n%1000)/100 == 0)
- r = "零" + r;
- return l + "千" + r;
- }
- if (b > 0) {
- String l = solve(n/100);
- String r = solve(n%100);
- if ((n%100)/10 == 0)
- r = "零" + r;
- return l + "百" + r;
- }
- if (s > 0) {
- String l = solve(n/10);
- String r = solve(n%10);
- return l + "十" + r;
- }
- switch (n){
- case 1:
- return "一";
- case 2:
- return "二";
- case 3:
- return "三";
- case 4:
- return "四";
- case 5:
- return "五";
- case 6:
- return "六";
- case 7:
- return "七";
- case 8:
- return "八";
- case 9:
- return "九";
- }
- return "";
- }
-
- public static void main(String[] args) {
- System.out.println(solve("五百七十八"));
- System.out.println(solve(3786));
- }
-}
diff --git a/src/main/java/xyz/zinglizingli/common/utils/RestTemplateUtil.java b/src/main/java/xyz/zinglizingli/common/utils/RestTemplateUtil.java
deleted file mode 100644
index 2dd180b..0000000
--- a/src/main/java/xyz/zinglizingli/common/utils/RestTemplateUtil.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package xyz.zinglizingli.common.utils;
-
-import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
-import org.springframework.http.converter.HttpMessageConverter;
-import org.springframework.http.converter.StringHttpMessageConverter;
-import org.springframework.web.client.RestTemplate;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-public class RestTemplateUtil {
-
-
- public static RestTemplate getInstance(String charset) {
- HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
- httpRequestFactory.setConnectionRequestTimeout(3000);
- httpRequestFactory.setConnectTimeout(3000);
- httpRequestFactory.setReadTimeout(10000);
- RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
- List> list = restTemplate.getMessageConverters();
- for (HttpMessageConverter> httpMessageConverter : list) {
- if(httpMessageConverter instanceof StringHttpMessageConverter) {
- ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName(charset));
- break;
- }
- }
- return restTemplate;
- }
-
-}
diff --git a/src/main/java/xyz/zinglizingli/common/utils/SpringUtil.java b/src/main/java/xyz/zinglizingli/common/utils/SpringUtil.java
deleted file mode 100644
index 53d452f..0000000
--- a/src/main/java/xyz/zinglizingli/common/utils/SpringUtil.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package xyz.zinglizingli.common.utils;
-
-import org.springframework.context.ApplicationContext;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.stereotype.Component;
-
-import java.io.UnsupportedEncodingException;
-
-
-@Component
-public class SpringUtil implements ApplicationContextAware {
-
-
- public static void main(String[] args) {
- String a = "���";
- try {
- String b = new String(a.getBytes("ISO-8859-1"),"gbk");
- System.out.println(b);
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- }
-
-
- private static ApplicationContext applicationContext;
-
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
- 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/src/main/java/xyz/zinglizingli/common/web/IndexController.java b/src/main/java/xyz/zinglizingli/common/web/IndexController.java
deleted file mode 100644
index bd5749f..0000000
--- a/src/main/java/xyz/zinglizingli/common/web/IndexController.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package xyz.zinglizingli.common.web;
-
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.RequestMapping;
-import xyz.zinglizingli.books.constant.CacheKeyConstans;
-import xyz.zinglizingli.books.po.Book;
-import xyz.zinglizingli.books.service.BookService;
-import xyz.zinglizingli.common.cache.CommonCacheUtil;
-import xyz.zinglizingli.common.config.IndexRecBooksConfig;
-
-import java.util.List;
-import java.util.Map;
-
-@Controller
-@RequestMapping
-public class IndexController {
-
-
- @Autowired
- private BookService bookService;
-
- @Autowired
- private CommonCacheUtil commonCacheUtil;
-
- @Autowired
- private IndexRecBooksConfig indexRecBooksConfig;
-
-
-
-
- @RequestMapping(value = {"/index.html","/","/books","/book","/book/index.html"})
- public String index(ModelMap modelMap){
- List recBooks = (List) commonCacheUtil.getObject(CacheKeyConstans.REC_BOOK_LIST_KEY);
- if (!indexRecBooksConfig.isRead() || recBooks == null) {
- List> configMap = indexRecBooksConfig.getRecBooks();
- //查询推荐书籍数据
- recBooks = bookService.queryRecBooks(configMap);
- commonCacheUtil.setObject(CacheKeyConstans.REC_BOOK_LIST_KEY, recBooks, 60 * 60 * 24 * 10);
- indexRecBooksConfig.setRead(true);
- }
-
-
- List hotBooks = (List) commonCacheUtil.getObject(CacheKeyConstans.HOT_BOOK_LIST_KEY);
- if (hotBooks == null) {
- //查询热点数据
- hotBooks = bookService.search(1, 9, null, null, null, null, null, null, null, "visit_count DESC,score ", "DESC");
- commonCacheUtil.setObject(CacheKeyConstans.HOT_BOOK_LIST_KEY, hotBooks, 60 * 60 * 24);
- }
- List newBooks = (List) commonCacheUtil.getObject(CacheKeyConstans.NEWST_BOOK_LIST_KEY);
- if (newBooks == null) {
- //查询最近更新数据
- newBooks = bookService.search(1, 20, null, null, null, null, null, null, null, "update_time", "DESC");
- commonCacheUtil.setObject(CacheKeyConstans.NEWST_BOOK_LIST_KEY, newBooks, 60 * 30);
- }
- modelMap.put("recBooks", recBooks);
- modelMap.put("hotBooks", hotBooks);
- modelMap.put("newBooks", newBooks);
-
- return "books/index";
- }
-}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
deleted file mode 100644
index 9a41764..0000000
--- a/src/main/resources/application.yml
+++ /dev/null
@@ -1,89 +0,0 @@
-server:
- port: 80
-
-spring:
- datasource:
- url: jdbc:mysql://148.70.59.92:3306/books?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
- username: xiongxiaoyang
- password: Lzslov123!
-# url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf-8
-# username: books
-# password: books
- cache:
- ehcache:
- config: classpath:ehcache.xml
- thymeleaf:
- mode: LEGACYHTML5 #去除thymeleaf的html严格校验thymeleaf.mode=LEGACYHTML5
- cache: true # 是否开启模板缓存,默认true,建议在开发时关闭缓存,不然没法看到实时
- freemarker:
- template-loader-path: classpath:/templates #设定freemarker文件路径 默认为src/main/resources/templatestemplate-loader-path=classpath:/templates
- charset: UTF-8 # 模板编码
- #邮箱服务器
- mail:
- host: smtp.163.com
- #邮箱账户
- username: 13560421324@163.com
- #邮箱第三方授权码
- password: xiong13560421324
- #编码类型
- default-encoding: UTF-8
- port: 465
- properties:
- mail:
- smtp:
- auth: true
- starttls:
- enable: true
- required: rue
- socketFactory:
- port: 465
- class: javax.net.ssl.SSLSocketFactory
- fallback: false
-
-
-
-
-# mvc:
-# static-path-pattern: /static/** #设定静态文件路径,js,css等
-mybatis:
- mapper-locations: classpath:mybatis/mapping/*.xml
- type-aliases-package: xyz.zinglizingli.books.po
-
-
-#首页本站推荐小说配置
-index:
- recBooks:
- - {bookName: 黎明之剑,bookAuthor: 远瞳}
- - {bookName: 诸天投影,bookAuthor: 裴屠狗}
- - {bookName: 我有一座恐怖屋,bookAuthor: 我会修空调}
-
-
-#mysql编码
-mysql:
- charset: utf8mb4
-
-#爬取小说数据的最低评分
-books:
- lowestScore: 6.0
-
-#爬取的网站名称类型 1:笔趣岛 ,2:笔趣塔 更多网站解析中,敬请期待
-crawl:
- website:
- type: 1
-
-search:
- schedule:
- isRunExcute: 0;
-
-
-logging:
- config: classpath:logback-boot.xml
-
-
-baidu:
- record:
- ids: 999999,888888
-
-
-browser:
- cookie: SINAGLOBAL=5945695441587.724.1559298271897; __guid=109181959.2094437407894937900.1565875017257.2095; un=13560421324; _s_tentry=login.sina.com.cn; Apache=967339021599.2916.1567743040489; ULV=1567743040504:8:1:1:967339021599.2916.1567743040489:1566918991855; login_sid_t=d172b083637b1186ebcd624a1259a05f; cross_origin_proto=SSL; appkey=; SSOLoginState=1567744755; YF-Widget-G0=4a4609df0e4ef6187a7b4717d4e6cf12; wvr=6; WBtopGlobal_register_version=307744aa77dd5677; un=13560421324; SCF=AsBEGOtiUG1hPLyZCxI1FunZd9Hg9hWWkgyzcAZjG6AxlhR9sKuWXBhvg1TG9iDWygqPlKun5aazN3Jc6Rky8lQ.; SUB=_2A25wfnGoDeRhGeNL41YR9SnNwzyIHXVTCuRgrDV8PUJbmtANLRWgkW9NSM603g9LJN13ACge6_UUjKxvhLP4TXZi; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WFRg9065OjUyD0aaGsKRxPW5JpX5K-hUgL.Fo-f1hB7SKMp1h52dJLoI0qLxK-L1KqL1-eLxKMLB.-L122LxKMLB.-L122LxK-LBo5L12qLxKnLB-qLBoBLxKMLB.BL1K2t; SUHB=0XDVz5Bh1mkWFA; ALF=1599812938; UOR=,,sf.zinglizingli.xyz; monitor_count=13; webim_unReadCount=%7B%22time%22%3A1568285775036%2C%22dm_pub_total%22%3A1%2C%22chat_group_client%22%3A0%2C%22allcountNum%22%3A29%2C%22msgbox%22%3A0%7D
\ No newline at end of file
diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt
deleted file mode 100644
index d763a17..0000000
--- a/src/main/resources/banner.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-
-|| / | / /
-|| / | / / ___ // ___ ___ _ __
-|| / /||/ / //___) ) // // ) ) // ) ) // ) ) ) )
-||/ / | / // // // // / / // / / / /
-| / | / ((____ // ((____ ((___/ / // / / / / 小说精品屋欢迎您!!!
\ No newline at end of file
diff --git a/src/main/resources/ehcache.xml b/src/main/resources/ehcache.xml
deleted file mode 100644
index 6ccf83d..0000000
--- a/src/main/resources/ehcache.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/logback-boot.xml b/src/main/resources/logback-boot.xml
deleted file mode 100644
index 6f378ac..0000000
--- a/src/main/resources/logback-boot.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ${CONSOLE_LOG_PATTERN}
-
- UTF-8
-
-
-
-
-
-
-
-
- logs/debug.log
-
-
-
-
-
- logs/debug.%d.%i.log
-
- 30
-
-
- 10MB
-
-
-
-
-
- %d %p (%file:%line\)- %m%n
-
-
- UTF-8
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/mybatis/generatorConfig.xml b/src/main/resources/mybatis/generatorConfig.xml
deleted file mode 100644
index 25a1408..0000000
--- a/src/main/resources/mybatis/generatorConfig.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/mybatis/mapping/BookContentMapper.xml b/src/main/resources/mybatis/mapping/BookContentMapper.xml
deleted file mode 100644
index 1eb1d04..0000000
--- a/src/main/resources/mybatis/mapping/BookContentMapper.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
- id, book_id, index_id, index_num, content
-
-
-
-
- delete from book_content
- where id = #{id,jdbcType=BIGINT}
-
-
- delete from book_content
-
-
-
-
-
- insert into book_content (id, book_id, index_id,
- index_num, content)
- values (#{id,jdbcType=BIGINT}, #{bookId,jdbcType=BIGINT}, #{indexId,jdbcType=BIGINT},
- #{indexNum,jdbcType=INTEGER}, #{content,jdbcType=VARCHAR})
-
-
- insert into book_content
-
-
- id,
-
-
- book_id,
-
-
- index_id,
-
-
- index_num,
-
-
- content,
-
-
-
-
- #{id,jdbcType=BIGINT},
-
-
- #{bookId,jdbcType=BIGINT},
-
-
- #{indexId,jdbcType=BIGINT},
-
-
- #{indexNum,jdbcType=INTEGER},
-
-
- #{content,jdbcType=VARCHAR},
-
-
-
-
-
- update book_content
-
-
- id = #{record.id,jdbcType=BIGINT},
-
-
- book_id = #{record.bookId,jdbcType=BIGINT},
-
-
- index_id = #{record.indexId,jdbcType=BIGINT},
-
-
- index_num = #{record.indexNum,jdbcType=INTEGER},
-
-
- content = #{record.content,jdbcType=VARCHAR},
-
-
-
-
-
-
-
- update book_content
- set id = #{record.id,jdbcType=BIGINT},
- book_id = #{record.bookId,jdbcType=BIGINT},
- index_id = #{record.indexId,jdbcType=BIGINT},
- index_num = #{record.indexNum,jdbcType=INTEGER},
- content = #{record.content,jdbcType=VARCHAR}
-
-
-
-
-
- update book_content
-
-
- book_id = #{bookId,jdbcType=BIGINT},
-
-
- index_id = #{indexId,jdbcType=BIGINT},
-
-
- index_num = #{indexNum,jdbcType=INTEGER},
-
-
- content = #{content,jdbcType=VARCHAR},
-
-
- where id = #{id,jdbcType=BIGINT}
-
-
- update book_content
- set book_id = #{bookId,jdbcType=BIGINT},
- index_id = #{indexId,jdbcType=BIGINT},
- index_num = #{indexNum,jdbcType=INTEGER},
- content = #{content,jdbcType=VARCHAR}
- where id = #{id,jdbcType=BIGINT}
-
-
-
-
- insert into book_content (book_id, index_num, content)
- values
-
-
- #{item.bookId,jdbcType=VARCHAR},
- #{item.indexNum,jdbcType=VARCHAR},
- #{item.content,jdbcType=VARCHAR},
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/mybatis/mapping/BookIndexMapper.xml b/src/main/resources/mybatis/mapping/BookIndexMapper.xml
deleted file mode 100644
index 5400ea4..0000000
--- a/src/main/resources/mybatis/mapping/BookIndexMapper.xml
+++ /dev/null
@@ -1,223 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
- id, book_id, index_num, index_name
-
-
-
-
- delete from book_index
- where id = #{id,jdbcType=BIGINT}
-
-
- delete from book_index
-
-
-
-
-
- insert into book_index (id, book_id, index_num,
- index_name)
- values (#{id,jdbcType=BIGINT}, #{bookId,jdbcType=BIGINT}, #{indexNum,jdbcType=INTEGER},
- #{indexName,jdbcType=VARCHAR})
-
-
- insert into book_index
-
-
- id,
-
-
- book_id,
-
-
- index_num,
-
-
- index_name,
-
-
-
-
- #{id,jdbcType=BIGINT},
-
-
- #{bookId,jdbcType=BIGINT},
-
-
- #{indexNum,jdbcType=INTEGER},
-
-
- #{indexName,jdbcType=VARCHAR},
-
-
-
-
-
- update book_index
-
-
- id = #{record.id,jdbcType=BIGINT},
-
-
- book_id = #{record.bookId,jdbcType=BIGINT},
-
-
- index_num = #{record.indexNum,jdbcType=INTEGER},
-
-
- index_name = #{record.indexName,jdbcType=VARCHAR},
-
-
-
-
-
-
-
- update book_index
- set id = #{record.id,jdbcType=BIGINT},
- book_id = #{record.bookId,jdbcType=BIGINT},
- index_num = #{record.indexNum,jdbcType=INTEGER},
- index_name = #{record.indexName,jdbcType=VARCHAR}
-
-
-
-
-
- update book_index
-
-
- book_id = #{bookId,jdbcType=BIGINT},
-
-
- index_num = #{indexNum,jdbcType=INTEGER},
-
-
- index_name = #{indexName,jdbcType=VARCHAR},
-
-
- where id = #{id,jdbcType=BIGINT}
-
-
- update book_index
- set book_id = #{bookId,jdbcType=BIGINT},
- index_num = #{indexNum,jdbcType=INTEGER},
- index_name = #{indexName,jdbcType=VARCHAR}
- where id = #{id,jdbcType=BIGINT}
-
-
-
-
- insert into book_index (book_id, index_num, index_name)
- values
-
-
- #{item.bookId,jdbcType=VARCHAR},
- #{item.indexNum,jdbcType=VARCHAR},
- #{item.indexName,jdbcType=VARCHAR},
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/mybatis/mapping/BookMapper.xml b/src/main/resources/mybatis/mapping/BookMapper.xml
deleted file mode 100644
index cd89155..0000000
--- a/src/main/resources/mybatis/mapping/BookMapper.xml
+++ /dev/null
@@ -1,391 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
- id, catId, pic_url, book_name, author, book_desc, score, book_status, visit_count,
- update_time,soft_cat,soft_tag
-
-
-
-
- delete from book
- where id = #{id,jdbcType=BIGINT}
-
-
- delete from book
-
-
-
-
-
- insert into book (id, catId, pic_url,
- book_name, author, book_desc,
- score, book_status, visit_count,
- update_time)
- values (#{id,jdbcType=BIGINT}, #{catid,jdbcType=INTEGER}, #{picUrl,jdbcType=VARCHAR},
- #{bookName,jdbcType=VARCHAR}, #{author,jdbcType=VARCHAR}, #{bookDesc,jdbcType=VARCHAR},
- #{score,jdbcType=REAL}, #{bookStatus,jdbcType=VARCHAR}, #{visitCount,jdbcType=BIGINT},
- #{updateTime,jdbcType=TIMESTAMP})
-
-
- insert into book
-
-
- id,
-
-
- catId,
-
-
- pic_url,
-
-
- book_name,
-
-
- author,
-
-
- book_desc,
-
-
- score,
-
-
- book_status,
-
-
- visit_count,
-
-
- update_time,
-
-
-
-
- #{id,jdbcType=BIGINT},
-
-
- #{catid,jdbcType=INTEGER},
-
-
- #{picUrl,jdbcType=VARCHAR},
-
-
- #{bookName,jdbcType=VARCHAR},
-
-
- #{author,jdbcType=VARCHAR},
-
-
- #{bookDesc,jdbcType=VARCHAR},
-
-
- #{score,jdbcType=REAL},
-
-
- #{bookStatus,jdbcType=VARCHAR},
-
-
- #{visitCount,jdbcType=BIGINT},
-
-
- #{updateTime,jdbcType=TIMESTAMP},
-
-
-
-
-
- update book
-
-
- id = #{record.id,jdbcType=BIGINT},
-
-
- catId = #{record.catid,jdbcType=INTEGER},
-
-
- pic_url = #{record.picUrl,jdbcType=VARCHAR},
-
-
- book_name = #{record.bookName,jdbcType=VARCHAR},
-
-
- author = #{record.author,jdbcType=VARCHAR},
-
-
- book_desc = #{record.bookDesc,jdbcType=VARCHAR},
-
-
- score = #{record.score,jdbcType=REAL},
-
-
- book_status = #{record.bookStatus,jdbcType=VARCHAR},
-
-
- visit_count = #{record.visitCount,jdbcType=BIGINT},
-
-
- update_time = #{record.updateTime,jdbcType=TIMESTAMP},
-
-
-
-
-
-
-
- update book
- set id = #{record.id,jdbcType=BIGINT},
- catId = #{record.catid,jdbcType=INTEGER},
- pic_url = #{record.picUrl,jdbcType=VARCHAR},
- book_name = #{record.bookName,jdbcType=VARCHAR},
- author = #{record.author,jdbcType=VARCHAR},
- book_desc = #{record.bookDesc,jdbcType=VARCHAR},
- score = #{record.score,jdbcType=REAL},
- book_status = #{record.bookStatus,jdbcType=VARCHAR},
- visit_count = #{record.visitCount,jdbcType=BIGINT},
- update_time = #{record.updateTime,jdbcType=TIMESTAMP}
-
-
-
-
-
- update book
-
-
- catId = #{catid,jdbcType=INTEGER},
-
-
- pic_url = #{picUrl,jdbcType=VARCHAR},
-
-
- book_name = #{bookName,jdbcType=VARCHAR},
-
-
- author = #{author,jdbcType=VARCHAR},
-
-
- book_desc = #{bookDesc,jdbcType=VARCHAR},
-
-
- score = #{score,jdbcType=REAL},
-
-
- book_status = #{bookStatus,jdbcType=VARCHAR},
-
-
- visit_count = #{visitCount,jdbcType=BIGINT},
-
-
- update_time = #{updateTime,jdbcType=TIMESTAMP},
-
-
- where id = #{id,jdbcType=BIGINT}
-
-
- update book
- set catId = #{catid,jdbcType=INTEGER},
- pic_url = #{picUrl,jdbcType=VARCHAR},
- book_name = #{bookName,jdbcType=VARCHAR},
- author = #{author,jdbcType=VARCHAR},
- book_desc = #{bookDesc,jdbcType=VARCHAR},
- score = #{score,jdbcType=REAL},
- book_status = #{bookStatus,jdbcType=VARCHAR},
- visit_count = #{visitCount,jdbcType=BIGINT},
- update_time = #{updateTime,jdbcType=TIMESTAMP}
- where id = #{id,jdbcType=BIGINT}
-
-
-
-
-
-
-
- update book set visit_count = visit_count + 1
- where id = #{bookId,jdbcType=BIGINT}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/mybatis/mapping/CategoryMapper.xml b/src/main/resources/mybatis/mapping/CategoryMapper.xml
deleted file mode 100644
index 0eb67db..0000000
--- a/src/main/resources/mybatis/mapping/CategoryMapper.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
- id, name, sort, get_url, req_url
-
-
-
-
- delete from category
- where id = #{id,jdbcType=INTEGER}
-
-
- delete from category
-
-
-
-
-
- insert into category (id, name, sort,
- get_url, req_url)
- values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{sort,jdbcType=TINYINT},
- #{getUrl,jdbcType=VARCHAR}, #{reqUrl,jdbcType=VARCHAR})
-
-
- insert into category
-
-
- id,
-
-
- name,
-
-
- sort,
-
-
- get_url,
-
-
- req_url,
-
-
-
-
- #{id,jdbcType=INTEGER},
-
-
- #{name,jdbcType=VARCHAR},
-
-
- #{sort,jdbcType=TINYINT},
-
-
- #{getUrl,jdbcType=VARCHAR},
-
-
- #{reqUrl,jdbcType=VARCHAR},
-
-
-
-
-
- update category
-
-
- id = #{record.id,jdbcType=INTEGER},
-
-
- name = #{record.name,jdbcType=VARCHAR},
-
-
- sort = #{record.sort,jdbcType=TINYINT},
-
-
- get_url = #{record.getUrl,jdbcType=VARCHAR},
-
-
- req_url = #{record.reqUrl,jdbcType=VARCHAR},
-
-
-
-
-
-
-
- update category
- set id = #{record.id,jdbcType=INTEGER},
- name = #{record.name,jdbcType=VARCHAR},
- sort = #{record.sort,jdbcType=TINYINT},
- get_url = #{record.getUrl,jdbcType=VARCHAR},
- req_url = #{record.reqUrl,jdbcType=VARCHAR}
-
-
-
-
-
- update category
-
-
- name = #{name,jdbcType=VARCHAR},
-
-
- sort = #{sort,jdbcType=TINYINT},
-
-
- get_url = #{getUrl,jdbcType=VARCHAR},
-
-
- req_url = #{reqUrl,jdbcType=VARCHAR},
-
-
- where id = #{id,jdbcType=INTEGER}
-
-
- update category
- set name = #{name,jdbcType=VARCHAR},
- sort = #{sort,jdbcType=TINYINT},
- get_url = #{getUrl,jdbcType=VARCHAR},
- req_url = #{reqUrl,jdbcType=VARCHAR}
- where id = #{id,jdbcType=INTEGER}
-
-
\ No newline at end of file
diff --git a/src/main/resources/mybatis/mapping/ScreenBulletMapper.xml b/src/main/resources/mybatis/mapping/ScreenBulletMapper.xml
deleted file mode 100644
index 9594d99..0000000
--- a/src/main/resources/mybatis/mapping/ScreenBulletMapper.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
- id, content_id, screen_bullet, create_time
-
-
-
-
- delete from screen_bullet
- where id = #{id,jdbcType=BIGINT}
-
-
- delete from screen_bullet
-
-
-
-
-
- insert into screen_bullet (id, content_id, screen_bullet,
- create_time)
- values (#{id,jdbcType=BIGINT}, #{contentId,jdbcType=BIGINT}, #{screenBullet,jdbcType=VARCHAR},
- #{createTime,jdbcType=TIMESTAMP})
-
-
- insert into screen_bullet
-
-
- id,
-
-
- content_id,
-
-
- screen_bullet,
-
-
- create_time,
-
-
-
-
- #{id,jdbcType=BIGINT},
-
-
- #{contentId,jdbcType=BIGINT},
-
-
- #{screenBullet,jdbcType=VARCHAR},
-
-
- #{createTime,jdbcType=TIMESTAMP},
-
-
-
-
-
- update screen_bullet
-
-
- id = #{record.id,jdbcType=BIGINT},
-
-
- content_id = #{record.contentId,jdbcType=BIGINT},
-
-
- screen_bullet = #{record.screenBullet,jdbcType=VARCHAR},
-
-
- create_time = #{record.createTime,jdbcType=TIMESTAMP},
-
-
-
-
-
-
-
- update screen_bullet
- set id = #{record.id,jdbcType=BIGINT},
- content_id = #{record.contentId,jdbcType=BIGINT},
- screen_bullet = #{record.screenBullet,jdbcType=VARCHAR},
- create_time = #{record.createTime,jdbcType=TIMESTAMP}
-
-
-
-
-
- update screen_bullet
-
-
- content_id = #{contentId,jdbcType=BIGINT},
-
-
- screen_bullet = #{screenBullet,jdbcType=VARCHAR},
-
-
- create_time = #{createTime,jdbcType=TIMESTAMP},
-
-
- where id = #{id,jdbcType=BIGINT}
-
-
- update screen_bullet
- set content_id = #{contentId,jdbcType=BIGINT},
- screen_bullet = #{screenBullet,jdbcType=VARCHAR},
- create_time = #{createTime,jdbcType=TIMESTAMP}
- where id = #{id,jdbcType=BIGINT}
-
-
\ No newline at end of file
diff --git a/src/main/resources/mybatis/mapping/UserMapper.xml b/src/main/resources/mybatis/mapping/UserMapper.xml
deleted file mode 100644
index 44384ba..0000000
--- a/src/main/resources/mybatis/mapping/UserMapper.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
- id, login_name, password
-
-
-
-
- delete from user
- where id = #{id,jdbcType=BIGINT}
-
-
- delete from user
-
-
-
-
-
- insert into user (id, login_name, password
- )
- values (#{id,jdbcType=BIGINT}, #{loginName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}
- )
-
-
- insert into user
-
-
- id,
-
-
- login_name,
-
-
- password,
-
-
-
-
- #{id,jdbcType=BIGINT},
-
-
- #{loginName,jdbcType=VARCHAR},
-
-
- #{password,jdbcType=VARCHAR},
-
-
-
-
-
- update user
-
-
- id = #{record.id,jdbcType=BIGINT},
-
-
- login_name = #{record.loginName,jdbcType=VARCHAR},
-
-
- password = #{record.password,jdbcType=VARCHAR},
-
-
-
-
-
-
-
- update user
- set id = #{record.id,jdbcType=BIGINT},
- login_name = #{record.loginName,jdbcType=VARCHAR},
- password = #{record.password,jdbcType=VARCHAR}
-
-
-
-
-
- update user
-
-
- login_name = #{loginName,jdbcType=VARCHAR},
-
-
- password = #{password,jdbcType=VARCHAR},
-
-
- where id = #{id,jdbcType=BIGINT}
-
-
- update user
- set login_name = #{loginName,jdbcType=VARCHAR},
- password = #{password,jdbcType=VARCHAR}
- where id = #{id,jdbcType=BIGINT}
-
-
\ No newline at end of file
diff --git a/src/main/resources/mybatis/mapping/UserRefBookMapper.xml b/src/main/resources/mybatis/mapping/UserRefBookMapper.xml
deleted file mode 100644
index 89c23f8..0000000
--- a/src/main/resources/mybatis/mapping/UserRefBookMapper.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- and ${criterion.condition}
-
-
- and ${criterion.condition} #{criterion.value}
-
-
- and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-
-
- and ${criterion.condition}
-
- #{listItem}
-
-
-
-
-
-
-
-
-
-
- id, user_id, book_id
-
-
-
-
- delete from user_ref_book
- where id = #{id,jdbcType=BIGINT}
-
-
- delete from user_ref_book
-
-
-
-
-
- insert into user_ref_book (id, user_id, book_id
- )
- values (#{id,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, #{bookId,jdbcType=BIGINT}
- )
-
-
- insert into user_ref_book
-
-
- id,
-
-
- user_id,
-
-
- book_id,
-
-
-
-
- #{id,jdbcType=BIGINT},
-
-
- #{userId,jdbcType=BIGINT},
-
-
- #{bookId,jdbcType=BIGINT},
-
-
-
-
-
- update user_ref_book
-
-
- id = #{record.id,jdbcType=BIGINT},
-
-
- user_id = #{record.userId,jdbcType=BIGINT},
-
-
- book_id = #{record.bookId,jdbcType=BIGINT},
-
-
-
-
-
-
-
- update user_ref_book
- set id = #{record.id,jdbcType=BIGINT},
- user_id = #{record.userId,jdbcType=BIGINT},
- book_id = #{record.bookId,jdbcType=BIGINT}
-
-
-
-
-
- update user_ref_book
-
-
- user_id = #{userId,jdbcType=BIGINT},
-
-
- book_id = #{bookId,jdbcType=BIGINT},
-
-
- where id = #{id,jdbcType=BIGINT}
-
-
- update user_ref_book
- set user_id = #{userId,jdbcType=BIGINT},
- book_id = #{bookId,jdbcType=BIGINT}
- where id = #{id,jdbcType=BIGINT}
-
-
\ No newline at end of file
diff --git a/src/main/resources/static/HotBook.apk b/src/main/resources/static/HotBook.apk
deleted file mode 100644
index 346fb9a6bb602de5e48f13e0d96a2e1eee8ca563..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 184572
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