
1. 内容介绍
MVP:Minimum Viable Product 最简化实行产品
核心功能:
- 实体管理
- 生成座位
- 放票
- 查询余额
- 抢票
- 生成订单
- ...
核心内容:
- 需求设计
- 数据库设计
- 项目搭建
- 流行的设计思想
- 后台管理实现
- 前台查余票及购买
- 组件使用及实践
主要技术栈:
- springboot2.x
- mybatis
- elasticsearch
- redis
- rabbitmq
- mysql
- sharding-jdbc
- canal
2. 需求设计与拆解
2.1 12306 购票分析
用户查询车次时需要提供的数据:
- 出发城市/到达城市 | 出发车站/到达车站
- 出发日期
- 座位类型
- 火车类型:高铁/动车
车次查询结果
- 车次
- 车次详情
- 出发/到达时间
- 时长
- 座位类型及等级
- 车票价格
创建订单前的数据页面 - 车次
- 车站
- 时间
- 座位
- 乘客信息
- 抢票操作
订单创建页面
- 车次
- 车站
- 实际座位
- 支付信息
- 支付/取消操作
2.2 业务实体确定
- 城市:TrainCity
- 车站:TrainStation
- 车次:TrainNumber
- 车次详情:TrainNumberDetail
- 座位: TrainSet
- 乘客:TrainTraveller
- 用户:TrainUser
- 订单:TrainOrder
- 订单详情:TrainOrderDetail
2.3 核心流程说明
- 基础数据准备:城市管理 ==> 车站管理 ==> 车次管理 ==> 车次详情管理
- 管理员日常运维:生成车票 ==> 搜索车票 ==> 放票
- 用户操作:查询指定日期车票(车次及余票)==> 提交订单 ==> 查看/支付/取消 / 维护乘客信息
2.4 任务拆解与业务介绍
-
基础数据管理
- 城市管理
- 新增城市
- 更新城市
- 查询城市
- 车站管理
- 新增车站
- 更新车站
- 查询车站
- 动车车次属性
- 动车类型
- CR2
- CR5
- ...
- 座位等级
- 商务座
- 一等座
- 二等座
- 座位价钱
- 成人价
- 学生价
- 动车类型
- 车次管理
- 车型及座位维护
- 新增车次 数据写入es
- 更新车次 数据更新es
- 查询车次
- 车次详情管理
- 新增车次详情
- 删除车次详情
- 车次详情列表查询
- 根据车次id查询车次详情列表
- 城市管理
-
日常运维




- 实际座位管理
- 生成座位:sharding-jdbc分库分表
- 座位数据同步:cannal异构写入redis
- 座位查询:影响分库分表的设计
- 手工放票:cannal异构写入redis
- 实际座位管理
-
用户端维护
- 查询车票
- 站点列表选择
- 确认涉及的车次:借助es获取满足条件的车次
- 查询涉及的车次详情
- 查询满足要求的座位:确认每一段路程都未被占座的座位
- 查询车票

- 提交订单
- 实际占座
- 单个座位占座成功 整体占座成功
- 单个座位占座失败 尝试新座位
- 生成订单及详情
- 成功, 等待支付
- 失败,占座回滚 回滚失败?
- 实际占座
- 其他

