同步操作将从 程序员小白条/GPT智能图书管理系统后台Vue2-SpringBoot2 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
作者:程序员小白条
技术 | 作用 | 版本 |
---|---|---|
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工具包(简化开发工具类) | 文档 |
主要使用Vue2和SpringBoot2实现
项目权限控制分别为:用户借阅,图书管理员,系统管理员
开发工具:IDEA2022.1.3(真不推荐用eclipse开发,IDEA项目可以导出为eclipse项目,二者不影响,但需要自己学教程)
学校老师硬性要求软件的话,还是按要求来。可以先问一下是否可以选择其他软件开发。
用户账号密码: 相思断红肠 123456
图书管理员账号密码: admin 123456
系统管理员账号密码: root 123456
前端样式参考 感谢原作者明月复苏
遇到交互功能错误,或者页面无法打开,请用开发者工具F12查看请求和响应状态码情况,当然可能小白不懂,那也没关系,可以加我QQ:909088445。白天上课,晚上有空才能回答,感谢体谅!⭐⭐⭐
图书查询功能:分页构造器缓解数据过大压力,后端可设置请求数防止爬虫请求数过大,服务器负载过大。模糊查询进行字段搜索。表格均可导出PDF和EXCEL。
读者规则功能:查询现有的借阅规则,借阅规则包括:借阅编号,可借阅图书数量,可借阅天数,可借阅图书馆,过期扣费/天。
查看公告: 可以查询图书管理员发布的公告列表,文字滑动⭐
个人信息: 可以查看个人的借阅证编号,借阅证姓名,规则编号,状态,可以修改个人账户的密码。
借阅信息: 可以查看自身借阅过的图书记录和归还情况
违章信息: 可以查询自身归还的图书是否有违章信息
读者留言: 实现留言功能并以弹幕形式显示
借阅图书: 图书管理员输入借阅证号(用户)和要借的图书编号和当前的时间,点击借阅。
归还图书: 输入图书编号查看图书是否逾期,并且可以设置违规信息,然后选择是否归还图书
借书报表: 用于查询已经借阅并归还的书籍列表,同样使用分页构造器和模糊查询字段,显示借阅证编号,图书编号,借阅日期,截止日期,归还日期,违章信息,处理人。
还书报表: 用于查询已经借阅但是还未归还的书籍列表,显示借阅证编号,图书编号,借阅日期,截止日期。
发布公告: 可以查询当前发布的公告列表,并进行删除,修改,增加功能,分页构造器用于缓解数据量大的情况。
列名 | 数据类型以及长度 | 备注 |
---|---|---|
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 |
列名 | 数据类型以及长度 | 备注 |
---|---|---|
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 |
列名 | 数据类型以及长度 | 备注 |
---|---|---|
book_admin_id | int(11) | 主键 非空 自增 管理表的唯一标识 |
username | varchar(32) | 用户名 非空 |
password | varchar(32) | 密码(MD5加密)非空 |
book_admin_name | varchar(10) | 图书管理员真实姓名 非空 |
status | int(1) | 1表示可用 0表示禁用 |
varchar(255) | 电子邮箱 | |
create_time | datetime | 创建时间 Java注解 JsonFormatter |
update_time | datetime | 更新时间 Java注解 JsonFormatter |
列名 | 数据类型以及长度 | 备注 |
---|---|---|
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 |
列名 | 数据类型以及长度 | 备注 |
---|---|---|
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 |
列名 | 数据类型以及长度 | 备注 |
---|---|---|
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 |
列名 | 数据类型以及长度 | 备注 |
---|---|---|
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 |
列名 | 数据类型以及长度 | 备注 |
---|---|---|
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 |
列名 | 数据类型以及长度 | 备注 |
---|---|---|
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 |
列名 | 数据类型以及长度 | 备注 |
---|---|---|
type_id | int(11) | 主键 非空 自增 图书类别记录的唯一标识 |
type_name | varchar(32) | 借阅类别的昵称 非空 |
type_content | varchar(255) | 借阅类别的描述 非空 |
create_time | datetime | 创建时间 Java注解 JsonFormatter |
update_time | datetime | 更新时间 Java注解 JsonFormatter |
首页轮播图演示
图书查询演示
读者规则演示
查看公告演示
个人信息演示
借阅信息演示
违章信息演示
读者留言演示
智能推荐演示
借阅图书演示
归还图书演示
借书报表演示
还书报表演示
发布公告演示
系统管理演示
智能分析演示
还没有下载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镜像源推荐阿里云镜像源(非必选,但更换后下载快速)
⭐
⭐
⭐
⭐
如果本项目对您有所帮助,不妨请作者我喝杯咖啡 :)
1.引入knife4j依赖,使用 Swagger + Knife4j 自动生成 OpenAPI 规范的接口文档,前端可以在此基础上使用插件自动生成接口请求代码,降低前后端协作成本。
2.引入jsoup依赖可以自定义添加爬虫功能,可以批量添加图书并且是比较真实的数据。
3.添加事务管理器,可以进行用@Transactional指定异常类型回滚和事务传播行为。
1.手动在增加和删除逻辑较为复杂的数据库操作上,添加了@Transactional注解,遇到运行时异常直接回滚数据库,防止借书和还书出现逻辑错误。
2.修复11位图书编号无法借书的Bug,其原因是因为11位超出了Integer的2147483647(10位)。解决方法:数据库改为BigInt,Java改为Long。
3.注意:不要随便删除用户和公告!!!会导致其他人体验的时候出现逻辑错误!!!请明白了项目逻辑再去做删除操作!!!感谢配合!!!
4.下一期准备优化图表的展示,逾期图书后告警通知之类的功能,感谢大家的支持,我会继续维护和优化功能,有Bug可以加我QQ或者提出issue,勿要恶意利用bug,再次鸣谢。
5.劳动节准备录一期部署项目的视频会发到b站,到时候会将部署讲清楚,方便大家课设或者毕设的完成,此项目有数据库表设计、API接口文档、内容功能介绍、亮点介绍,唯一缺少的可能是数据流图、ER图之类的,star的人多了,我会添加上去。
1.添加“系统管理员”权限的系统管理功能,**添加借书类型分析统计图(饼图)**采用Echarts。
2.优化请求在没有收到数据时的显示卡顿的情况,添加“加载中”状态,使用v-loading(ElementUI组件库),优化用户人机交互体验,在服务器调用接口缓慢的情况下,给予良好的交互。
3.轮播图优化:压缩图片体积,另外使用Swiper的懒加载,实现图片加载中状态,然后图片完全加载完成后才显示图片,优化用户体验过程。
4.后端新增自定义错误码枚举类,可以自定义状态码进行返回,保留原有枚举类。
5.前端优化部分表格内容展示,当纵向内容过长,设置了表格最大高度,超出就会显示滑动窗口。优化表格列宽度,提高表格美观度。
6.添加书籍管理组件的批量删除图书功能,优化管理员体验,不用单个删除图书,提高效率。
7.Jmeter进行压力测试,服务器接口在100个用户并发发送请求的情况下,QPS达到50以上。
后端更新情况
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,因此出现问题,现在已经修复。
前端更新情况
1.在某些页面添加全屏功能按钮,方便用户放大查看表格数据。
2.增加了GitHub和Gitee的地址图标,方便进行项目拉取和克隆。
3.读者留言组件,留言功能进行强化,防止无意义的数字、字母、空格出现在数据,后续考虑
4.读者留言组件,利用lodash进行节流,5秒内只可发送一次网络请求,防止恶意刷无效留言。
后端更新情况
1.后端添加利用EasyExcel进行图书的批量导入功能,实现与实际生活中利用Excel存储一些图书数据的交互功能,提高导入效率,和爬虫功能效果相同,都可以实现大数据量情况下的导入,推荐利用EasyExcel进行批量导入,时间会比爬虫会更快。
Bug修复情况
1.修改用户页面的修改密码功能,因为上次更新已经加了盐值,但是后端代码逻辑没有进行更改,本次修复"在修改密码后无法登录的情况",原因是因为后端没有加盐值,已修复。
2.修复系统管理员修改借阅证的密码然后就登录不上了,原因跟第一条Bug是一样的,因为后端的盐值没有进行添加,已修复。
3.修复系统管理员在书籍管理功能时候,直接点击修改书籍,发现书籍的分类是错误的,因为前端只在添加书籍的对话框发了获取分类的请求,修改对话框的时候忘记添加了获取分类的请求,已修复。
前端更新情况
1.增加智能推荐页面,能够与AI进行交流,用户输入自己喜欢xxx类的书籍,AI能够在现有数据库中进行分析,然后给用户作出推荐,调用的是国内AI模型,底层是OpenAI。
2.增加智能分析页面,输入分析目标和图标类型和Excel文件,AI生成分析结论和可视化图标,大大提高效率,减少人力分析成本。
3.增加系统管理员可以利用在前端利用Excel文件批量上传图书的功能(测试中),仅供参考。
后端更新情况
1.增加智能分析的接口和获取最近5条聊天记录的接口,利用线程池和Future进行超时请求处理,如果接口调用超过40秒直接返回错误信息。
2.利用Google的Guava中的RateLimiter进行限流控制,每秒钟只允许一个请求通过,防止刷量行为。
后端更新情况
1.将用户聊天的AI模型切换为阿里的通义千问Plus模型,并且支持多轮会话的历史记录,不再使用讯飞星火的AI模型,但仍保留工具类。主要是为了可以更快的得到响应,而且阿里的文档更加详细,可以定制话术,在用户输入无关图书推荐的内容时候,直接拒绝回答。
2.添加一个 IncSyncDeleteAIMessage 定时任务,每天将会删除由于系统错误等原因AI回复失败,导致内容为空的记录,并且会为这些用户恢复接口的次数,后续可能会选择 RabbitMQ,将失败的消息放入消息队列,然后确保失败的消息被消费。
3.登录加密由前端改到后端,由于前端可以被撞库,因此加密依然放到后端。**方案:**前端传输,用 HTTPS 进行密文加密,后端采用盐值+算法进行加密,数据库存密文。
4.将留言页面存放在 Redis 中,减少数据库的 IO 查询,QPS 是原来的数百倍!
前端更新情况
1.将三个登录页面的背景图和头像改为存储在 assets 文件夹的 images 中,主要是为使用项目的人考虑,很多人不懂图床技术,我这边暂时将登录页面改成静态图。
2.权限切换的提示优化,在图标上面现在有登录权限切换的文字样式,提示用户有多个登录页面可以切换。
3.登录加密由前端改到后端,由于前端可以被撞库,因此加密依然放到后端。方案:前端传输,用 HTTPS 进行密文加密,后端采用盐值+算法进行加密,数据库存密文。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。