概述
文章目录
- 前言
- 1.0版本
- 1.项目功能简述
- 2.项目目录结构
- 3.数据库设计
- 4.前端逻辑设计
- 5.后端逻辑设计
- 2.0版本
- 1.上个版本的问题
- 2.项目目录结构--用户部分
- 3.改造后
- 4.改造思路
- 5.其他说明
- 项目地址
前言
去年大二的时候,学校让我们自己做工程实践项目,我和队友选择了做体育馆场地管理系统。那个时候我们在网上找相关的技术博客、开源项目等就发现很少,今年五月份,我们又重构了之前的系统。所以,我准备写一篇文章介绍一下我们的体育馆场地管理系统。
1.0版本
1.项目功能简述
- 该项目分为和用户交互的部分(前台)和管理员部分(后台)两个部分
- 前台功能:登录注册部分、首页部分、个人中心部分
- 后台功能:登录部分、功能查询部分
2.项目目录结构
- 1.0版本使用原生Javaee+Jsp+Mysql,采用mvc分层方式搭建。
- 数据库连接工具使用的是c3p0,数据库操作用的Commons,同时用到了封装的一些sql封装操作。
- 用原生监听器完成定时任务。
- 原生过滤器实现安全跳转,因为有些地址是在没有登录的情况下不能访问的,这里只是用了两层目录的方式来控制。
- mvc三层中,admin和user分别对应着管理员和前台的代码实现。
- baseServlet是使用了反射,来简化原生的servlet。
3.数据库设计
表结构:
- gms_admin(管理员表):只有一条信息,为管理员的
- gms_notice(通知表):通知信息,默认写了七条数据,太少前端展示有问题
- gms_order(订单表):用户下单后订单记录
- gms_type(场馆类型表):比如篮球场就位类型,篮球场1号…就为具体场地
- gms_user(用户表):存放用户注册信息
- gms_venue(场馆表):具体某个场馆,比如乒乓球1号,2号,3号…
- gms_vdstate(场馆分时状态表):一个场馆gms_venue对应多个分时状态,因为我们要展示最近三天内容,一天中以一小时间隔会有23个时间段,设计23个字符来表示状态以0,1,2分别表示三种颜色,场馆三种颜色(绿色、灰色、白色)表示状态,根据0,1,2就可以展示场馆状态。
01表示对应的场馆编号,第二个字段表示哪一天,0表示不可预约(灰色),1表示可预约(白色),2表示已预约(黄色),后面23个字符,比如这里第一个2在第十三个字符位置,所以12:00-13:00位已预约
4.前端逻辑设计
以上部分的解释如下:
- 红点1这里使用的是Bootstrap的标签页,我们点击需要的场馆(红点2),下面就会展示对应的场馆信息(红点3)
- 场馆类型(红点2),通知消息(红点4),页面加载的时候就用ajax加载了所有的场馆类型并且展示,今日日期(红点5)也是页面加载的时候就进来了
- 红点6是通过红点2和红点5即场馆类型和当前日期去查询数据库查出来的
- 具体逻辑:首先在页面加载的时候,场馆类型,详细信息,通知信息,当前日期,这些可以直接在ajax中获取并展示出来,然后在场馆类型的每个类型里面设置一个方法,点击这个方法的时候就会获取当前的日期,这样就可以直接请求获取所有场馆信息了。注意: 但是每次点击的时候必须先清除上一次展示的场馆信息,否则就会重叠。还有个问题,当我们点击了这个场馆选择后,变为绿色了,又去另外一个界面点击一下,返回过来绿色消失了,所以必须记录下这个颜色然后在展示列表信息。
5.后端逻辑设计
- 选择场馆的时候,我们需要生成一张订单表,同时修改数据库分时状态表的状态,告诉前台这个场馆被人预约了,同时要插入一条订单表到数据库,这两个操作是保持一致性的,所以要加事务控制。
- 订单在个人中心是可以提前取消预约的,那我们还是要修改分时状态表,以及修改订单表的状态为已取消,也要加事务控制。
- 定时任务是指:前端展示的时候显示了这一天的场馆这状态,比如当前时间是12:00,那么12:00之前的场馆状态就必须被修改为不可预约,避免用户再预约之前的场馆导致问题。同时,订单表也要修改,因为如果有些人预约的是12:00-13:00的场馆,当前时间已经为13:01的时候,这个订单要么被用户使用了,要么超时了,我们都需要将这个订单设置为已完成订单状态,每隔一分钟修改一次。
- 简单的登录、注册、修改密码、注销登录这里就不提了,还有个导出订单表的操作,是自己写的工具类,会调用就行了。
2.0版本
1.上个版本的问题
- 没有考虑线程安全问题—>多个用户同时预约同一个场馆。
- 分时状态表的设计问题,以23个字符来控制每个时间段的状态会导致很多问题。
- 访问权限问题以及安全跳转问题。
2.项目目录结构–用户部分
- 项目还是两部分,管理员和用户,由于是两个人开发的,所以用了两个端口号,只是操作的同一个数据库。
- 2.0在1.0的基础上使用SpringBoot+Vue搭建,其中Vue只是用来当模板引擎,用jquery操作。
- 项目使用maven构建,使用git作为项目版本管理。
- 数据库连接使用druid,数据库操作使用MyBatis框架。
- 使用thymeleaf作为url跳转使用,前后端使用json传输数据,实现前后端分离。
- 使用邮件发送通知,同时使用消息队列rabbitMq异步发送邮件。
- 使用Spring Security作为权限管理,控制地址访问安全问题。
- 使用加锁的方式解决线程安全问题,并用jmeter压力测试。
- 管理员改动不大,springboot+vue+定时任务+spring security
- 后续可继续改进:将分时状态表改为每个时间段一个,增加redis缓存以让首页减小压力。
3.改造后
登录注册:
首页部分:
- 之前是通过一个中间界面来展示预约的信息,但是在前后端分离中很难设计,需要跳转,所以我在首页点击的下面展示点中的场馆,这样的话也为以后点击多个场馆预约留下了接口。
- 这里其实用了加锁的操作,具体思路在项目的改造思路_User.md里面
个人中心部分:
为什么要用rabbitMq来发送异步邮件:
- 当我们选择好场馆提交后就要执行发送邮件任务,由于发送邮件很慢,所以放到消息队列里会好很多
- 也可以自己手动创建一个线程来专门发送邮件,这里只是为了锻炼一下自己的消息队列使用情况
- 如果不想发送邮件可以在代码中注释点,代码里的注释很详细
4.改造思路
管理员和用户部分的改造思路都在我的项目里面,大家可以通过在我的github上面看到,这里就不详述了。
5.其他说明
- 项目的搭建过程以及需要注意的事项我都放在github上面了。
- 本文我并未介绍管理员部分的功能和代码设计,其中还是有很多比一般管理员部分设计的好的地方。
- 文中提到的内容均为大的点,很多小的细节,在1.0中可能并没有全部记录,但是2.0中都记录到了改造思路里面。
- 转载请附加原文链接
项目地址
如果你对源码感兴趣的话,以下是我的项目的两个链接,其中包含了详细的搭建过程,如果觉得可以的话,麻烦点个star,谢谢。
1.0版本github链接
2.0版本github链接
最后
以上就是机智魔镜为你收集整理的体育馆场地管理系统1.0-2.0的全部内容,希望文章能够帮你解决体育馆场地管理系统1.0-2.0所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复