{"id":26913751,"url":"https://github.com/luoye6/vue_bookmanagesystem_backend","last_synced_at":"2025-04-09T06:12:04.897Z","repository":{"id":158607552,"uuid":"606286071","full_name":"luoye6/Vue_BookManageSystem_backend","owner":"luoye6","description":"智能GPT图书管理系统（SpringBoot2+Vue2),全局异常拦截器，登录校验拦截器，Echarts展示借阅量，可添加爬虫功能获取图书数据。API认证采用JWT。后端CORS跨域支持。HTTP Status Code表示状态。数据返回格式JSON。接入GPT接口，支持AI智能图书馆。","archived":false,"fork":false,"pushed_at":"2025-03-25T07:43:37.000Z","size":676,"stargazers_count":132,"open_issues_count":0,"forks_count":11,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-01T16:50:57.060Z","etag":null,"topics":["java","javascript","json","mybatis","springboot","vue"],"latest_commit_sha":null,"homepage":"https://www.xiaobaitiao.top/#/login","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luoye6.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-25T03:16:30.000Z","updated_at":"2025-04-01T15:57:53.000Z","dependencies_parsed_at":"2025-03-17T03:24:34.975Z","dependency_job_id":"a40cfc3f-e8fd-4756-8a5d-13147dec3a8d","html_url":"https://github.com/luoye6/Vue_BookManageSystem_backend","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luoye6%2FVue_BookManageSystem_backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luoye6%2FVue_BookManageSystem_backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luoye6%2FVue_BookManageSystem_backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luoye6%2FVue_BookManageSystem_backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luoye6","download_url":"https://codeload.github.com/luoye6/Vue_BookManageSystem_backend/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247987285,"owners_count":21028895,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","javascript","json","mybatis","springboot","vue"],"created_at":"2025-04-01T16:39:52.105Z","updated_at":"2025-04-09T06:12:04.889Z","avatar_url":"https://github.com/luoye6.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 智能图书馆开源文档\n\n\u003e作者：[程序员小白条](https://luoye6.github.io/)\n\u003e\n\u003e[Gitee 主页](https://gitee.com/falle22222n-leaves)\n\u003e\n\u003e[GitHub 主页](https://github.com/luoye6)\n\nLanguage：**[English](README_en.md)**| **[中文](README.md).**\n\n## ☀️新手必读\n\n+ 本项目拥有完整的API后台接口文档（文尾)(重点⭐)\n+ 未经本人允许擅自将本项目作于商用、竞赛、贩卖源码、毕设擅自改动作者等违法行为，将依法追究法律责任，后果自负，项目已申请软件著作权。\n+ 如果项目对您有所帮助，可以Star⭐一下，受到鼓励的我会继续加油。\n+ [项目在线演示地址](https://www.xiaobaitiao.top)\n+ [项目前端地址](https://gitee.com/falle22222n-leaves/vue_-book-manage-system)\n+ [项目后端地址](https://gitee.com/falle22222n-leaves/vue_-book-manage-system_backend)\n+ [项目部署视频](https://www.bilibili.com/video/BV1Zh4y1z7QE/?spm_id_from=333.999.0.0)\n\n[![star](https://gitee.com/falle22222n-leaves/vue_-book-manage-system/badge/star.svg?theme=dark)](https://gitee.com/falle22222n-leaves/vue_-book-manage-system)  [![gitee](https://badgen.net/badge/gitee/falle22222n-leaves/red)](https://gitee.com/falle22222n-leaves)  [![github](https://badgen.net/badge/github/github?icon)](https://github.com/luoye6)\n\n## 黑马程序员推荐作品(doge)\n![](https://pic.yupi.icu/5563/202503251541861.png)\n\n## ☀️个人介绍\n\n![](https://pic.yupi.icu/5563/202403021406388.png)\n\n![](https://pic.yupi.icu/5563/202403021406360.png)\n\n## 🐼新项目上线（开新坑）\n智能 AI 旅游推荐平台上线！欢迎收藏和 Fork，技术栈 Vue3+SpringBoot2+TypeScript，UI 设计更加美观，且可以自定义主题颜色，支持讯飞星火 AI 大模型和可添加协同过滤算法。\n+ [项目在线演示地址](https://www.xiaobaitiao.icu)\n+ [项目前端地址](https://gitee.com/falle22222n-leaves/vue3_tourism_frontend)\n+ [项目后端地址](https://gitee.com/falle22222n-leaves/vue3_tourism_backend)\n\n## ☀️项目介绍\n\n**AI 智能图书馆**（AI Intelligent Library）是一个利用 AI 模型和数据分析对用户所喜欢的图书进行精准推荐的系统，并且提供了 AIGC 的在线生成借阅量分析的 BI 图表功能，能够起到一个数据分析师的作用。其主要有三大使用者：用户（借阅人）、图书管理员、系统管理员。\n\n\u003e Ps：如果你想要简易和新颖，那么这个项目将会是不错的选择~\n\n![](https://pic.yupi.icu/5563/202403041924533.png)\n\n![](https://pic.yupi.icu/5563/202403041924237.png)\n\n## ☀️功能和特性\n\n### 用户功能\n\n1）图书查询功能：分页构造器缓解数据过大压力，后端可设置请求数防止爬虫请求数过大，服务器负载过大。模糊查询进行字段搜索。表格均**可导出 PDF 和 EXCEL**。\n\n2）读者规则功能：查询现有的借阅规则，借阅规则包括：借阅编号，可借阅图书数量，可借阅天数，可借阅图书馆，过期扣费/天。\n\n3）查看公告: 可以查询图书管理员发布的公告列表，**文字滑动效果**。\n\n4）个人信息: 可以查看个人的借阅证编号，借阅证姓名，规则编号，状态，可以修改个人账户的密码。\n\n5）借阅信息: 可以查看自身借阅过的图书记录和归还情况。\n\n6）违章信息: 可以查询自身归还的图书是否有违章信息。\n\n7）读者留言: 实现留言功能并以**弹幕形式**显示。\n\n8）**智能推荐**用户输入自己的偏好，AI 根据数据库书籍列表和用户偏好，给用户推荐书籍。\n\n### 图书管理员功能\n\n1）借阅图书: 图书管理员输入借阅证号(用户)和要借的图书编号和当前的时间，点击借阅。\n\n2）归还图书: 输入图书编号查看图书是否逾期，并且可以设置违规信息，然后选择是否归还图书。\n\n3）借书报表: 用于查询已经借阅并归还的书籍列表，同样使用分页构造器和模糊查询字段，显示借阅证编号，图书编号，借阅日期，截止日期，归还日期，违章信息，处理人。\n\n4）还书报表: 用于查询已经借阅但是还未归还的书籍列表，显示借阅证编号，图书编号，借阅日期，截止日期。\n\n5）发布公告: 可以查询当前发布的公告列表，并进行删除，修改，增加功能，分页构造器用于缓解数据量大的情况。\n\n### 系统管理员功能\n\n1）书籍管理: 可以查询当前的所有图书，显示图书编号，图书昵称，作者，图书馆，分类，位置，状态，描述。可以进行添加，修改，删除图书。利用分页构造器实现批量查询。利用模糊查询实现图书搜索功能。**利用插件实现 PDF 和 EXCEL 导出**。\n\n2）书籍类型: 显示查询当前的所有图书类型，可以进行添加，修改，删除图书类型，利用分页构造器实现批量查询，缓解数据压力。\n\n3）借阅证管理: 可以查询当前的所有借阅证列表，也就是用户数量，可以进行添加，修改，删除操作。同样实现分页。\n\n4）借阅信息查询: 可以查询当前已经完成借阅和归还的记录，显示借阅证号，书籍编号，借阅日期，截止日期，归还日期，违章信息，处理人。分页功能，PDF 和 EXCEL 导出。\n\n5）借阅规则管理: 可以查询当前所有的借阅规则，显示限制借阅天数，限制本数，限制图书馆，逾期费用，可以进行添加、删除、修改操作。\n\n6）图书管理员管理: 显示当前的图书管理员列表，显示账号，姓名，邮箱，可以进行添加、删除、修改操作。\n\n7）系统管理: 可以查询一个月内的借阅量，以一周为时间间隔，计算借阅量，**用 Echarts 实现各种图表的展示**。\n\n8）系统分析：可以上传某个时间段的借阅量和日期，并且输入分析目标和想要生成的图表类型，等待一段时间后，**AI 将会给出分析结论和可视化图表**。\n\n### 特性（亮点）\n\n1）本项目采用前后端分离的模式，前端构建页面，后端作数据接口，前端调用后端数据接口得到数据，重新渲染页面。\n\n2）前端在 Authorization 字段提供 Token 令牌，API 认证使用 Token 认证，使用 HTTP Status Code 表示状态，数据返回格式使用 JSON。\n\n3）后端已开启 CORS 跨域支持，采用权限拦截器进行权限校验，并检查登录情况。\n\n4）添加全局异常处理机制，捕获异常，增强系统健壮性。\n\n5）前端用 Echarts 可视化库实现了图书借阅的分析图标（折线图、饼图），并通过 Loading 配置提高加载体验。\n\n6）留言组件采用弹幕形式，贴合用户的喜好。\n\n7）引入 knife4j 依赖，使用 Swagger + Knife4j 自动生成 OpenAPI 规范的接口文档，前端可以在此基础上使用插件自动生成接口请求代码，降低前后端协作成本\n\n8）使用 ElementUI 组件库进行前端界面搭建，快速实现页面生成，并实现了前后端统一权限管理，多环境切换等能力。\n\n9）基于 MyBatis Plus 框架的 QueryWrapper 实现对 MySQL 数据库的灵活查询，并配合 MyBatisX 插件自动生成后端 CRUD 基础代码，减少重复工作。\n\n10）前端路由懒加载、CDN 静态资源缓存优化、图片懒加载效果。\n\n## ☀️运行方式\n\n### 2 分钟快速上手使用项目\n\n1）找到 SpringBoot 启动类，点击运行\n\n![](https://pic.yupi.icu/5563/202403041925113.png)\n\n2）打开 Knife4J 注册用户，或者可以直接找我拿数据库模拟数据（简易）。\n\n![](https://pic.yupi.icu/5563/202403041925196.png)\n\n![](https://pic.yupi.icu/5563/202403041925244.png)\n\n3）前端输入表单内容后点击登录即可成功，开始愉快使用功能~\n\n![](https://pic.yupi.icu/5563/202403041925792.png)\n\n![](https://pic.yupi.icu/5563/202403041925648.png)\n\n## ☀️部署方式\n\n### 前置条件\n\n**前端**\n\n软件：Vscode 或者 Webstorm（推荐）\n\n环境：Node 版本 16 或者 18（推荐） **注：千万别选 18 以上的版本！**\n\n**后端**\n\n软件：Eclipse 或者 IDEA（推荐）\n\n环境：MySQL 5.7 或者 8.0（推荐）Redis（可选）\n\n### 前端部署\n\n1）点击克隆/下载项目，会使用 Git 进行版本控制的，推荐 Git Clone，不会的小伙伴可以选择下载一个 Zip 压缩包，然后解压到自己电脑的 D 盘，推荐直接 Star，后续直接向我拿数据库模拟文件和 API 接口文档。\n\n![](https://pic.yupi.icu/5563/202403041926975.png)\n\n2）利用 Vscode 或者 Webstorm 打开前端页面，配置 Configuration。配置 Node 环境和包管理工具即可，我这边选择的包管理工具是 Npm，其他包管理工具如：Yarn、Cnpm、Pnpm 皆可。 **注：注意更改 Npm 的镜像地址为淘宝的新镜像地址，否则会出现 Npm Install 一直卡进度条的情况。**\n\n3）直接点击 dev 的运行，或者打开控制台，输入 npm run serve 即可成功启动前端项目。\n\n```shell\nnpm config set registry https://registry.npmmirror.com/\n```\n\n![](https://pic.yupi.icu/5563/202403041926892.png)\n\n![](https://pic.yupi.icu/5563/202403041926931.png)\n\n![](https://pic.yupi.icu/5563/202403041926639.png)\n\n4）将图片链接进行自定义切换，可以切换为你自己的图床的图片链接，比如七牛云、GitHub 等，也可以寻找在线图片，复制百度文库图片链接（多试几次，有些图片有防盗链）。**更换背景后，可以看到右下角的权限切换小图标。**\n\n![](https://pic.yupi.icu/5563/202403041926849.png)\n\n![](https://pic.yupi.icu/5563/202403041926100.png)\n\n\n\n### 后端部署\n\n1）点击克隆/下载项目，会使用 Git 进行版本控制的，推荐 Git Clone，不会的小伙伴可以选择下载一个 Zip 压缩包，然后解压到自己电脑的 D 盘，推荐直接 Star，后续直接向我拿数据库模拟文件和 API 接口文档。\n\n![](https://pic.yupi.icu/5563/202403041926093.png)\n\n2）领取数据库模拟文件后，利用 Navicat 或者 SQLYog 等软件导入数据库文件，记得先建立一个名为 bms_boot 的数据库，然后右键点击运行 SQL 文件即可，运行成功，无报错后，重新打开数据库，检查是否有数据，如果有数据，表明导入成功。\n\n![](https://pic.yupi.icu/5563/202403041926256.png)\n\n![](https://pic.yupi.icu/5563/202403041926292.png)\n\n3）用 IDEA 打开后端项目，找到 application-dev.yml 文件，修改其中的 MySQL 配置，保证用户名和密码正确，注：密码不能以数字 0 开头。\n\n![](https://pic.yupi.icu/5563/202403041926672.png)\n\n4）导入 Maven 依赖，注意看自己的 Maven 版本是否正确，建议选择跟我一样的，3.8以上的版本，发现依赖导入很慢，是因为没有配置国内镜像，默认连接的是国外服务器，因此阿里云镜像配置可以看这篇博客。[CSDN Maven 配置教程](https://blog.csdn.net/lianghecai52171314/article/details/102625184?ops_request_misc=\u0026request_id=\u0026biz_id=102\u0026utm_term=Maven)\n\n![](https://pic.yupi.icu/5563/202403041926747.png)\n\n5）找到 SpringBoot 启动类，我建议用 Debug 模式启动项目，更好排查错误。\n\n![](https://pic.yupi.icu/5563/202403041926037.png)\n\n6）如果遇到错误，大概率可能是 JDK 版本问题，我项目用的是 JDK 8，建议选择与我相同版本。\n\n![](https://pic.yupi.icu/5563/202403041926752.png)\n\n![](https://pic.yupi.icu/5563/202403041926887.png)\n\n7）成功启动项目效果展示如下\n\n![](https://pic.yupi.icu/5563/202403041926993.png)\n\n### 前后端联调\n\n1）如果需要修改端口和前缀（比如/api），需要同时修改前端和后端。\n\n![](https://pic.yupi.icu/5563/202403041926975.png)\n\n![](https://pic.yupi.icu/5563/202403041926787.png)\n\n## ☀️技术选型\n\n### 前端\n\n| **技术**                     | **作用**                                                     | **版本**                                             |\n| ---------------------------- | ------------------------------------------------------------ | ---------------------------------------------------- |\n| Vue                          | 提供前端交互                                                 | 2.6.14                                               |\n| Vue-Router                   | 路由式编程导航                                               | 3.5.1                                                |\n| Element-UI                   | 模块组件库，绘制界面                                         | 2.4.5                                                |\n| Axios                        | 发送ajax请求给后端请求数据                                   | 1.2.1                                                |\n| core-js                      | 兼容性更强，浏览器适配                                       | 3.8.3                                                |\n| swiper                       | 轮播图插件（快速实现)                                        | 3.4.2                                                |\n| vue-baberrage                | vue弹幕插件(实现留言功能)                                    | 3.2.4                                                |\n| vue-json-excel               | 表格导出Excel                                                | 0.3.0                                                |\n| html2canvas+jspdf            | 表格导出PDF                                                  | 1.4.1 2.5.1                                          |\n| node-polyfill-webpack-plugin | webpack5中移除了nodejs核心模块的polyfill自动引入             | 2.0.1                                                |\n| default-passive-events       | **Chrome** 增加了新的事件捕获机制 **Passive Event Listeners**（被动事件侦听器) | 让页面滑动更加流畅，主要用于提升移动端滑动行为的性能 |\n| nprogress                    | 发送请求显示进度条(人机交互友好)                             | 0.2.0                                                |\n| echarts                      | 数据转图标的好工具(功能强大)                                 | 5.4.1                                                |\n| less lessloader              | 方便样式开发                                                 | 4.1.3 11.1.0                                         |\n\n### 后端\n\n| **技术及版本**                       | **作用**                                                     | **版本**                          |\n| ------------------------------------ | ------------------------------------------------------------ | --------------------------------- |\n| SpringBoot                           | 应用开发框架                                                 | 2.7.8                             |\n| JDK                                  | Java 开发包                                                  | 1.8                               |\n| MySQL                                | 提供后端数据库                                               | 8.0.23                            |\n| MyBatisPlus                          | 提供连接数据库和快捷的增删改查                               | 3.5.1                             |\n| SpringBoot-Configuration-processor   | 配置处理器 定义的类和配置文件绑定一般没有提示，因此可以添加配置处理器，产生相对应的提示. |                                   |\n| SpringBoot-Starter-Web               | 后端集成Tomcat MVC                                           | 用于和前端连接                    |\n| SpringBoot-starter-test              | Junit4单元测试前端在调用接口前，后端先调用单元测试进行增删改查，注意Junit4和5的问题，注解@RunWith是否添加 |                                   |\n| Lombok                               | 实体类方法的快速生成 简化代码                                |                                   |\n| mybatis-plus-generator               | 代码生成器                                                   | 3.5.1                             |\n| MyBatisX                             | MyBatisPlus插件直接生成mapper,实体类,service                 |                                   |\n| jjwt                                 | token工具包                                                  | 0.9.0                             |\n| fastjson                             | 阿里巴巴的 JSON 工具类                                       | 1.2.83                            |\n| hutool                               | hutool工具包(简化开发工具类)                                 | [文档](https://hutool.cn/docs/#/) |\n| knife4j-openapi2-spring-boot-starter | Knife4j 在线接口文档测试工具                                 | 4.0.0                             |\n| gson                                 | 谷歌的 JSON 工具类                                           | 2.8.5                             |\n| Java-WebSocket                       | 讯飞星火 AI 配置                                             | 1.3.8                             |\n| okhttp                               | 讯飞星火 AI 配置                                             | 4.10.0                            |\n| okio                                 | 讯飞星火 AI 配置                                             | 2.10.0                            |\n| jsoup                                | 简易爬虫工具                                                 | 1.15.3                            |\n| guava                                | 谷歌工具类                                                   | 30.1-jre                          |\n| spring-boot-starter-data-redis       | Redis 的 Starter                                             |                                   |\n| broadscope-bailian-sdk-java          | 阿里云 AI 模型                                               | 1.1.7                             |\n| spring-boot-starter-websocket        | WebSocket 的 Starter                                         |                                   |\n\n## ☀️架构\n\n![](https://pic.yupi.icu/5563/202403061541028.png)\n\n## ☀️核心设计\n\n### 智能推荐功能\n\n1）用户输入自己的图书偏爱信息。\n\n2）前端发送 Axios 请求。\n\n3）后端先判断文本是否违法（为空或者文本字数过长）。\n\n4）查看接口是否存在。\n\n5）查看 AI 接口调用次数是否充足。\n\n6）GuavaRateLimiter 进行单体限流，判断请求次数是否超出正常业务频次。\n\n7）给 AI 模型人工预设，并且查询数据库中的书籍列表进行拼接。\n\n8）查询 AI 模型与该用户最近的五条历史记录，用于上下文关联。\n\n9）FutureTask 同步调用获取 AI 结果，并设置超时时间（超时抛出异常）\n\n10）获取 AI 模型推荐信息后进行持久化，并且减少接口调用次数（判断是否成功）\n\n11）返回处理好的 AI 推荐信息给前端，并设置响应状态码为 200 即可。\n\n### 智能分析功能\n\n1）用户输入分析目标、图标名称、选择图标类型、上传 Excel 文件，点击提交，发送 Axios 请求至后端。\n\n2）校验文件是否为空、名称是否过长、文件大小检验、文件后缀校验\n\n3）获取管理员 ID，从接口信息表查询管理员 ID 拥有的接口，接口判空。\n\n4）判断 AI 接口调用次数是否足够\n\n5）GuavaRateLimiter 进行单体限流，判断请求次数是否超出正常业务频次。\n\n6）构造 AI 模型的提示词和角色\n\n7）构造用户输入，拼接用户输入信息，并用工具类将 Excel 转为 CSV 字符串数据。\n\n8）利用讯飞星火 AI 模型，传入调用者 ID 和输入参数，利用 FutureTask 同步获取，并设置超时时间（超时抛出异常）\n\n9）对 AI 生成结果进行判断，格式错误就返回前端错误信息，并提示重新调用（后续考虑 RabbitMQ 进行重试和补偿机制）\n\n10）将 AI 生成结果持久化到数据库，并更新接口调用次数（判断是否成功），动态给前端返回图标和数据结论。\n\n## ☀️学完这个项目你能得到什么\n\n1）简单地调用 AI 模型（讯飞星火 | 阿里百炼）获取自定义文本内容。\n\n2）简单的 JWT 权限校验 ，利用后端拦截器进行登录校验。\n\n3）上传 Excel 文件，Excel 文件转换为 CSV 数据，AIGC 在线生成可视化图表。\n\n4）Jousp 批量爬取图书列表，可结合 SpringSchedule 定时任务执行。\n\n5）简单的增删改查系统，前后端是如何联调协作的。\n\n6）前端路由懒加载、CDN 静态资源缓存优化、图片懒加载是如何实现的\n\n7）利用 Lodash 进行节流控制，尽量降低无效的恶意刷留言情况。\n\n8）利用自定义线程池和 FutureTask 进行超时请求处理。\n\n9）利用Google 的 GuavaRateLimiter 进行单体限流控制。\n\n10）定时任务结合 Redis 做一个缓存预热，加快查询效率，提高用户体验。\n\n## ☀️项目简介\n\n+ 主要使用Vue2和SpringBoot2实现\n+ 项目权限控制分别为：用户借阅，图书管理员，系统管理员\n+ 开发工具：IDEA2022.1.3(真不推荐用eclipse开发，IDEA项目可以导出为eclipse项目，二者不影响，但需要自己学教程)\n+ [IDEA-\u003eEclipse](https://blog.csdn.net/HD202202/article/details/128076400)\n+ [Eclipse-\u003eIDEA](https://blog.csdn.net/q20010619/article/details/125096051)\n\n+ 学校老师硬性要求软件的话，还是按要求来。可以先问一下是否可以选择其他软件开发。\n+ 用户账号密码：  相思断红肠 123456\n+ 图书管理员账号密码:   admin 123456\n+ 系统管理员账号密码:   root 123456\n+ [前端样式参考](https://gitee.com/mingyuefusu/tushuguanlixitong)  感谢原作者**明月复苏**\n\n+ 遇到交互功能错误，或者页面无法打开，请用开发者工具F12查看请求和响应状态码情况，当然可能小白不懂，那也没关系，可以加我**QQ：909088445**。白天上课，晚上有空才能回答，感谢体谅！⭐⭐⭐\n\n## ☀️项目详细介绍（亮点)\n\n+ 本项目采用前后端分离的模式，前端构建页面，后端作数据接口，前端调用后端数据接口得到数据，重新渲染页面。\n+ 后端已开启 CORS 跨域支持\n+ API 认证使用 Token 认证\n+ 前端在 Authorization 字段提供 Token 令牌\n+ 使用 HTTP Status Code 表示状态\n+ 数据返回格式使用 JSON\n+ 后端采用权限拦截器进行权限校验，并检查登录情况\n+ 添加全局异常处理机制，捕获异常，增强系统健壮性\n+ 前端用 Echarts 可视化库实现了图书借阅的分析图标（折线图、饼图），并通过 Loading 配置提高加载体验。\n+ 留言组件采用弹幕形式，贴合用户的喜好。\n+ 引入 knife4j 依赖，使用 Swagger + Knife4j 自动生成 OpenAPI 规范的接口文档，前端可以在此基础上使用插件自动生成接口请求代码，降低前后端协作成本\n+ 使用 ElementUI 组件库进行前端界面搭建，快速实现页面生成，并实现了前后端统一权限管理，多环境切换等能力。\n+ 基于 MyBatis Plus 框架的 QueryWrapper 实现对 MySQL 数据库的灵活查询，并配合 MyBatisX 插件自动生成后端 CRUD 基础代码，减少重复工作。\n+ 前端路由懒加载、CDN 静态资源缓存优化、图片懒加载效果。\n\n### ⭐用户模块功能介绍\n\n![](https://pic.yupi.icu/5563/202403021406815.png)\n\n+ 图书查询功能：分页构造器缓解数据过大压力，后端可设置请求数防止爬虫请求数过大，服务器负载过大。模糊查询进行字段搜索。表格均可导出PDF和EXCEL。\n+ 读者规则功能：查询现有的借阅规则，借阅规则包括：借阅编号，可借阅图书数量，可借阅天数，可借阅图书馆，过期扣费/天。\n+ 查看公告: 可以查询图书管理员发布的公告列表，文字滑动效果。\n\n+ 个人信息: 可以查看个人的借阅证编号，借阅证姓名，规则编号，状态，可以修改个人账户的密码。\n\n+ 借阅信息: 可以查看自身借阅过的图书记录和归还情况。\n+ 违章信息: 可以查询自身归还的图书是否有违章信息。\n+ 读者留言: 实现留言功能并以弹幕形式显示。\n\n### ⭐图书管理员模块功能介绍\n\n![](https://pic.yupi.icu/5563/202403021406227.png)\n\n+ 借阅图书: 图书管理员输入借阅证号(用户)和要借的图书编号和当前的时间，点击借阅。\n+ 归还图书: 输入图书编号查看图书是否逾期，并且可以设置违规信息，然后选择是否归还图书\n+ 借书报表: 用于查询已经借阅并归还的书籍列表，同样使用分页构造器和模糊查询字段，显示借阅证编号，图书编号，借阅日期，截止日期，归还日期，违章信息，处理人。\n+ 还书报表: 用于查询已经借阅但是还未归还的书籍列表，显示借阅证编号，图书编号，借阅日期，截止日期。\n\n+ 发布公告: 可以查询当前发布的公告列表，并进行删除，修改，增加功能，分页构造器用于缓解数据量大的情况。\n\n### ⭐系统管理员模块功能介绍\n\n![](https://pic.yupi.icu/5563/202403021406443.png)\n\n+ 书籍管理: 可以查询当前的所有图书，显示图书编号，图书昵称，作者，图书馆，分类，位置，状态，描述。可以进行添加，修改，删除图书。利用分页构造器实现批量查询。利用模糊查询实现图书搜索功能。利用插件实现PDF和EXCEL导出。\n+ 书籍类型: 显示查询当前的所有图书类型，可以进行添加，修改，删除图书类型，利用分页构造器实现批量查询，缓解数据压力。\n+ 借阅证管理: 可以查询当前的所有借阅证列表，也就是用户数量，可以进行添加，修改，删除操作。同样实现分页。\n+ 借阅信息查询: 可以查询当前已经完成借阅和归还的记录，显示借阅证号，书籍编号，借阅日期，截止日期，归还日期，违章信息，处理人。分页功能，PDF和EXCEL导出。\n+ 借阅规则管理: 可以查询当前所有的借阅规则，显示限制借阅天数，限制本数，限制图书馆，逾期费用，可以进行添加、删除、修改操作。\n+ 图书管理员管理: 显示当前的图书管理员列表，显示账号，姓名，邮箱，可以进行添加、删除、修改操作。\n+ 系统管理: 可以查询一个月内的借阅量，以一周为时间间隔，计算借阅量，用Echarts实现折线图的展示。\n\n## ☀️数据库表设计\n\n### t_users表\n\n| 列名        | 数据类型以及长度 | 备注                                              |\n| ----------- | ---------------- | ------------------------------------------------- |\n| user_id     | int(11)          | 主键 非空 自增 用户表的唯一标识                   |\n| username    | varchar(32)      | 用户名 非空                                       |\n| password    | varchar(32)      | 密码(MD5加密) 非空                                |\n| card_name   | varchar(10)      | 真实姓名 非空                                     |\n| card_number | Bigint(11)       | 借阅证编号 固定 11位随机生成 非空(后文都改BigInt) |\n| rule_number | int(11)          | 规则编号 可以自定义 也就是权限功能                |\n| status      | int(1)           | 1表示可用 0表示禁用                               |\n| create_time | datetime         | 创建时间 Java注解 JsonFormatter                   |\n| update_time | datetime         | 更新时间 Java注解 JsonFormatter                   |\n\n### t_admins表\n\n| 列名        | 数据类型以及长度 | 备注                              |\n| ----------- | ---------------- | --------------------------------- |\n| admin_id    | int(11)          | 主键 非空 自增 管理员表的唯一标识 |\n| username    | varchar(32)      | 用户名 非空                       |\n| password    | varchar(32)      | 密码(MD5加密) 非空                |\n| admin_name  | varchar(10)      | 管理员真实姓名 非空               |\n| status      | int(1)           | 1表示可用 0表示禁用               |\n| create_time | datetime         | 创建时间 Java注解 JsonFormatter   |\n| update_time | datetime         | 更新时间 Java注解 JsonFormatter   |\n\n### t_book_admins表\n\n| 列名            | 数据类型以及长度 | 备注                            |\n| --------------- | ---------------- | ------------------------------- |\n| book_admin_id   | int(11)          | 主键 非空 自增 管理表的唯一标识 |\n| username        | varchar(32)      | 用户名 非空                     |\n| password        | varchar(32)      | 密码(MD5加密)非空               |\n| book_admin_name | varchar(10)      | 图书管理员真实姓名 非空         |\n| status          | int(1)           | 1表示可用 0表示禁用             |\n| email           | varchar(255)     | 电子邮箱                        |\n| create_time     | datetime         | 创建时间 Java注解 JsonFormatter |\n| update_time     | datetime         | 更新时间 Java注解 JsonFormatter |\n\n### t_books表\n\n| 列名             | 数据类型以及长度 | 备注                            |\n| ---------------- | ---------------- | ------------------------------- |\n| book_id          | int(11)          | 主键 自增 非空 图书表的唯一标识 |\n| book_number      | int(11)          | 图书编号 非空 图书的唯一标识    |\n| book_name        | varchar(32)      | 图书名称 非空                   |\n| book_author      | varchar(32)      | 图书作者 非空                   |\n| book_library     | varchar(32)      | 图书所在图书馆的名称 非空       |\n| book_type        | varchar(32)      | 图书类别 非空                   |\n| book_location    | varchar(32)      | 图书位置 非空                   |\n| book_status      | varchar(32)      | 图书状态(未借出/已借出)         |\n| book_description | varchar(100)     | 图书描述                        |\n| create_time      | datetime         | 创建时间 Java注解 JsonFormatter |\n| update_time      | datetime         | 更新时间 Java注解 JsonFormatter |\n\n### t_books_borrow表\n\n| 列名        | 数据类型以及长度 | 备注                                                         |\n| ----------- | ---------------- | ------------------------------------------------------------ |\n| borrow_id   | int(11)          | 主键 自增 非空 借阅表的唯一标识                              |\n| card_number | int(11)          | 借阅证编号 固定 11位随机生成 非空 用户与图书关联的的唯一标识 |\n| book_number | int(11)          | 图书编号 非空 图书的唯一标识                                 |\n| borrow_date | datetime         | 借阅日期 Java注解 JsonFormatter                              |\n| close_date  | datetime         | 截止日期 Java注解 JsonFormatter                              |\n| return_date | datetime         | 归还日期 Java注解 JsonFormatter                              |\n| create_time | datetime         | 创建时间 Java注解 JsonFormatter                              |\n| update_time | datetime         | 更新时间 Java注解 JsonFormatter                              |\n\n### t_notice表\n\n| 列名            | 数据类型以及长度 | 备注                                |\n| --------------- | ---------------- | ----------------------------------- |\n| notice_id       | int(11)          | 主键 非空 自增 公告表记录的唯一标识 |\n| notice_title    | varchar(32)      | 公告的题目 非空                     |\n| notice_content  | varchar(255)     | 公告的内容 非空                     |\n| notice_admin_id | int(11)          | 发布公告的管理员的id                |\n| create_time     | datetime         | 创建时间 Java注解 JsonFormatter     |\n| update_time     | datetime         | 更新时间 Java注解 JsonFormatter     |\n\n### t_violation表\n\n| 列名               | 数据类型以及长度 | 备注                                |\n| ------------------ | ---------------- | ----------------------------------- |\n| violation_id       | int(11)          | 主键 非空 自增 违章表记录的唯一标识 |\n| card_number        | int(11)          | 借阅证编号 固定 11位随机生成 非空   |\n| book_number        | int(11)          | 图书编号 非空 图书的唯一标识        |\n| borrow_date        | datetime         | 借阅日期 Java注解 JsonFormatter     |\n| close_date         | datetime         | 截止日期 Java注解 JsonFormatter     |\n| return_date        | datetime         | 归还日期 Java注解 JsonFormatter     |\n| violation_message  | varchar(100)     | 违章信息 非空                       |\n| violation_admin_id | int(11)          | 违章信息管理员的id                  |\n| create_time        | datetime         | 创建时间 Java注解 JsonFormatter     |\n| update_time        | datetime         | 更新时间 Java注解 JsonFormatter     |\n\n### t_comment表\n\n| 列名                  | 数据类型以及长度 | 备注                                |\n| --------------------- | ---------------- | ----------------------------------- |\n| comment_id            | int(11)          | 主键 非空 自增 留言表记录的唯一标识 |\n| comment_avatar        | varchar(255)     | 留言的头像                          |\n| comment_barrage_style | varchar(32)      | 弹幕的高度                          |\n| comment_message       | varchar(255)     | 留言的内容                          |\n| comment_time          | int(11)          | 留言的时间(控制速度)                |\n| create_time           | datetime         | 创建时间 Java注解 JsonFormatter     |\n| update_time           | datetime         | 更新时间 Java注解 JsonFormatter     |\n\n### t_book_rule表\n\n| 列名               | 数据类型以及长度 | 备注                                  |\n| ------------------ | ---------------- | ------------------------------------- |\n| rule_id            | int(11)          | 主键 非空 自增 借阅规则记录的唯一标识 |\n| book_rule_id       | int(11)          | 借阅规则编号 非空                     |\n| book_days          | int(11)          | 借阅天数 非空                         |\n| book_limit_number  | int(11)          | 限制借阅的本数 非空                   |\n| book_limit_library | varchar(255)     | 限制的图书馆 非空                     |\n| book_overdue_fee   | double           | 图书借阅逾期后每天费用 非空           |\n| create_time        | datetime         | 创建时间 Java注解 JsonFormatter       |\n| update_time        | datetime         | 更新时间 Java注解 JsonFormatter       |\n\n### t_book_type表\n\n| 列名         | 数据类型以及长度 | 备注                                  |\n| ------------ | ---------------- | ------------------------------------- |\n| type_id      | int(11)          | 主键 非空 自增 图书类别记录的唯一标识 |\n| type_name    | varchar(32)      | 借阅类别的昵称 非空                   |\n| type_content | varchar(255)     | 借阅类别的描述 非空                   |\n| create_time  | datetime         | 创建时间 Java注解 JsonFormatter       |\n| update_time  | datetime         | 更新时间 Java注解 JsonFormatter       |\n\n## 🐼功能演示图\n\n### 用户模块功能图\n\n**首页轮播图演示**\n\n![](https://pic.yupi.icu/5563/202403021406581.png)\n\n**图书查询演示**\n\n![](https://pic.yupi.icu/5563/202403021406053.png)\n\n**读者规则演示**\n\n![](https://pic.yupi.icu/5563/202403021406571.png)\n\n**查看公告演示**\n\n![](https://pic.yupi.icu/5563/202403021406776.png)\n\n**个人信息演示**\n\n![](https://pic.yupi.icu/5563/202403021406779.png)\n\n**借阅信息演示**\n\n![](https://pic.yupi.icu/5563/202403021406890.png)\n\n**违章信息演示**\n\n![](https://pic.yupi.icu/5563/202403021406091.png)\n\n**读者留言演示**\n\n![](https://pic.yupi.icu/5563/202403021406261.png)\n\n**智能推荐演示**\n\n![](https://pic.yupi.icu/5563/202403021406234.png)\n\n### 图书管理员功能图\n\n**借阅图书演示**\n\n![](https://pic.yupi.icu/5563/202403021406213.png)\n\n**归还图书演示**\n\n![](https://pic.yupi.icu/5563/202403021406604.png)\n\n**借书报表演示**\n\n![](https://pic.yupi.icu/5563/202403021406590.png)\n\n**还书报表演示**\n\n![](https://pic.yupi.icu/5563/202403021406562.png)\n\n**发布公告演示**\n\n![](https://pic.yupi.icu/5563/202403021406616.png)\n\n### 系统管理员功能图\n\n+ 由于篇幅受限，系统功能展示主要功能。\n\n**系统管理演示**\n\n![](https://pic.yupi.icu/5563/202403021406081.png)\n\n![](https://pic.yupi.icu/5563/202403021406169.png)\n\n**智能分析演示**\n\n![](https://pic.yupi.icu/5563/202403021406245.png)\n\n## 🐼部署项目\n\n![](https://pic.yupi.icu/5563/202403021406282.png)\n\n+ 可以下载ZIP压缩包或者使用克隆(Git clone)\n+ 复制http或者ssh的链接（github建议ssh,gittee都可以)\n+ 在D盘新建一个文件夹，点击进入该文件夹，右键Git Bash Here\n\n![](https://pic.yupi.icu/5563/202403021406715.png)\n\n+ 还没有下载Git或者不会Git的建议先看基础教程（30分钟左右)\n\n+ 输入git init 初始化git项目 然后出现一个.git文件夹\n+ 输入git remote add origin xxxxxx(xxx为刚刚复制的http或者ssh链接)\n\n+ 输入git pull origin master 从远程代码托管仓库拉取代码\n+ 成功拉取项目（前端后端都是如此)\n+ 前端项目注意依赖下载使用npm install 或者 yarn install （Vscode或者Webstorm)\n+ 后端项目注意maven依赖下载（IDEA(推荐)或者Ecplise)\n+ 前端npm 镜像源建议淘宝镜像源，后端maven镜像源推荐阿里云镜像源（非必选，但更换后下载快速)\n\n## 🐼部署项目问题\n\n⭐\n\n+ 乱码问题 项目采用的UFT-8\n+ 一般出现乱码就是UTF-8和GBK二者相反\n+ 请百度IDEA乱码和Eclipse乱码问题(描述清楚即可)\n\n⭐\n\n+ 点击交互按钮，没有发生反应。\n+ 很明显，请求失败，浏览器打开开发者工具，Edge浏览器直接ctrl+shift+i,其他浏览器按F12\n+ 查看红色的请求和响应状态码问题\n\n⭐\n\n+ 先阅读文档再进行问题的查询或者提问\n+ 提问有技巧，模糊的发言，让高级架构师找BUG也无从下手\n\n⭐\n\n+ **QQ：909088445**\n+ 一般晚上在线，建议先自己寻找问题！！！\n+ 开源免费， 定制化和调试项目付费。\n\n## 🐼需求分析和设计\n\n需求分析和设计文档，有（**付费**）需求的可以加 QQ：909088445，适合走毕设和课设的小伙伴，图省事的可以找我。\n\n![](https://pic.yupi.icu/5563/202403061545778.png)\n\n## 🐼项目API接口文档\n\n+ 接口文档篇幅过大\n+ 本来想完全采用RESTFUL风格，做到一半忘记了\n+ 看清楚文档的基准地址\n+ 要API后端接口文档详细内容和数据库结构（**由于服务器、域名、 AI 模型的成本问题，现数据库文件已收费**）+内容一起的，将前后端**star**⭐的截图加我QQ：**909088445**发我即可领取~感谢支持\n\n#### **数据库领取截图示例(Gitee\u0026GitHub)：**\n\n![](https://pic.yupi.icu/5563/202403021406801.png)\n\n![](https://pic.yupi.icu/5563/202403021406821.png)\n\n![](https://pic.yupi.icu/5563/202403092029471.png)\n\n![](https://pic.yupi.icu/5563/202403092029399.png)\n\n\n## 🐼（重点）远程部署和项目讲解服务\n\n远程部署服务需自己先下载向日葵远程控制软件，然后加 WX 或者 QQ 即可（**付费服务**），远程部署用于给完全不懂的小白，项目讲解服务用于**课设、实训、毕设语音答辩服务**，想减省时间，提高通过率，直接加我即可，可以**定制背景图片和整体的样式功能**，**降重服务**也可私我！新增定制协同过滤算法和数据可视化功能！有需求的小伙伴，请先编写一份具体的需求文档！\n\n\n## 🐷其他\n\n+ 个人博客地址: https://luoye6.github.io/\n+ 个人博客采用Hexo+Github托管\n+ 采用butterfly主题可以实现定制化\n+ 推荐有空闲时间的，可以花1-2天搭建个人博客用于记录笔记。\n\n## ☕请我喝咖啡\n\n如果本项目对您有所帮助，不妨请作者我喝杯咖啡 ：）\n\n\u003cdiv\u003e\u003cimg src=\"https://pic.yupi.icu/5563/202312191854931.png\" style=\"height:300px;width:300px\"\u003e\u003c/img\u003e \u003cimg src=\"https://pic.yupi.icu/5563/202312191859536.png\" style=\"height:300px;width:300px\"\u003e\u003c/img\u003e\u003c/div\u003e\n\n## **版本迭代**\n\n### 2023-3-19\n\n1.引入knife4j依赖，使用 Swagger + Knife4j 自动生成 OpenAPI 规范的接口文档，前端可以在此基础上使用插件自动生成接口请求代码，降低前后端协作成本。\n\n2.引入jsoup依赖可以自定义添加爬虫功能,可以批量添加图书并且是比较真实的数据。\n\n3.添加事务管理器，可以进行用@Transactional指定异常类型回滚和事务传播行为。\n\n### 2023-4-13\n\n1.手动在增加和删除逻辑较为复杂的数据库操作上，添加了@Transactional注解，遇到运行时异常直接回滚数据库，防止借书和还书出现逻辑错误。\n\n2.修复11位图书编号无法借书的Bug,其原因是因为11位超出了Integer的2147483647(10位)。解决方法：数据库改为BigInt,Java改为Long。\n\n3.**注意**：不要随便删除用户和公告！！！会导致其他人体验的时候出现逻辑错误！！！请明白了项目逻辑再去做删除操作！！！感谢配合！！！\n\n4.下一期准备优化图表的展示，逾期图书后告警通知之类的功能，感谢大家的支持，我会继续维护和优化功能，有Bug可以加我QQ或者提出issue,勿要恶意利用bug，再次鸣谢。\n\n5.劳动节准备录一期部署项目的视频会发到b站，到时候会将部署讲清楚，方便大家课设或者毕设的完成，此项目有数据库表设计、API接口文档、内容功能介绍、亮点介绍，唯一缺少的可能是数据流图、ER图之类的，star的人多了，我会添加上去。\n\n### 2023-5-1\n\n1.添加“系统管理员”权限的系统管理功能，**添加借书类型分析统计图（饼图）**采用Echarts。\n\n2.优化请求在没有收到数据时的显示卡顿的情况，添加“加载中”状态,**使用v-loading**(ElementUI组件库)，**优化用户人机交互体验**，在服务器调用接口缓慢的情况下，给予**良好的交互**。\n\n3.轮播图优化：**压缩图片体积**，另外使用Swiper的**懒加载**，实现图片加载中状态，然后图片完全加载完成后才显示图片，**优化用户体验过程**。\n\n4.后端**新增自定义错误码枚举类**，可以自定义状态码进行返回，保留原有枚举类。\n\n5.前端优化部分表格内容展示，当纵向内容过长，**设置了表格最大高度**，超出就会显示滑动窗口。优化表格列宽度，**提高表格美观度**。\n\n6.**添加**书籍管理组件的**批量删除图书**功能，优化管理员体验，不用单个删除图书，**提高效率**。\n\n7.Jmeter进行压力测试，服务器接口在**100个用户并发**发送请求的情况下，**QPS达到50**以上。\n\n### 2023-5-20\n\n**后端更新情况**\n\n1.~~防止前端抓包被获取明文密码，前端输入密码，进行md5加密（混合盐值，防止碰撞),后端直接与数据库加密后的密码比较，相等代表登录成功。提高系统**安全性**!~~。\n\n2.整改Controller层，**将业务代码全部放入Service层**，由Controller调用Service服务，并修改了@Transactional注解位置到业务层，减少耦合度，让Controller减少臃肿。做到对扩展开放，对修改关闭。后续考虑运用**设计模式**进行优化代码和**多线程**知识提高在**高并发**下接口响应的速度。\n\n3.对照阿里巴巴手册进行代码修改，将警告进行减少，代码更加**优雅、规范**。\n\n4.**修复BUG**： 借阅时间为空，造成服务器被击穿。归还日期为空，仍然显示借书成功。（解决方法：时间参数进行校验，判断是否为空)\n\n5.**工具类增加情况**:SQLUtils(防止SQL注入)，NetUtils(网络工具类)\n\n**前端更新情况**\n\n1.将路由加载方式，改为懒加载，利用懒加载可以有效分担首页加载压力，**减少首页加载用时**。\n\n2.添加404页面，当用户访问请求地址不存在的页面，直接跳转到404页面，**提高用户体验度**。\n\n3.添加按钮的加载中状态，**优化人机交互**，提升用户体验度。修改按钮：登录按钮，其他按钮如果有需要可以自定义去修改，增加:loading=\"loading\"即可。\n\n**Bug修复情况**\n\n1.11位图书编号可以借，但却**无法进行逾期检查**，发现方法参数还是Integer,上次把借书和还书的改成Long了，逾期查看还没改成Long,因此出现问题，现在已经修复。\n\n### 2023-6-10\n\n**前端更新情况**\n\n1.在某些页面添加全屏功能按钮，**方便用户放大查看表格数据**。\n\n2.增加了GitHub和Gitee的地址图标，**方便进行项目拉取和克隆**。\n\n3.读者留言组件，留言功能进行强化，防止无意义的数字、字母、空格出现在数据，后续考虑\n\n4.读者留言组件，**利用lodash进行节流**，5秒内只可发送一次网络请求，防止恶意刷无效留言。\n\n**后端更新情况**\n\n1.后端添加利用EasyExcel进行图书的**批量导入功能**，实现与实际生活中利用Excel存储一些图书数据的交互功能，**提高导入效率**，和爬虫功能效果相同，都可以实现大数据量情况下的导入，推荐利用EasyExcel进行批量导入，时间会比爬虫会更快。\n\n**Bug修复情况**\n\n1.修改用户页面的修改密码功能，因为上次更新已经加了盐值，但是后端代码逻辑没有进行更改，本次修复\"在修改密码后无法登录的情况\"，原因是因为后端没有加盐值，已修复。\n\n2.修复系统管理员修改借阅证的密码然后就登录不上了，原因跟第一条Bug是一样的，因为后端的盐值没有进行添加，已修复。\n\n3.修复系统管理员在书籍管理功能时候，直接点击修改书籍，发现书籍的分类是错误的，因为前端只在添加书籍的对话框发了获取分类的请求，修改对话框的时候忘记添加了获取分类的请求，已修复。\n\n### 2023-9\n\n**前端更新情况**\n\n1.增加**智能推荐页面**，能够与AI进行交流，**用户输入自己喜欢xxx类的书籍，AI能够在现有数据库中进行分析**，然后给用户作出推荐，调用的是国内AI模型，底层是OpenAI。\n\n2.增加**智能分析页面**，输入分析目标和图标类型和Excel文件，AI生成分析结论和可视化图标，大大提高效率，**减少人力分析成本**。\n\n3.增加系统管理员可以利用在前端**利用Excel文件批量上传图书**的功能（测试中),仅供参考。\n\n**后端更新情况**\n\n1.增加智能分析的接口和获取最近5条聊天记录的接口，利用**线程池**和**Future**进行**超时请求处理**，如果接口调用超过40秒直接返回错误信息。\n\n2.利用Google的Guava中的RateLimiter进行限流控制，**每秒钟只允许一个请求通过**，防止刷量行为。\n\n### 2023-11\n\n**后端更新情况**\n\n1.将用户聊天的AI模型切换为阿里的通义千问Plus模型，并且**支持多轮会话的历史记录**，**不再使用讯飞星火的AI模型**，但仍保留工具类。主要是为了可以更快的得到响应，而且阿里的**文档更加详细**，可以**定制话术**，在用户输入无关图书推荐的内容时候，直接**拒绝回答**。\n\n2.添加一个 IncSyncDeleteAIMessage **定时任务**，每天将会**删除由于系统错误等原因AI回复失败**，导致内容为空的记录，并且会为这些用户**恢复接口的次数**，**后续可能会选择 RabbitMQ**，将失败的消息放入消息队列，然后**确保失败的消息被消费**。\n\n3.登录加密由前端改到后端，由于前端可以被撞库，因此加密依然放到后端。**方案：**前端传输，用 HTTPS 进行密文加密，后端采用盐值+算法进行加密，数据库存密文。\n\n4.将留言页面存放在 Redis 中，**减少数据库的 IO 查询**，QPS 是原来的数百倍！\n\n**前端更新情况**\n\n1.将三个登录页面的背景图和头像改为存储在 assets 文件夹的 images 中，**主要是为使用项目的人考虑**，很多人不懂图床技术，我这边暂时将登录页面改成静态图。\n\n2.权限切换的提示优化，**在图标上面现在有登录权限切换的文字样式**，提示用户有多个登录页面可以切换。\n\n3.登录加密由前端改到后端，由于前端可以被撞库，因此加密依然放到后端。**方案**：前端传输，用 HTTPS 进行密文加密，后端采用盐值+算法进行加密，数据库存密文。\n\n### 2024-3\n\n**后端更新情况**\n\n1）为 Knife4J 添加 @ ApiOperation 注解，标注每个接口的作用，**方便开发者阅读和测试接口**。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluoye6%2Fvue_bookmanagesystem_backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluoye6%2Fvue_bookmanagesystem_backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluoye6%2Fvue_bookmanagesystem_backend/lists"}