1. 项目背景与核心价值
体育馆作为校园高频使用的公共设施,传统的人工预约方式存在诸多痛点:电话预约容易占线、纸质登记易丢失、现场排队耗时、空闲时段利用率低。我在大四实习期间就亲眼目睹过学生为抢篮球场提前两小时排队的场景,而隔壁羽毛球场地却因信息不透明长期闲置。
这个毕业设计正是为了解决这些实际问题而诞生的。基于SpringBoot+Vue+MySQL的技术栈,我们构建了一个具备以下核心能力的平台:
- 实时可视化展示各场馆空闲时段
- 多终端在线预约(PC/移动端)
- 智能冲突检测与自动排期
- 使用数据统计分析报表
提示:选择SpringBoot+Vue前后端分离架构时,特别考虑了高校IT环境的实际情况——多数学校的信息中心更熟悉Java技术栈,而Vue的轻量级特性适合作为展示层快速迭代。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计解析
2.1 整体架构图
code复制[前端] Vue2 + ElementUI + Axios
↓
[网关] Nginx 反向代理 + 负载均衡
↓
[后端] SpringBoot 2.7 + MyBatis-Plus + Redis
↓
[数据] MySQL 8.0 + Redis 6.2
2.2 关键技术选型依据
- SpringBoot 2.7:相比3.x版本,2.7的社区资源更丰富,与校园常用JDK1.8兼容性更好。实测在4核8G服务器上,该版本可稳定支撑500+并发预约请求。
- Vue2:考虑到高校管理系统的交互复杂度,放弃Vue3以获得更稳定的生态支持。特别使用了
vue-print-nb插件实现预约单打印功能。 - MySQL 8.0:利用窗口函数高效处理时段冲突检测,例如检测同一场地是否被重复预约的SQL:
sql复制SELECT * FROM reservation
WHERE venue_id = ? AND (
(start_time < ? AND end_time > ?)
OR (start_time >= ? AND start_time < ?)
)
3. 核心业务实现细节
3.1 预约冲突检测算法
采用时间区间重叠检测算法,核心逻辑封装在ReservationConflictChecker类中:
java复制public boolean checkConflict(Reservation newRes) {
return reservationMapper.exists(new QueryWrapper<Reservation>()
.eq("venue_id", newRes.getVenueId())
.and(wrapper -> wrapper
.lt("start_time", newRes.getEndTime())
.gt("end_time", newRes.getStartTime())
));
}
3.2 状态机设计
预约流程包含6种状态转换:
code复制[待支付] → [已取消]
↓
[待支付] → [已支付] → [使用中] → [已完成]
↓
[已超时] ←
使用Spring State Machine实现,关键配置:
xml复制<transition source="UNPAID" target="CANCELLED" event="USER_CANCEL"/>
<transition source="UNPAID" target="PAID" event="PAY_SUCCESS"/>
<transition source="PAID" target="TIMEOUT" event="PAY_TIMEOUT"/>
4. 部署实践与优化
4.1 服务器配置建议
经过压力测试,推荐以下生产环境配置:
| 组件 | 配置 | 说明 |
|---|---|---|
| 前端 | 2核4G + Nginx | 开启Gzip压缩 |
| 后端 | 4核8G + JDK11 | JVM参数:-Xmx6g -Xms6g |
| 数据库 | 8核16G + MySQL 8.0 | 配置innodb_buffer_pool_size=12G |
4.2 常见部署问题解决
- Vue路由404:需在Nginx配置中添加:
nginx复制location / {
try_files $uri $uri/ /index.html;
}
- MySQL时区问题:在SpringBoot配置中增加:
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/gym?useSSL=false&serverTimezone=Asia/Shanghai
5. 论文写作要点指南
5.1 创新点提炼建议
- 对比传统方式,突出平台带来的改进:
- 预约效率提升:从平均15分钟/次 → 1分钟/次
- 场地利用率提升:通过数据分析优化排期,实测提升28%
- 技术亮点:
- 基于Redis的分布式锁解决超卖问题
- 使用ECharts实现三维场馆可视化
5.2 性能测试数据参考
JMeter压测结果(100并发):
| 接口 | 平均响应时间 | 错误率 |
|---|---|---|
| 查询场地空闲时段 | 128ms | 0% |
| 提交预约 | 253ms | 0.2% |
| 支付回调处理 | 87ms | 0% |
6. 项目扩展方向
在实际部署后,我总结了几个值得深入的功能点:
- 移动端适配:使用UniApp重构前端,实测可减少30%的代码量
- 智能推荐系统:基于用户历史数据推荐合适时段
- 物联网集成:通过二维码门禁系统实现自动核销
注意:开发时预留了WebSocket接口,方便后续添加实时消息推送功能。建议在entity包中提前定义好扩展字段,如
equipment_requirements等。
