当前位置: 首页 > news >正文

12306售票系统分析与实战

image

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查询车次详情列表
  • 日常运维
    image
    image
    image
    image

    • 实际座位管理
      • 生成座位:sharding-jdbc分库分表
      • 座位数据同步:cannal异构写入redis
      • 座位查询:影响分库分表的设计
      • 手工放票:cannal异构写入redis
  • 用户端维护

    • 查询车票
      • 站点列表选择
      • 确认涉及的车次:借助es获取满足条件的车次
      • 查询涉及的车次详情
      • 查询满足要求的座位:确认每一段路程都未被占座的座位

image

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

image

3. 项目搭建与DB设计

4. 核心功能开发

5. 高可用保证

6. 课程回顾与总结

http://www.jsqmd.com/news/42052/

相关文章:

  • Java StringTokenizer 类 Scanner 类详解
  • Java 断言(Assert) 简介
  • 2025年中小学生 AI 学习机选购指南:松鼠 AI 双线模式成优选
  • 《重生之我成为世界顶级黑客》第六章:一线生机
  • 20232305 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 遥感建筑物变化检测内容集
  • 实用指南:IntelliJ IDEA 2023中为 Spring Boot 项目添加注释模板
  • 网络分析模型六
  • 【UE源码向】GameplayTag增加ToolTip
  • 基于c++ eigen的Nelder-Mead算法(仿照scipy)
  • 量化存储墙(三):GEMM EMA 下限解析解以及硬件静态资源分配设计
  • Docker - 配置镜像站解决下载镜像的网络问题
  • 2D3D-MATR论文学习
  • c# 获取当前时间
  • YOLOv3 深度解析:网络架构、核心改进与目标检测实践 - 指南
  • ai学习机是不是智商税?到底有没有用?2025年学习机推荐指南
  • Linux问题
  • 2025 年 11 月石笼网厂家最新推荐,实力品牌深度解析采购无忧之选!
  • docker命令提示插件
  • C语言和C++有什么区别
  • 详细介绍:通过Modbus TCP网关连接传统RS485电梯的配置详解
  • python多进程mulprocessing初始化传参进行pickle时不能序列化local局部变量
  • Snipe-IT支持Oauth2登录
  • 20232424 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 绝对值的性质
  • 软件工程——设计物品复活软件的思考
  • 软件工程——设计物品复活软件的思考
  • 【C++STL :stack queue (二) 】stack 与 queue 的模拟实现与双端队列探秘 - 指南
  • 做题随笔:P14521
  • 《重生之我成为世界顶级黑客》第五章:失败,失败,还是失败