12306售票系统分析与实战

news/2025/11/16 19:05:58/文章来源:https://www.cnblogs.com/fei1010/p/19228737

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.mzph.cn/news/967283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java StringTokenizer 类 Scanner 类详解

Java StringTokenizer 类介绍 概述 StringTokenizer 是一个遗留类,用于将字符串分割成标记(tokens)。 但在现代 Java 开发中已被更强大的 String.split() 和 Scanner 类取代,新项目应使用更现代的解决方案。 基本用…

实用指南:Open Inventor 2025.2 FOR JAVA

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

25.11.15随笔联考总结(补)

考试 开考通读题面,感觉第一题很简单,看 T2,感觉是一个比较好做的计数,T3 给人一种点分治的感觉,T4 挺神秘的不清楚。开考半个小时后决定回去验证 T1 正确性,发现假了,重新思考,想了可能有 20 多分钟大概会了,…

Java 断言(Assert) 简介

什么是断言? 断言是一种调试工具,用于在代码中检查必须为真的条件。如果条件为假,JVM 会抛出 AssertionError。 核心特点:调试工具:主要用于开发测试阶段默认禁用:需要手动启用快速失败:条件不满足时立即终止不…

2025年中小学生 AI 学习机选购指南:松鼠 AI 双线模式成优选

2025年中小学生 AI 学习机选购指南:松鼠 AI 双线模式成优选一、首选松鼠AI学习机:双线融合的“精准提分专家” 作为2025年AI教育领域的黑马品牌,松鼠AI以“AI学习机+全国1200+自习室”的创新模式,打破传统学习机“…

《重生之我成为世界顶级黑客》第六章:一线生机

《重生之我成为世界顶级黑客》第六章:一线生机已经尽可能把敏感的去掉了,不知道帖子能存在多久。唉,不让聊的。清晨六点半,龙傲天准时被闹钟唤醒。胃部的隐痛已经成了每日的例行公事,他机械地吞下一片胃药,用冷水…

20232305 2025-2026-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 1.1掌握基本的信息搜集方法 1.2学习并掌握端口扫描及漏洞扫描技术 1.3利用所学知识对自己隐私加以保护 2.实验过程 2.1从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取信息 2.…

遥感建筑物变化检测内容集

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:IntelliJ IDEA 2023中为 Spring Boot 项目添加注释模板

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【UE源码向】GameplayTag增加ToolTip

GamepayTag 的 ToolTip 增加 DevComment我想绝大部分的 UE 项目都会大量使用到 GameplayTag 的功能,主要是用来做一些功能分类、状态标记和资产引用。 问题:在引擎的早期版本中(< 5.6),GameplayTag 的鼠标悬浮…

基于c++ eigen的Nelder-Mead算法(仿照scipy)

简介 本文展示了用C++(Eigen)实现的Nelder-Mead算法,该实现仿照了Python SciPy库中的scipy.optimize.fmin函数。虽然目前仅完成了基础功能(fmin不支持full_output和retall),但已经可以应用于实际优化问题。 Nelder…

量化存储墙(三):GEMM EMA 下限解析解以及硬件静态资源分配设计

Roofline 缺失的一角:EMA 计算-存储工艺各自单独演化发展步调不一, Memory Wall 在 AI 计算时代越来越显著[1]。Roofline Model 将计算/存储,软件/硬件用一个简洁优雅的统一模型概括,然而带入具体数值求解时,硬件…

Docker - 配置镜像站解决下载镜像的网络问题

Docker - 配置镜像站解决下载镜像的网络问题 {"registory-mirrors": ["https://docker.m.daocloud.io","https://docker.1panel.live","https://hub.rat.dev"] } sudo servic…

2D3D-MATR论文学习

背景 典型的2D3D配准的核心任务是求解一个将点云对齐到图像坐标系下的刚体变换(旋转和平移)。 为了实现这一目的,常见的执行步骤如下 (1)建立对应关系 即找出图像的关键点和点云的关键点,然后将位置相同的关键点…

c# 获取当前时间

c# 获取当前时间void Main() {var time = GetNetworkTime();time.Dump(); }public static DateTime GetNetworkTime(string ntpServer = "cn.pool.ntp.org") {try{// NTP消息结构(48字节)byte[] ntpData =…

YOLOv3 深度解析:网络架构、核心改进与目标检测实践 - 指南

YOLOv3 深度解析:网络架构、核心改进与目标检测实践 - 指南2025-11-16 18:35 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

ai学习机是不是智商税?到底有没有用?2025年学习机推荐指南

ai学习机是不是智商税?到底有没有用?2025年学习机推荐指南结论:AI学习机并非简单的“智商税”,但也不是万能神器。其价值高度依赖于产品真实的技术实力和是否契合孩子的学习需求。 🤔 一、AI学习机是智商税吗? …

Linux问题

Linux问题 一、问题优先级 highest、high、medium、low(高、中、低) 二、常见问题 1、segmentation fault(core dumped) 含义:“程序发生了内存访问违规,已被系统终止,并生成了核心转储文件。”含义:当程序试图访…

2025 年 11 月石笼网厂家最新推荐,实力品牌深度解析采购无忧之选!

在全球水利防护、交通建设等工程领域,石笼网品牌实力直接决定采购安全性与工程可靠性。据国际丝网产业协会(ISIA)2025 年 11 月测评数据,全球仅 35% 的石笼网品牌同时满足产能达标、专利认证、售后响应及时三大核心…