827 lines
47 KiB
Markdown
827 lines
47 KiB
Markdown
# 智能图书馆开源文档
|
||
|
||
>作者:[程序员小白条](https://luoye6.github.io/)
|
||
>
|
||
>[Gitee 主页](https://gitee.com/falle22222n-leaves)
|
||
>
|
||
>[GitHub 主页](https://github.com/luoye6)
|
||
|
||
Language:**[English](README_en.md)**| **[中文](README.md).**
|
||
|
||
## ☀️新手必读
|
||
|
||
+ 本项目拥有完整的API后台接口文档(文尾)(重点⭐)
|
||
+ 项目部署视频正在录制
|
||
+ 如果项目对您有所帮助,可以Star⭐一下,受到鼓励的我会继续加油。
|
||
+ [项目在线演示地址](https://www.xiaobaitiao.top)
|
||
+ [项目前端地址](https://gitee.com/falle22222n-leaves/vue_-book-manage-system)
|
||
+ [项目后端地址](https://gitee.com/falle22222n-leaves/vue_-book-manage-system_backend)
|
||
+ [项目部署视频](https://www.bilibili.com/video/BV1Zh4y1z7QE/?spm_id_from=333.999.0.0)
|
||
|
||
[](https://gitee.com/falle22222n-leaves/vue_-book-manage-system) [](https://gitee.com/falle22222n-leaves) [](https://github.com/luoye6)
|
||
|
||
## ☀️个人介绍
|
||
|
||

|
||
|
||

|
||
|
||
## ☀️项目介绍
|
||
|
||
**AI 智能图书馆**(AI Intelligent Library)是一个利用 AI 模型和数据分析对用户所喜欢的图书进行精准推荐的系统,并且提供了 AIGC 的在线生成借阅量分析的 BI 图表功能,能够起到一个数据分析师的作用。其主要有三大使用者:用户(借阅人)、图书管理员、系统管理员。
|
||
|
||
> Ps:如果你想要简易和新颖,那么这个项目将会是不错的选择~
|
||
|
||

|
||
|
||

|
||
|
||
## ☀️功能和特性
|
||
|
||
### 用户功能
|
||
|
||
1)图书查询功能:分页构造器缓解数据过大压力,后端可设置请求数防止爬虫请求数过大,服务器负载过大。模糊查询进行字段搜索。表格均**可导出 PDF 和 EXCEL**。
|
||
|
||
2)读者规则功能:查询现有的借阅规则,借阅规则包括:借阅编号,可借阅图书数量,可借阅天数,可借阅图书馆,过期扣费/天。
|
||
|
||
3)查看公告: 可以查询图书管理员发布的公告列表,**文字滑动效果**。
|
||
|
||
4)个人信息: 可以查看个人的借阅证编号,借阅证姓名,规则编号,状态,可以修改个人账户的密码。
|
||
|
||
5)借阅信息: 可以查看自身借阅过的图书记录和归还情况。
|
||
|
||
6)违章信息: 可以查询自身归还的图书是否有违章信息。
|
||
|
||
7)读者留言: 实现留言功能并以**弹幕形式**显示。
|
||
|
||
8)**智能推荐**用户输入自己的偏好,AI 根据数据库书籍列表和用户偏好,给用户推荐书籍。
|
||
|
||
### 图书管理员功能
|
||
|
||
1)借阅图书: 图书管理员输入借阅证号(用户)和要借的图书编号和当前的时间,点击借阅。
|
||
|
||
2)归还图书: 输入图书编号查看图书是否逾期,并且可以设置违规信息,然后选择是否归还图书。
|
||
|
||
3)借书报表: 用于查询已经借阅并归还的书籍列表,同样使用分页构造器和模糊查询字段,显示借阅证编号,图书编号,借阅日期,截止日期,归还日期,违章信息,处理人。
|
||
|
||
4)还书报表: 用于查询已经借阅但是还未归还的书籍列表,显示借阅证编号,图书编号,借阅日期,截止日期。
|
||
|
||
5)发布公告: 可以查询当前发布的公告列表,并进行删除,修改,增加功能,分页构造器用于缓解数据量大的情况。
|
||
|
||
### 系统管理员功能
|
||
|
||
1)书籍管理: 可以查询当前的所有图书,显示图书编号,图书昵称,作者,图书馆,分类,位置,状态,描述。可以进行添加,修改,删除图书。利用分页构造器实现批量查询。利用模糊查询实现图书搜索功能。**利用插件实现 PDF 和 EXCEL 导出**。
|
||
|
||
2)书籍类型: 显示查询当前的所有图书类型,可以进行添加,修改,删除图书类型,利用分页构造器实现批量查询,缓解数据压力。
|
||
|
||
3)借阅证管理: 可以查询当前的所有借阅证列表,也就是用户数量,可以进行添加,修改,删除操作。同样实现分页。
|
||
|
||
4)借阅信息查询: 可以查询当前已经完成借阅和归还的记录,显示借阅证号,书籍编号,借阅日期,截止日期,归还日期,违章信息,处理人。分页功能,PDF 和 EXCEL 导出。
|
||
|
||
5)借阅规则管理: 可以查询当前所有的借阅规则,显示限制借阅天数,限制本数,限制图书馆,逾期费用,可以进行添加、删除、修改操作。
|
||
|
||
6)图书管理员管理: 显示当前的图书管理员列表,显示账号,姓名,邮箱,可以进行添加、删除、修改操作。
|
||
|
||
7)系统管理: 可以查询一个月内的借阅量,以一周为时间间隔,计算借阅量,**用 Echarts 实现各种图表的展示**。
|
||
|
||
8)系统分析:可以上传某个时间段的借阅量和日期,并且输入分析目标和想要生成的图表类型,等待一段时间后,**AI 将会给出分析结论和可视化图表**。
|
||
|
||
### 特性(亮点)
|
||
|
||
1)本项目采用前后端分离的模式,前端构建页面,后端作数据接口,前端调用后端数据接口得到数据,重新渲染页面。
|
||
|
||
2)前端在 Authorization 字段提供 Token 令牌,API 认证使用 Token 认证,使用 HTTP Status Code 表示状态,数据返回格式使用 JSON。
|
||
|
||
3)后端已开启 CORS 跨域支持,采用权限拦截器进行权限校验,并检查登录情况。
|
||
|
||
4)添加全局异常处理机制,捕获异常,增强系统健壮性。
|
||
|
||
5)前端用 Echarts 可视化库实现了图书借阅的分析图标(折线图、饼图),并通过 Loading 配置提高加载体验。
|
||
|
||
6)留言组件采用弹幕形式,贴合用户的喜好。
|
||
|
||
7)引入 knife4j 依赖,使用 Swagger + Knife4j 自动生成 OpenAPI 规范的接口文档,前端可以在此基础上使用插件自动生成接口请求代码,降低前后端协作成本
|
||
|
||
8)使用 ElementUI 组件库进行前端界面搭建,快速实现页面生成,并实现了前后端统一权限管理,多环境切换等能力。
|
||
|
||
9)基于 MyBatis Plus 框架的 QueryWrapper 实现对 MySQL 数据库的灵活查询,并配合 MyBatisX 插件自动生成后端 CRUD 基础代码,减少重复工作。
|
||
|
||
10)前端路由懒加载、CDN 静态资源缓存优化、图片懒加载效果。
|
||
|
||
## ☀️运行方式
|
||
|
||
### 2 分钟快速上手使用项目
|
||
|
||
1)找到 SpringBoot 启动类,点击运行
|
||
|
||

|
||
|
||
2)打开 Knife4J 注册用户,或者可以直接找我拿数据库模拟数据(简易)。
|
||
|
||

|
||
|
||

|
||
|
||
3)前端输入表单内容后点击登录即可成功,开始愉快使用功能~
|
||
|
||

|
||
|
||

|
||
|
||
## ☀️部署方式
|
||
|
||
### 前置条件
|
||
|
||
**前端**
|
||
|
||
软件:Vscode 或者 Webstorm(推荐)
|
||
|
||
环境:Node 版本 16 或者 18(推荐) **注:千万别选 18 以上的版本!**
|
||
|
||
**后端**
|
||
|
||
软件:Eclipse 或者 IDEA(推荐)
|
||
|
||
环境:MySQL 5.7 或者 8.0(推荐)Redis(可选)
|
||
|
||
### 前端部署
|
||
|
||
1)点击克隆/下载项目,会使用 Git 进行版本控制的,推荐 Git Clone,不会的小伙伴可以选择下载一个 Zip 压缩包,然后解压到自己电脑的 D 盘,推荐直接 Star,后续直接向我拿数据库模拟文件和 API 接口文档。
|
||
|
||

|
||
|
||
2)利用 Vscode 或者 Webstorm 打开前端页面,配置 Configuration。配置 Node 环境和包管理工具即可,我这边选择的包管理工具是 Npm,其他包管理工具如:Yarn、Cnpm、Pnpm 皆可。 **注:注意更改 Npm 的镜像地址为淘宝的新镜像地址,否则会出现 Npm Install 一直卡进度条的情况。**
|
||
|
||
3)直接点击 dev 的运行,或者打开控制台,输入 npm run serve 即可成功启动前端项目。
|
||
|
||
```shell
|
||
npm config set registry https://registry.npmmirror.com/
|
||
```
|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||
4)将图片链接进行自定义切换,可以切换为你自己的图床的图片链接,比如七牛云、GitHub 等,也可以寻找在线图片,复制百度文库图片链接(多试几次,有些图片有防盗链)。**更换背景后,可以看到右下角的权限切换小图标。**
|
||
|
||

|
||
|
||

|
||
|
||
|
||
|
||
### 后端部署
|
||
|
||
1)点击克隆/下载项目,会使用 Git 进行版本控制的,推荐 Git Clone,不会的小伙伴可以选择下载一个 Zip 压缩包,然后解压到自己电脑的 D 盘,推荐直接 Star,后续直接向我拿数据库模拟文件和 API 接口文档。
|
||
|
||

|
||
|
||
2)领取数据库模拟文件后,利用 Navicat 或者 SQLYog 等软件导入数据库文件,记得先建立一个名为 bms_boot 的数据库,然后右键点击运行 SQL 文件即可,运行成功,无报错后,重新打开数据库,检查是否有数据,如果有数据,表明导入成功。
|
||
|
||

|
||
|
||

|
||
|
||
3)用 IDEA 打开后端项目,找到 application-dev.yml 文件,修改其中的 MySQL 配置,保证用户名和密码正确,注:密码不能以数字 0 开头。
|
||
|
||

|
||
|
||
4)导入 Maven 依赖,注意看自己的 Maven 版本是否正确,建议选择跟我一样的,3.8以上的版本,发现依赖导入很慢,是因为没有配置国内镜像,默认连接的是国外服务器,因此阿里云镜像配置可以看这篇博客。[CSDN Maven 配置教程](https://blog.csdn.net/lianghecai52171314/article/details/102625184?ops_request_misc=&request_id=&biz_id=102&utm_term=Maven)
|
||
|
||

|
||
|
||
5)找到 SpringBoot 启动类,我建议用 Debug 模式启动项目,更好排查错误。
|
||
|
||

|
||
|
||
6)如果遇到错误,大概率可能是 JDK 版本问题,我项目用的是 JDK 8,建议选择与我相同版本。
|
||
|
||

|
||
|
||

|
||
|
||
7)成功启动项目效果展示如下
|
||
|
||

|
||
|
||
### 前后端联调
|
||
|
||
1)如果需要修改端口和前缀(比如/api),需要同时修改前端和后端。
|
||
|
||

|
||
|
||

|
||
|
||
## ☀️技术选型
|
||
|
||
### 前端
|
||
|
||
| **技术** | **作用** | **版本** |
|
||
| ---------------------------- | ------------------------------------------------------------ | ---------------------------------------------------- |
|
||
| Vue | 提供前端交互 | 2.6.14 |
|
||
| Vue-Router | 路由式编程导航 | 3.5.1 |
|
||
| Element-UI | 模块组件库,绘制界面 | 2.4.5 |
|
||
| Axios | 发送ajax请求给后端请求数据 | 1.2.1 |
|
||
| core-js | 兼容性更强,浏览器适配 | 3.8.3 |
|
||
| swiper | 轮播图插件(快速实现) | 3.4.2 |
|
||
| vue-baberrage | vue弹幕插件(实现留言功能) | 3.2.4 |
|
||
| vue-json-excel | 表格导出Excel | 0.3.0 |
|
||
| html2canvas+jspdf | 表格导出PDF | 1.4.1 2.5.1 |
|
||
| node-polyfill-webpack-plugin | webpack5中移除了nodejs核心模块的polyfill自动引入 | 2.0.1 |
|
||
| default-passive-events | **Chrome** 增加了新的事件捕获机制 **Passive Event Listeners**(被动事件侦听器) | 让页面滑动更加流畅,主要用于提升移动端滑动行为的性能 |
|
||
| nprogress | 发送请求显示进度条(人机交互友好) | 0.2.0 |
|
||
| echarts | 数据转图标的好工具(功能强大) | 5.4.1 |
|
||
| less lessloader | 方便样式开发 | 4.1.3 11.1.0 |
|
||
|
||
### 后端
|
||
|
||
| **技术及版本** | **作用** | **版本** |
|
||
| ------------------------------------ | ------------------------------------------------------------ | --------------------------------- |
|
||
| SpringBoot | 应用开发框架 | 2.7.8 |
|
||
| JDK | Java 开发包 | 1.8 |
|
||
| MySQL | 提供后端数据库 | 8.0.23 |
|
||
| MyBatisPlus | 提供连接数据库和快捷的增删改查 | 3.5.1 |
|
||
| SpringBoot-Configuration-processor | 配置处理器 定义的类和配置文件绑定一般没有提示,因此可以添加配置处理器,产生相对应的提示. | |
|
||
| SpringBoot-Starter-Web | 后端集成Tomcat MVC | 用于和前端连接 |
|
||
| SpringBoot-starter-test | Junit4单元测试前端在调用接口前,后端先调用单元测试进行增删改查,注意Junit4和5的问题,注解@RunWith是否添加 | |
|
||
| Lombok | 实体类方法的快速生成 简化代码 | |
|
||
| mybatis-plus-generator | 代码生成器 | 3.5.1 |
|
||
| MyBatisX | MyBatisPlus插件直接生成mapper,实体类,service | |
|
||
| jjwt | token工具包 | 0.9.0 |
|
||
| fastjson | 阿里巴巴的 JSON 工具类 | 1.2.83 |
|
||
| hutool | hutool工具包(简化开发工具类) | [文档](https://hutool.cn/docs/#/) |
|
||
| knife4j-openapi2-spring-boot-starter | Knife4j 在线接口文档测试工具 | 4.0.0 |
|
||
| gson | 谷歌的 JSON 工具类 | 2.8.5 |
|
||
| Java-WebSocket | 讯飞星火 AI 配置 | 1.3.8 |
|
||
| okhttp | 讯飞星火 AI 配置 | 4.10.0 |
|
||
| okio | 讯飞星火 AI 配置 | 2.10.0 |
|
||
| jsoup | 简易爬虫工具 | 1.15.3 |
|
||
| guava | 谷歌工具类 | 30.1-jre |
|
||
| spring-boot-starter-data-redis | Redis 的 Starter | |
|
||
| broadscope-bailian-sdk-java | 阿里云 AI 模型 | 1.1.7 |
|
||
| spring-boot-starter-websocket | WebSocket 的 Starter | |
|
||
|
||
## ☀️架构
|
||
|
||

|
||
|
||
## ☀️核心设计
|
||
|
||
### 智能推荐功能
|
||
|
||
1)用户输入自己的图书偏爱信息。
|
||
|
||
2)前端发送 Axios 请求。
|
||
|
||
3)后端先判断文本是否违法(为空或者文本字数过长)。
|
||
|
||
4)查看接口是否存在。
|
||
|
||
5)查看 AI 接口调用次数是否充足。
|
||
|
||
6)GuavaRateLimiter 进行单体限流,判断请求次数是否超出正常业务频次。
|
||
|
||
7)给 AI 模型人工预设,并且查询数据库中的书籍列表进行拼接。
|
||
|
||
8)查询 AI 模型与该用户最近的五条历史记录,用于上下文关联。
|
||
|
||
9)FutureTask 同步调用获取 AI 结果,并设置超时时间(超时抛出异常)
|
||
|
||
10)获取 AI 模型推荐信息后进行持久化,并且减少接口调用次数(判断是否成功)
|
||
|
||
11)返回处理好的 AI 推荐信息给前端,并设置响应状态码为 200 即可。
|
||
|
||
### 智能分析功能
|
||
|
||
1)用户输入分析目标、图标名称、选择图标类型、上传 Excel 文件,点击提交,发送 Axios 请求至后端。
|
||
|
||
2)校验文件是否为空、名称是否过长、文件大小检验、文件后缀校验
|
||
|
||
3)获取管理员 ID,从接口信息表查询管理员 ID 拥有的接口,接口判空。
|
||
|
||
4)判断 AI 接口调用次数是否足够
|
||
|
||
5)GuavaRateLimiter 进行单体限流,判断请求次数是否超出正常业务频次。
|
||
|
||
6)构造 AI 模型的提示词和角色
|
||
|
||
7)构造用户输入,拼接用户输入信息,并用工具类将 Excel 转为 CSV 字符串数据。
|
||
|
||
8)利用讯飞星火 AI 模型,传入调用者 ID 和输入参数,利用 FutureTask 同步获取,并设置超时时间(超时抛出异常)
|
||
|
||
9)对 AI 生成结果进行判断,格式错误就返回前端错误信息,并提示重新调用(后续考虑 RabbitMQ 进行重试和补偿机制)
|
||
|
||
10)将 AI 生成结果持久化到数据库,并更新接口调用次数(判断是否成功),动态给前端返回图标和数据结论。
|
||
|
||
## ☀️学完这个项目你能得到什么
|
||
|
||
1)简单地调用 AI 模型(讯飞星火 | 阿里百炼)获取自定义文本内容。
|
||
|
||
2)简单的 JWT 权限校验 ,利用后端拦截器进行登录校验。
|
||
|
||
3)上传 Excel 文件,Excel 文件转换为 CSV 数据,AIGC 在线生成可视化图表。
|
||
|
||
4)Jousp 批量爬取图书列表,可结合 SpringSchedule 定时任务执行。
|
||
|
||
5)简单的增删改查系统,前后端是如何联调协作的。
|
||
|
||
6)前端路由懒加载、CDN 静态资源缓存优化、图片懒加载是如何实现的
|
||
|
||
7)利用 Lodash 进行节流控制,尽量降低无效的恶意刷留言情况。
|
||
|
||
8)利用自定义线程池和 FutureTask 进行超时请求处理。
|
||
|
||
9)利用Google 的 GuavaRateLimiter 进行单体限流控制。
|
||
|
||
10)定时任务结合 Redis 做一个缓存预热,加快查询效率,提高用户体验。
|
||
|
||
## ☀️项目简介
|
||
|
||
+ 主要使用Vue2和SpringBoot2实现
|
||
+ 项目权限控制分别为:用户借阅,图书管理员,系统管理员
|
||
+ 开发工具:IDEA2022.1.3(真不推荐用eclipse开发,IDEA项目可以导出为eclipse项目,二者不影响,但需要自己学教程)
|
||
+ [IDEA->Eclipse](https://blog.csdn.net/HD202202/article/details/128076400)
|
||
+ [Eclipse->IDEA](https://blog.csdn.net/q20010619/article/details/125096051)
|
||
|
||
+ 学校老师硬性要求软件的话,还是按要求来。可以先问一下是否可以选择其他软件开发。
|
||
+ 用户账号密码: 相思断红肠 123456
|
||
+ 图书管理员账号密码: admin 123456
|
||
+ 系统管理员账号密码: root 123456
|
||
+ [前端样式参考](https://gitee.com/mingyuefusu/tushuguanlixitong) 感谢原作者**明月复苏**
|
||
|
||
+ 遇到交互功能错误,或者页面无法打开,请用开发者工具F12查看请求和响应状态码情况,当然可能小白不懂,那也没关系,可以加我**QQ:909088445**。白天上课,晚上有空才能回答,感谢体谅!⭐⭐⭐
|
||
|
||
## ☀️项目详细介绍(亮点)
|
||
|
||
+ 本项目采用前后端分离的模式,前端构建页面,后端作数据接口,前端调用后端数据接口得到数据,重新渲染页面。
|
||
+ 后端已开启 CORS 跨域支持
|
||
+ API 认证使用 Token 认证
|
||
+ 前端在 Authorization 字段提供 Token 令牌
|
||
+ 使用 HTTP Status Code 表示状态
|
||
+ 数据返回格式使用 JSON
|
||
+ 后端采用权限拦截器进行权限校验,并检查登录情况
|
||
+ 添加全局异常处理机制,捕获异常,增强系统健壮性
|
||
+ 前端用 Echarts 可视化库实现了图书借阅的分析图标(折线图、饼图),并通过 Loading 配置提高加载体验。
|
||
+ 留言组件采用弹幕形式,贴合用户的喜好。
|
||
+ 引入 knife4j 依赖,使用 Swagger + Knife4j 自动生成 OpenAPI 规范的接口文档,前端可以在此基础上使用插件自动生成接口请求代码,降低前后端协作成本
|
||
+ 使用 ElementUI 组件库进行前端界面搭建,快速实现页面生成,并实现了前后端统一权限管理,多环境切换等能力。
|
||
+ 基于 MyBatis Plus 框架的 QueryWrapper 实现对 MySQL 数据库的灵活查询,并配合 MyBatisX 插件自动生成后端 CRUD 基础代码,减少重复工作。
|
||
+ 前端路由懒加载、CDN 静态资源缓存优化、图片懒加载效果。
|
||
|
||
### ⭐用户模块功能介绍
|
||
|
||

|
||
|
||
+ 图书查询功能:分页构造器缓解数据过大压力,后端可设置请求数防止爬虫请求数过大,服务器负载过大。模糊查询进行字段搜索。表格均可导出PDF和EXCEL。
|
||
+ 读者规则功能:查询现有的借阅规则,借阅规则包括:借阅编号,可借阅图书数量,可借阅天数,可借阅图书馆,过期扣费/天。
|
||
+ 查看公告: 可以查询图书管理员发布的公告列表,文字滑动效果。
|
||
|
||
+ 个人信息: 可以查看个人的借阅证编号,借阅证姓名,规则编号,状态,可以修改个人账户的密码。
|
||
|
||
+ 借阅信息: 可以查看自身借阅过的图书记录和归还情况。
|
||
+ 违章信息: 可以查询自身归还的图书是否有违章信息。
|
||
+ 读者留言: 实现留言功能并以弹幕形式显示。
|
||
|
||
### ⭐图书管理员模块功能介绍
|
||
|
||

|
||
|
||
+ 借阅图书: 图书管理员输入借阅证号(用户)和要借的图书编号和当前的时间,点击借阅。
|
||
+ 归还图书: 输入图书编号查看图书是否逾期,并且可以设置违规信息,然后选择是否归还图书
|
||
+ 借书报表: 用于查询已经借阅并归还的书籍列表,同样使用分页构造器和模糊查询字段,显示借阅证编号,图书编号,借阅日期,截止日期,归还日期,违章信息,处理人。
|
||
+ 还书报表: 用于查询已经借阅但是还未归还的书籍列表,显示借阅证编号,图书编号,借阅日期,截止日期。
|
||
|
||
+ 发布公告: 可以查询当前发布的公告列表,并进行删除,修改,增加功能,分页构造器用于缓解数据量大的情况。
|
||
|
||
### ⭐系统管理员模块功能介绍
|
||
|
||

|
||
|
||
+ 书籍管理: 可以查询当前的所有图书,显示图书编号,图书昵称,作者,图书馆,分类,位置,状态,描述。可以进行添加,修改,删除图书。利用分页构造器实现批量查询。利用模糊查询实现图书搜索功能。利用插件实现PDF和EXCEL导出。
|
||
+ 书籍类型: 显示查询当前的所有图书类型,可以进行添加,修改,删除图书类型,利用分页构造器实现批量查询,缓解数据压力。
|
||
+ 借阅证管理: 可以查询当前的所有借阅证列表,也就是用户数量,可以进行添加,修改,删除操作。同样实现分页。
|
||
+ 借阅信息查询: 可以查询当前已经完成借阅和归还的记录,显示借阅证号,书籍编号,借阅日期,截止日期,归还日期,违章信息,处理人。分页功能,PDF和EXCEL导出。
|
||
+ 借阅规则管理: 可以查询当前所有的借阅规则,显示限制借阅天数,限制本数,限制图书馆,逾期费用,可以进行添加、删除、修改操作。
|
||
+ 图书管理员管理: 显示当前的图书管理员列表,显示账号,姓名,邮箱,可以进行添加、删除、修改操作。
|
||
+ 系统管理: 可以查询一个月内的借阅量,以一周为时间间隔,计算借阅量,用Echarts实现折线图的展示。
|
||
|
||
## ☀️数据库表设计
|
||
|
||
### t_users表
|
||
|
||
| 列名 | 数据类型以及长度 | 备注 |
|
||
| ----------- | ---------------- | ------------------------------------------------- |
|
||
| user_id | int(11) | 主键 非空 自增 用户表的唯一标识 |
|
||
| username | varchar(32) | 用户名 非空 |
|
||
| password | varchar(32) | 密码(MD5加密) 非空 |
|
||
| card_name | varchar(10) | 真实姓名 非空 |
|
||
| card_number | Bigint(11) | 借阅证编号 固定 11位随机生成 非空(后文都改BigInt) |
|
||
| rule_number | int(11) | 规则编号 可以自定义 也就是权限功能 |
|
||
| status | int(1) | 1表示可用 0表示禁用 |
|
||
| create_time | datetime | 创建时间 Java注解 JsonFormatter |
|
||
| update_time | datetime | 更新时间 Java注解 JsonFormatter |
|
||
|
||
### t_admins表
|
||
|
||
| 列名 | 数据类型以及长度 | 备注 |
|
||
| ----------- | ---------------- | --------------------------------- |
|
||
| admin_id | int(11) | 主键 非空 自增 管理员表的唯一标识 |
|
||
| username | varchar(32) | 用户名 非空 |
|
||
| password | varchar(32) | 密码(MD5加密) 非空 |
|
||
| admin_name | varchar(10) | 管理员真实姓名 非空 |
|
||
| status | int(1) | 1表示可用 0表示禁用 |
|
||
| create_time | datetime | 创建时间 Java注解 JsonFormatter |
|
||
| update_time | datetime | 更新时间 Java注解 JsonFormatter |
|
||
|
||
### t_book_admins表
|
||
|
||
| 列名 | 数据类型以及长度 | 备注 |
|
||
| --------------- | ---------------- | ------------------------------- |
|
||
| book_admin_id | int(11) | 主键 非空 自增 管理表的唯一标识 |
|
||
| username | varchar(32) | 用户名 非空 |
|
||
| password | varchar(32) | 密码(MD5加密)非空 |
|
||
| book_admin_name | varchar(10) | 图书管理员真实姓名 非空 |
|
||
| status | int(1) | 1表示可用 0表示禁用 |
|
||
| email | varchar(255) | 电子邮箱 |
|
||
| create_time | datetime | 创建时间 Java注解 JsonFormatter |
|
||
| update_time | datetime | 更新时间 Java注解 JsonFormatter |
|
||
|
||
### t_books表
|
||
|
||
| 列名 | 数据类型以及长度 | 备注 |
|
||
| ---------------- | ---------------- | ------------------------------- |
|
||
| book_id | int(11) | 主键 自增 非空 图书表的唯一标识 |
|
||
| book_number | int(11) | 图书编号 非空 图书的唯一标识 |
|
||
| book_name | varchar(32) | 图书名称 非空 |
|
||
| book_author | varchar(32) | 图书作者 非空 |
|
||
| book_library | varchar(32) | 图书所在图书馆的名称 非空 |
|
||
| book_type | varchar(32) | 图书类别 非空 |
|
||
| book_location | varchar(32) | 图书位置 非空 |
|
||
| book_status | varchar(32) | 图书状态(未借出/已借出) |
|
||
| book_description | varchar(100) | 图书描述 |
|
||
| create_time | datetime | 创建时间 Java注解 JsonFormatter |
|
||
| update_time | datetime | 更新时间 Java注解 JsonFormatter |
|
||
|
||
### t_books_borrow表
|
||
|
||
| 列名 | 数据类型以及长度 | 备注 |
|
||
| ----------- | ---------------- | ------------------------------------------------------------ |
|
||
| borrow_id | int(11) | 主键 自增 非空 借阅表的唯一标识 |
|
||
| card_number | int(11) | 借阅证编号 固定 11位随机生成 非空 用户与图书关联的的唯一标识 |
|
||
| book_number | int(11) | 图书编号 非空 图书的唯一标识 |
|
||
| borrow_date | datetime | 借阅日期 Java注解 JsonFormatter |
|
||
| close_date | datetime | 截止日期 Java注解 JsonFormatter |
|
||
| return_date | datetime | 归还日期 Java注解 JsonFormatter |
|
||
| create_time | datetime | 创建时间 Java注解 JsonFormatter |
|
||
| update_time | datetime | 更新时间 Java注解 JsonFormatter |
|
||
|
||
### t_notice表
|
||
|
||
| 列名 | 数据类型以及长度 | 备注 |
|
||
| --------------- | ---------------- | ----------------------------------- |
|
||
| notice_id | int(11) | 主键 非空 自增 公告表记录的唯一标识 |
|
||
| notice_title | varchar(32) | 公告的题目 非空 |
|
||
| notice_content | varchar(255) | 公告的内容 非空 |
|
||
| notice_admin_id | int(11) | 发布公告的管理员的id |
|
||
| create_time | datetime | 创建时间 Java注解 JsonFormatter |
|
||
| update_time | datetime | 更新时间 Java注解 JsonFormatter |
|
||
|
||
### t_violation表
|
||
|
||
| 列名 | 数据类型以及长度 | 备注 |
|
||
| ------------------ | ---------------- | ----------------------------------- |
|
||
| violation_id | int(11) | 主键 非空 自增 违章表记录的唯一标识 |
|
||
| card_number | int(11) | 借阅证编号 固定 11位随机生成 非空 |
|
||
| book_number | int(11) | 图书编号 非空 图书的唯一标识 |
|
||
| borrow_date | datetime | 借阅日期 Java注解 JsonFormatter |
|
||
| close_date | datetime | 截止日期 Java注解 JsonFormatter |
|
||
| return_date | datetime | 归还日期 Java注解 JsonFormatter |
|
||
| violation_message | varchar(100) | 违章信息 非空 |
|
||
| violation_admin_id | int(11) | 违章信息管理员的id |
|
||
| create_time | datetime | 创建时间 Java注解 JsonFormatter |
|
||
| update_time | datetime | 更新时间 Java注解 JsonFormatter |
|
||
|
||
### t_comment表
|
||
|
||
| 列名 | 数据类型以及长度 | 备注 |
|
||
| --------------------- | ---------------- | ----------------------------------- |
|
||
| comment_id | int(11) | 主键 非空 自增 留言表记录的唯一标识 |
|
||
| comment_avatar | varchar(255) | 留言的头像 |
|
||
| comment_barrage_style | varchar(32) | 弹幕的高度 |
|
||
| comment_message | varchar(255) | 留言的内容 |
|
||
| comment_time | int(11) | 留言的时间(控制速度) |
|
||
| create_time | datetime | 创建时间 Java注解 JsonFormatter |
|
||
| update_time | datetime | 更新时间 Java注解 JsonFormatter |
|
||
|
||
### t_book_rule表
|
||
|
||
| 列名 | 数据类型以及长度 | 备注 |
|
||
| ------------------ | ---------------- | ------------------------------------- |
|
||
| rule_id | int(11) | 主键 非空 自增 借阅规则记录的唯一标识 |
|
||
| book_rule_id | int(11) | 借阅规则编号 非空 |
|
||
| book_days | int(11) | 借阅天数 非空 |
|
||
| book_limit_number | int(11) | 限制借阅的本数 非空 |
|
||
| book_limit_library | varchar(255) | 限制的图书馆 非空 |
|
||
| book_overdue_fee | double | 图书借阅逾期后每天费用 非空 |
|
||
| create_time | datetime | 创建时间 Java注解 JsonFormatter |
|
||
| update_time | datetime | 更新时间 Java注解 JsonFormatter |
|
||
|
||
### t_book_type表
|
||
|
||
| 列名 | 数据类型以及长度 | 备注 |
|
||
| ------------ | ---------------- | ------------------------------------- |
|
||
| type_id | int(11) | 主键 非空 自增 图书类别记录的唯一标识 |
|
||
| type_name | varchar(32) | 借阅类别的昵称 非空 |
|
||
| type_content | varchar(255) | 借阅类别的描述 非空 |
|
||
| create_time | datetime | 创建时间 Java注解 JsonFormatter |
|
||
| update_time | datetime | 更新时间 Java注解 JsonFormatter |
|
||
|
||
## 🐼功能演示图
|
||
|
||
### 用户模块功能图
|
||
|
||
**首页轮播图演示**
|
||
|
||

|
||
|
||
**图书查询演示**
|
||
|
||

|
||
|
||
**读者规则演示**
|
||
|
||

|
||
|
||
**查看公告演示**
|
||
|
||

|
||
|
||
**个人信息演示**
|
||
|
||

|
||
|
||
**借阅信息演示**
|
||
|
||

|
||
|
||
**违章信息演示**
|
||
|
||

|
||
|
||
**读者留言演示**
|
||
|
||

|
||
|
||
**智能推荐演示**
|
||
|
||

|
||
|
||
### 图书管理员功能图
|
||
|
||
**借阅图书演示**
|
||
|
||

|
||
|
||
**归还图书演示**
|
||
|
||

|
||
|
||
**借书报表演示**
|
||
|
||

|
||
|
||
**还书报表演示**
|
||
|
||

|
||
|
||
**发布公告演示**
|
||
|
||

|
||
|
||
### 系统管理员功能图
|
||
|
||
+ 由于篇幅受限,系统功能展示主要功能。
|
||
|
||
**系统管理演示**
|
||
|
||

|
||
|
||

|
||
|
||
**智能分析演示**
|
||
|
||

|
||
|
||
## 🐼部署项目
|
||
|
||

|
||
|
||
+ 可以下载ZIP压缩包或者使用克隆(Git clone)
|
||
+ 复制http或者ssh的链接(github建议ssh,gittee都可以)
|
||
+ 在D盘新建一个文件夹,点击进入该文件夹,右键Git Bash Here
|
||
|
||

|
||
|
||
+ 还没有下载Git或者不会Git的建议先看基础教程(30分钟左右)
|
||
|
||
+ 输入git init 初始化git项目 然后出现一个.git文件夹
|
||
+ 输入git remote add origin xxxxxx(xxx为刚刚复制的http或者ssh链接)
|
||
|
||
+ 输入git pull origin master 从远程代码托管仓库拉取代码
|
||
+ 成功拉取项目(前端后端都是如此)
|
||
+ 前端项目注意依赖下载使用npm install 或者 yarn install (Vscode或者Webstorm)
|
||
+ 后端项目注意maven依赖下载(IDEA(推荐)或者Ecplise)
|
||
+ 前端npm 镜像源建议淘宝镜像源,后端maven镜像源推荐阿里云镜像源(非必选,但更换后下载快速)
|
||
|
||
## 🐼部署项目问题
|
||
|
||
⭐
|
||
|
||
+ 乱码问题 项目采用的UFT-8
|
||
+ 一般出现乱码就是UTF-8和GBK二者相反
|
||
+ 请百度IDEA乱码和Eclipse乱码问题(描述清楚即可)
|
||
|
||
⭐
|
||
|
||
+ 点击交互按钮,没有发生反应。
|
||
+ 很明显,请求失败,浏览器打开开发者工具,Edge浏览器直接ctrl+shift+i,其他浏览器按F12
|
||
+ 查看红色的请求和响应状态码问题
|
||
|
||
⭐
|
||
|
||
+ 先阅读文档再进行问题的查询或者提问
|
||
+ 提问有技巧,模糊的发言,让高级架构师找BUG也无从下手
|
||
|
||
⭐
|
||
|
||
+ **QQ:909088445**
|
||
+ 一般晚上在线,建议先自己寻找问题!!!
|
||
+ 开源免费, 定制化和调试项目付费。
|
||
|
||
## 🐼需求分析和设计
|
||
|
||
需求分析和设计文档,有(**付费**)需求的可以加 QQ:909088445,适合走毕设和课设的小伙伴,图省事的可以找我。
|
||
|
||

|
||
|
||
## 🐼项目API接口文档
|
||
|
||
+ 接口文档篇幅过大
|
||
+ 本来想完全采用RESTFUL风格,做到一半忘记了
|
||
+ 看清楚文档的基准地址
|
||
+ 要API后端接口文档详细内容和数据库结构+内容一起的,将前后端**star**⭐的截图加我QQ:**909088445**发我即可领取~感谢支持
|
||
|
||
#### **数据库领取截图示例(Gitee&GitHub):**
|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||
## 🐷其他
|
||
|
||
+ 个人博客地址: https://luoye6.github.io/
|
||
+ 个人博客采用Hexo+Github托管
|
||
+ 采用butterfly主题可以实现定制化
|
||
+ 推荐有空闲时间的,可以花1-2天搭建个人博客用于记录笔记。
|
||
|
||
## ☕请我喝咖啡
|
||
|
||
如果本项目对您有所帮助,不妨请作者我喝杯咖啡 :)
|
||
|
||
<div><img src="https://pic.yupi.icu/5563/202312191854931.png" style="height:300px;width:300px"></img> <img src="https://pic.yupi.icu/5563/202312191859536.png" style="height:300px;width:300px"></img></div>
|
||
|
||
## **版本迭代**
|
||
|
||
### 2023-3-19
|
||
|
||
1.引入knife4j依赖,使用 Swagger + Knife4j 自动生成 OpenAPI 规范的接口文档,前端可以在此基础上使用插件自动生成接口请求代码,降低前后端协作成本。
|
||
|
||
2.引入jsoup依赖可以自定义添加爬虫功能,可以批量添加图书并且是比较真实的数据。
|
||
|
||
3.添加事务管理器,可以进行用@Transactional指定异常类型回滚和事务传播行为。
|
||
|
||
### 2023-4-13
|
||
|
||
1.手动在增加和删除逻辑较为复杂的数据库操作上,添加了@Transactional注解,遇到运行时异常直接回滚数据库,防止借书和还书出现逻辑错误。
|
||
|
||
2.修复11位图书编号无法借书的Bug,其原因是因为11位超出了Integer的2147483647(10位)。解决方法:数据库改为BigInt,Java改为Long。
|
||
|
||
3.**注意**:不要随便删除用户和公告!!!会导致其他人体验的时候出现逻辑错误!!!请明白了项目逻辑再去做删除操作!!!感谢配合!!!
|
||
|
||
4.下一期准备优化图表的展示,逾期图书后告警通知之类的功能,感谢大家的支持,我会继续维护和优化功能,有Bug可以加我QQ或者提出issue,勿要恶意利用bug,再次鸣谢。
|
||
|
||
5.劳动节准备录一期部署项目的视频会发到b站,到时候会将部署讲清楚,方便大家课设或者毕设的完成,此项目有数据库表设计、API接口文档、内容功能介绍、亮点介绍,唯一缺少的可能是数据流图、ER图之类的,star的人多了,我会添加上去。
|
||
|
||
### 2023-5-1
|
||
|
||
1.添加“系统管理员”权限的系统管理功能,**添加借书类型分析统计图(饼图)**采用Echarts。
|
||
|
||
2.优化请求在没有收到数据时的显示卡顿的情况,添加“加载中”状态,**使用v-loading**(ElementUI组件库),**优化用户人机交互体验**,在服务器调用接口缓慢的情况下,给予**良好的交互**。
|
||
|
||
3.轮播图优化:**压缩图片体积**,另外使用Swiper的**懒加载**,实现图片加载中状态,然后图片完全加载完成后才显示图片,**优化用户体验过程**。
|
||
|
||
4.后端**新增自定义错误码枚举类**,可以自定义状态码进行返回,保留原有枚举类。
|
||
|
||
5.前端优化部分表格内容展示,当纵向内容过长,**设置了表格最大高度**,超出就会显示滑动窗口。优化表格列宽度,**提高表格美观度**。
|
||
|
||
6.**添加**书籍管理组件的**批量删除图书**功能,优化管理员体验,不用单个删除图书,**提高效率**。
|
||
|
||
7.Jmeter进行压力测试,服务器接口在**100个用户并发**发送请求的情况下,**QPS达到50**以上。
|
||
|
||
### 2023-5-20
|
||
|
||
**后端更新情况**
|
||
|
||
1.~~防止前端抓包被获取明文密码,前端输入密码,进行md5加密(混合盐值,防止碰撞),后端直接与数据库加密后的密码比较,相等代表登录成功。提高系统**安全性**!~~。
|
||
|
||
2.整改Controller层,**将业务代码全部放入Service层**,由Controller调用Service服务,并修改了@Transactional注解位置到业务层,减少耦合度,让Controller减少臃肿。做到对扩展开放,对修改关闭。后续考虑运用**设计模式**进行优化代码和**多线程**知识提高在**高并发**下接口响应的速度。
|
||
|
||
3.对照阿里巴巴手册进行代码修改,将警告进行减少,代码更加**优雅、规范**。
|
||
|
||
4.**修复BUG**: 借阅时间为空,造成服务器被击穿。归还日期为空,仍然显示借书成功。(解决方法:时间参数进行校验,判断是否为空)
|
||
|
||
5.**工具类增加情况**:SQLUtils(防止SQL注入),NetUtils(网络工具类)
|
||
|
||
**前端更新情况**
|
||
|
||
1.将路由加载方式,改为懒加载,利用懒加载可以有效分担首页加载压力,**减少首页加载用时**。
|
||
|
||
2.添加404页面,当用户访问请求地址不存在的页面,直接跳转到404页面,**提高用户体验度**。
|
||
|
||
3.添加按钮的加载中状态,**优化人机交互**,提升用户体验度。修改按钮:登录按钮,其他按钮如果有需要可以自定义去修改,增加:loading="loading"即可。
|
||
|
||
**Bug修复情况**
|
||
|
||
1.11位图书编号可以借,但却**无法进行逾期检查**,发现方法参数还是Integer,上次把借书和还书的改成Long了,逾期查看还没改成Long,因此出现问题,现在已经修复。
|
||
|
||
### 2023-6-10
|
||
|
||
**前端更新情况**
|
||
|
||
1.在某些页面添加全屏功能按钮,**方便用户放大查看表格数据**。
|
||
|
||
2.增加了GitHub和Gitee的地址图标,**方便进行项目拉取和克隆**。
|
||
|
||
3.读者留言组件,留言功能进行强化,防止无意义的数字、字母、空格出现在数据,后续考虑
|
||
|
||
4.读者留言组件,**利用lodash进行节流**,5秒内只可发送一次网络请求,防止恶意刷无效留言。
|
||
|
||
**后端更新情况**
|
||
|
||
1.后端添加利用EasyExcel进行图书的**批量导入功能**,实现与实际生活中利用Excel存储一些图书数据的交互功能,**提高导入效率**,和爬虫功能效果相同,都可以实现大数据量情况下的导入,推荐利用EasyExcel进行批量导入,时间会比爬虫会更快。
|
||
|
||
**Bug修复情况**
|
||
|
||
1.修改用户页面的修改密码功能,因为上次更新已经加了盐值,但是后端代码逻辑没有进行更改,本次修复"在修改密码后无法登录的情况",原因是因为后端没有加盐值,已修复。
|
||
|
||
2.修复系统管理员修改借阅证的密码然后就登录不上了,原因跟第一条Bug是一样的,因为后端的盐值没有进行添加,已修复。
|
||
|
||
3.修复系统管理员在书籍管理功能时候,直接点击修改书籍,发现书籍的分类是错误的,因为前端只在添加书籍的对话框发了获取分类的请求,修改对话框的时候忘记添加了获取分类的请求,已修复。
|
||
|
||
### 2023-9
|
||
|
||
**前端更新情况**
|
||
|
||
1.增加**智能推荐页面**,能够与AI进行交流,**用户输入自己喜欢xxx类的书籍,AI能够在现有数据库中进行分析**,然后给用户作出推荐,调用的是国内AI模型,底层是OpenAI。
|
||
|
||
2.增加**智能分析页面**,输入分析目标和图标类型和Excel文件,AI生成分析结论和可视化图标,大大提高效率,**减少人力分析成本**。
|
||
|
||
3.增加系统管理员可以利用在前端**利用Excel文件批量上传图书**的功能(测试中),仅供参考。
|
||
|
||
**后端更新情况**
|
||
|
||
1.增加智能分析的接口和获取最近5条聊天记录的接口,利用**线程池**和**Future**进行**超时请求处理**,如果接口调用超过40秒直接返回错误信息。
|
||
|
||
2.利用Google的Guava中的RateLimiter进行限流控制,**每秒钟只允许一个请求通过**,防止刷量行为。
|
||
|
||
### 2023-11
|
||
|
||
**后端更新情况**
|
||
|
||
1.将用户聊天的AI模型切换为阿里的通义千问Plus模型,并且**支持多轮会话的历史记录**,**不再使用讯飞星火的AI模型**,但仍保留工具类。主要是为了可以更快的得到响应,而且阿里的**文档更加详细**,可以**定制话术**,在用户输入无关图书推荐的内容时候,直接**拒绝回答**。
|
||
|
||
2.添加一个 IncSyncDeleteAIMessage **定时任务**,每天将会**删除由于系统错误等原因AI回复失败**,导致内容为空的记录,并且会为这些用户**恢复接口的次数**,**后续可能会选择 RabbitMQ**,将失败的消息放入消息队列,然后**确保失败的消息被消费**。
|
||
|
||
3.登录加密由前端改到后端,由于前端可以被撞库,因此加密依然放到后端。**方案:**前端传输,用 HTTPS 进行密文加密,后端采用盐值+算法进行加密,数据库存密文。
|
||
|
||
4.将留言页面存放在 Redis 中,**减少数据库的 IO 查询**,QPS 是原来的数百倍!
|
||
|
||
**前端更新情况**
|
||
|
||
1.将三个登录页面的背景图和头像改为存储在 assets 文件夹的 images 中,**主要是为使用项目的人考虑**,很多人不懂图床技术,我这边暂时将登录页面改成静态图。
|
||
|
||
2.权限切换的提示优化,**在图标上面现在有登录权限切换的文字样式**,提示用户有多个登录页面可以切换。
|
||
|
||
3.登录加密由前端改到后端,由于前端可以被撞库,因此加密依然放到后端。**方案**:前端传输,用 HTTPS 进行密文加密,后端采用盐值+算法进行加密,数据库存密文。
|
||
|
||
### 2024-3
|
||
|
||
**后端更新情况**
|
||
|
||
1)为 Knife4J 添加 @ ApiOperation 注解,标注每个接口的作用,**方便开发者阅读和测试接口**。 |