基本抢票系统与后台管理系统
demo: http://p3.helloyzy.cn
Mars抢票系统可用于各类活动的的票务发放,并在高并发上做了一定的优化,保证在80%的普通业务场景下保持可用性。
在各类活动场景下,总是会出现票少人多的情况,所以就会有抢票
的需求存在,为了更好的分析数据,量化分析发放票数和人数之间的关系等,搭建了抢票系统和其后台MIS系统。通过在后台定制活动
,前台定制化生成抢票页面
并在后台记录抢票人的数据以及发送抢票结果短信来实现整个用户的抢票流程。并通过Redis来缓解数据库的I/O压力,从而减少响应时间。部分设计架构参考QQ红包技术方案全解密
系统优点
- 前端采用Flexible尺寸适配方案,兼容大量移动端和PC端。
- 使用浏览器的LocalStorage用于减轻服务器的存储压力。
- 增加一层Redis存储形成一个抢票缓存池,用于减轻数据库的I/O压力,从而减少响应时间。
- 通过ip+手机号的双重验证防止刷票。
- 后台清晰的数据管理以及Excel导出。
技术栈
前端:
基于require.js
的前端组件化方案,并通过scss
进行页面实现。使用fis3
作为前端工程化的持续集成方案。
前端项目目录结构为:
.
├── README.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
│ ├── java
│ │ ├── META-INF
│ │ │ └── MANIFEST.MF
│ │ └── com
│ │ └── wizz
│ │ └── seckill
│ │ ├── Config
│ │ │ └── RedisConfiguration.java
│ │ ├── Controller
│ │ │ ├── AccountController.java
│ │ │ ├── UserTableController.java
│ │ │ └── seckillController.java
│ │ ├── Exception
│ │ │ ├── ObjectException.java
│ │ │ └── OwnExceptionHandler.java
│ │ ├── Mapper
│ │ │ ├── SysUserMapper.java
│ │ │ ├── actAttrMapper.java
│ │ │ ├── actInfoMapper.java
│ │ │ └── reqInfoMapper.java
│ │ ├── Model
│ │ │ ├── SysUser.java
│ │ │ ├── actAtr.java
│ │ │ ├── actInfo.java
│ │ │ ├── reqInfo.java
│ │ │ ├── reqRes.java
│ │ │ └── reqResWithToken.java
│ │ ├── SeckillApplication.java
│ │ ├── Service
│ │ │ ├── Impl
│ │ │ │ ├── RedisService.java
│ │ │ │ ├── SysUserServiceImpl.java
│ │ │ │ └── textService.java
│ │ │ ├── SysUserService.java
│ │ │ ├── TimerService.java
│ │ │ └── initTicketsService.java
│ │ └── Util
│ │ ├── ip
│ │ │ └── IpUtil.java
│ │ └── jwt
│ │ └── JwtToken.java
│ └── resources
│ ├── application.properties
│ └── sql
│ └── user.sql
└── test
└── java
环境搭建
##clone
git clone https://github.com/Lyears/webHomework.git
cd webHomework
##maven package
mvn package
## start project
java -jar seckill-0.0.1-SNAPSHOT.jar
-
REQTBL表
+----------+-------------+------+-----+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+-------------------+-------+ | STATE | int(11) | NO | | NULL | | | PHONENUM | varchar(20) | NO | PRI | NULL | | | STUID | varchar(20) | NO | | NULL | | | STUNAME | varchar(40) | NO | | NULL | | | TIME | timestamp | NO | | CURRENT_TIMESTAMP | | +----------+-------------+------+-----+-------------------+-------+
-
actattr表
+-------------+--------------+------+-----+---------+--------------------------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+--------------------------------+ | begtime | timestamp(6) | NO | | NULL | on update CURRENT_TIMESTAMP(6) | | endtime | timestamp(6) | NO | | NULL | on update CURRENT_TIMESTAMP(6) | | seckilltime | timestamp(6) | NO | | NULL | on update CURRENT_TIMESTAMP(6) | | tickets | int(11) | NO | | NULL | | | ownerid | int(11) | NO | | NULL | | | actid | int(11) | NO | PRI | NULL | auto_increment | +-------------+--------------+------+-----+---------+--------------------------------+
-
actinfo表
+------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | imgurl | varchar(100) | YES | | NULL | | | theme | int(11) | YES | | NULL | | | name | varchar(500) | YES | | NULL | | | des | varchar(500) | YES | | NULL | | | textdetail | varchar(500) | YES | | NULL | | | ownerid | int(11) | NO | | NULL | | | actid | int(11) | NO | PRI | NULL | auto_increment | +------------+--------------+------+-----+---------+----------------+
-
user表
+----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | username | varchar(255) | YES | | NULL | | | password | varchar(255) | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+
具体请看demo