Skip to content

sgahch/12306

Repository files navigation

🚄 12306 铁路购票系统

License Java Spring Boot Spring Cloud

🔥 热门推荐 🔥 大学春招、秋招、应届项目

基于 SpringBoot3 + Java17 + SpringCloudAlibaba + RocketMQ 等技术架构
完成铁路12306用户+购票+订单+支付服务,帮助学生主打就业的项目

🧐 为什么适合校招 | 🔥 在线体验 | 📖 项目文档

📋 目录

🎯 项目简介

12306 铁路购票服务是一个与大家生活和出行相关的关键系统,包括用户服务购票服务订单服务支付服务网关服务等核心模块。

🎓 学习价值

  • 分布式系统设计:掌握微服务架构的设计原则和实践
  • 高并发处理:学习大流量场景下的系统优化策略
  • 企业级开发:接触最新技术栈和企业级开发规范
  • 面试加分项:提供丰富的技术亮点和项目经验

🚀 部署模式

项目提供两种独立的部署版本:

版本类型 适用场景 启动方式 特点
聚合服务版本 测试和部署 启动 aggregation-service 单体部署,便于测试
微服务版本 学习微服务设计 分别启动各个服务 完整微服务架构

✨ 项目特色

🏗️ 架构设计

  • 微服务架构:基于 SpringCloud 的完整微服务体系
  • 分库分表:支持海量数据的水平扩展
  • 缓存策略:多级缓存设计,提升系统性能
  • 消息队列:异步处理,提高系统吞吐量

🛠️ 技术栈

  • 后端框架:SpringBoot 3.0.7 + SpringCloud 2022.0.3
  • 数据库:MySQL + MyBatis-Plus + ShardingSphere
  • 缓存:Redis + Redisson
  • 消息队列:RocketMQ
  • 前端:Vue 3 + Ant Design Vue
  • 其他:JWT、Hippo4j、XXL-Job

🎨 设计模式

  • 责任链模式:业务流程处理
  • 策略模式:多种支付方式
  • 建造者模式:复杂对象构建
  • 模板方法模式:通用业务流程

🏛️ 技术架构

系统架构图

┌─────────────────────────────────────────────────────────────┐
│                        前端层                                │
├─────────────────────────────────────────────────────────────┤
│                    Vue3 控制台系统                           │
│              (console-vue - Ant Design Vue)                │
└─────────────────────────────────────────────────────────────┘
                                │
                                ▼
┌─────────────────────────────────────────────────────────────┐
│                        网关层                                │
├─────────────────────────────────────────────────────────────┤
│                   Spring Cloud Gateway                     │
│                  (gateway-service)                         │
└─────────────────────────────────────────────────────────────┘
                                │
                                ▼
┌─────────────────────────────────────────────────────────────┐
│                      微服务层                                │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │
│  │ 用户服务     │ │ 购票服务     │ │ 订单服务     │ │ 支付服务 │ │
│  │user-service │ │ticket-service│ │order-service│ │pay-service│
│  └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘ │
│                                                             │
│  ┌─────────────────────────────────────────────────────────┐ │
│  │              聚合服务 (aggregation-service)              │ │
│  │           (包含所有业务服务的聚合部署版本)                │ │
│  └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
                                │
                                ▼
┌─────────────────────────────────────────────────────────────┐
│                      框架层                                  │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │  基础    │ │  缓存    │ │ 数据库   │ │ 设计模式 │ │  Web    │ │
│ │ 组件     │ │ 组件     │ │ 组件     │ │ 组件     │ │ 组件    │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 分布式ID │ │ 幂等性   │ │ 日志     │ │ 约定     │ │ 通用    │ │
│ │ 组件     │ │ 组件     │ │ 组件     │ │ 组件     │ │ 组件    │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────────┘
                                │
                                ▼
┌─────────────────────────────────────────────────────────────┐
│                      基础设施层                              │
├─────────────────────────────────────────────────────────────┤
│  MySQL + Redis + RocketMQ + XXL-Job + Hippo4j             │
└─────────────────────────────────────────────────────────────┘

核心技术栈

技术分类 技术选型 版本 说明
基础框架 Spring Boot 3.0.7 基础开发框架
微服务 Spring Cloud 2022.0.3 微服务框架
微服务 Spring Cloud Alibaba 2022.0.0.0-RC2 阿里微服务组件
数据库 MySQL 8.0+ 关系型数据库
ORM框架 MyBatis-Plus 3.5.3.1 数据库操作框架
分库分表 ShardingSphere 5.3.2 数据库中间件
缓存 Redis 6.0+ 分布式缓存
缓存客户端 Redisson 3.21.3 Redis客户端
消息队列 RocketMQ 2.2.3 分布式消息队列
任务调度 XXL-Job 2.3.1 分布式任务调度
线程池 Hippo4j 1.5.0 动态线程池框架
JSON处理 FastJson2 2.0.36 JSON序列化
工具库 Hutool 5.8.27 Java工具库
前端框架 Vue 3.2.13 前端MVVM框架
UI组件 Ant Design Vue 3.2.20 UI组件库

📁 项目结构

12306/
├── 📁 console-vue/                           # Vue3 前端控制台系统
│   ├── 📁 public/                            # 静态资源
│   │   ├── 📄 favicon.ico                    # 网站图标
│   │   └── 📄 index.html                     # HTML模板
│   ├── 📁 src/                               # 前端源代码
│   │   ├── 📁 assets/                        # 静态资源
│   │   │   ├── 📄 black_dot.png              # 图片资源
│   │   │   └── 📄 logo.png                   # Logo图片
│   │   ├── 📁 components/                    # 公共组件
│   │   │   ├── 📁 bread-header/              # 面包屑导航组件
│   │   │   ├── 📁 header/                    # 头部组件
│   │   │   ├── 📁 icon-font/                 # 图标字体组件
│   │   │   └── 📁 sider/                     # 侧边栏组件
│   │   ├── 📁 views/                         # 页面组件
│   │   │   ├── 📁 add-passenger/             # 添加乘车人页面
│   │   │   ├── 📁 ali-pay/                   # 支付宝支付页面
│   │   │   ├── 📁 buy-ticket/                # 购票页面
│   │   │   ├── 📁 check-order/               # 订单确认页面
│   │   │   ├── 📁 login/                     # 登录页面
│   │   │   ├── 📁 my-ticket/                 # 我的车票页面
│   │   │   ├── 📁 order/                     # 订单页面
│   │   │   ├── 📁 order-list/                # 订单列表页面
│   │   │   │   └── 📁 components/            # 订单列表子组件
│   │   │   │       ├── 📁 edit-content/      # 编辑内容组件
│   │   │   │       ├── 📁 refund-ticket/     # 退票组件
│   │   │   │       └── 📁 show-card-info/    # 显示卡片信息组件
│   │   │   ├── 📁 passenger/                 # 乘车人管理页面
│   │   │   ├── 📁 pay-success/               # 支付成功页面
│   │   │   ├── 📁 personalTicket/            # 个人车票页面
│   │   │   ├── 📁 ticket-serach/             # 车票查询页面
│   │   │   └── 📁 user-info/                 # 用户信息页面
│   │   ├── 📁 router/                        # 路由配置
│   │   │   └── 📄 index.js                   # 路由配置文件
│   │   ├── 📁 service/                       # API服务
│   │   │   ├── 📄 axios.js                   # HTTP请求配置
│   │   │   └── 📄 index.js                   # API接口定义
│   │   ├── 📁 utils/                         # 工具函数
│   │   │   └── 📄 index.js                   # 工具函数集合
│   │   ├── 📁 constants/                     # 常量定义
│   │   │   └── 📄 index.js                   # 常量文件
│   │   ├── 📁 mock/                          # Mock数据
│   │   │   └── 📄 index.js                   # Mock配置
│   │   ├── 📄 App.vue                        # 根组件
│   │   ├── 📄 main.js                        # 入口文件
│   │   └── 📄 global.less                    # 全局样式
│   ├── 📄 package.json                       # 前端依赖配置
│   ├── 📄 vue.config.js                      # Vue配置文件
│   ├── 📄 babel.config.js                    # Babel配置
│   ├── 📄 jsconfig.json                      # JS配置
│   └── 📄 yarn.lock                          # Yarn锁定文件
│
├── 📁 dependencies/                          # 依赖管理模块
│   └── 📄 pom.xml                            # 统一依赖版本管理
│
├── 📁 frameworks/                            # 框架组件库
│   ├── 📁 base/                              # 基础组件
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/framework/starter/bases/
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   └── 📄 ApplicationBaseAutoConfiguration.java
│   │   │       ├── 📁 constant/              # 常量定义
│   │   │       │   ├── 📄 FilterOrderConstant.java
│   │   │       │   └── 📄 UserConstant.java
│   │   │       ├── 📁 init/                  # 初始化组件
│   │   │       │   ├── 📄 ApplicationContentPostProcessor.java
│   │   │       │   └── 📄 ApplicationInitializingEvent.java
│   │   │       ├── 📁 safa/                  # 安全组件
│   │   │       │   └── 📄 FastJsonSafeMode.java
│   │   │       ├── 📄 ApplicationContextHolder.java
│   │   │       └── 📄 Singleton.java
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 bizs/                              # 业务组件
│   │   ├── 📁 user/                          # 用户业务组件
│   │   │   ├── 📁 src/main/java/             # Java源码
│   │   │   │   └── 📁 org/opengoofy/index12306/frameworks/starter/user/
│   │   │   │       ├── 📁 config/            # 配置类
│   │   │   │       │   └── 📄 UserAutoConfiguration.java
│   │   │   │       ├── 📁 core/              # 核心组件
│   │   │   │       │   ├── 📄 UserContext.java
│   │   │   │       │   ├── 📄 UserInfoDTO.java
│   │   │   │       │   └── 📄 UserTransmitFilter.java
│   │   │   │       └── 📁 toolkit/           # 工具类
│   │   │   │           └── 📄 JWTUtil.java
│   │   │   └── 📄 pom.xml                    # Maven配置
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 cache/                             # 缓存组件
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/framework/starter/cache/
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   ├── 📄 BloomFilterPenetrateProperties.java
│   │   │       │   ├── 📄 CacheAutoConfiguration.java
│   │   │       │   └── 📄 RedisDistributedProperties.java
│   │   │       ├── 📁 core/                  # 核心组件
│   │   │       │   ├── 📄 CacheGetFilter.java
│   │   │       │   ├── 📄 CacheGetIfAbsent.java
│   │   │       │   └── 📄 CacheLoader.java
│   │   │       ├── 📁 toolkit/               # 工具类
│   │   │       │   ├── 📄 CacheUtil.java
│   │   │       │   └── 📄 FastJson2Util.java
│   │   │       ├── 📄 Cache.java
│   │   │       ├── 📄 DistributedCache.java
│   │   │       ├── 📄 MultistageCache.java
│   │   │       ├── 📄 RedisKeySerializer.java
│   │   │       └── 📄 StringRedisTemplateProxy.java
│   │   ├── 📁 src/main/resources/            # 资源文件
│   │   │   └── 📁 lua/                       # Lua脚本
│   │   │       └── 📄 putIfAllAbsent.lua
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 common/                            # 通用组件
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/framework/starter/common/
│   │   │       ├── 📁 enums/                 # 枚举定义
│   │   │       │   ├── 📄 DelEnum.java
│   │   │       │   ├── 📄 FlagEnum.java
│   │   │       │   ├── 📄 OperationTypeEnum.java
│   │   │       │   └── 📄 StatusEnum.java
│   │   │       ├── 📁 threadpool/            # 线程池组件
│   │   │       │   ├── 📁 build/             # 建造者模式
│   │   │       │   │   ├── 📄 ThreadFactoryBuilder.java
│   │   │       │   │   └── 📄 ThreadPoolBuilder.java
│   │   │       │   ├── 📁 proxy/             # 代理模式
│   │   │       │   │   ├── 📄 RejectedProxyInvocationHandler.java
│   │   │       │   │   └── 📄 RejectedProxyUtil.java
│   │   │       │   └── 📁 support/eager/     # 急切线程池
│   │   │       │       ├── 📄 EagerThreadPoolExecutor.java
│   │   │       │       └── 📄 TaskQueue.java
│   │   │       └── 📁 toolkit/               # 工具类
│   │   │           ├── 📄 Assert.java
│   │   │           ├── 📄 BeanUtil.java
│   │   │           ├── 📄 EnvironmentUtil.java
│   │   │           └── 📄 ThreadUtil.java
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 convention/                        # 约定组件
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/framework/starter/convention/
│   │   │       ├── 📁 errorcode/             # 错误码定义
│   │   │       │   ├── 📄 BaseErrorCode.java
│   │   │       │   └── 📄 IErrorCode.java
│   │   │       ├── 📁 exception/             # 异常定义
│   │   │       │   ├── 📄 AbstractException.java
│   │   │       │   ├── 📄 ClientException.java
│   │   │       │   ├── 📄 RemoteException.java
│   │   │       │   └── 📄 ServiceException.java
│   │   │       ├── 📁 page/                  # 分页组件
│   │   │       │   ├── 📄 PageRequest.java
│   │   │       │   └── 📄 PageResponse.java
│   │   │       └── 📁 result/                # 结果封装
│   │   │           └── 📄 Result.java
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 database/                          # 数据库组件
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/framework/starter/database/
│   │   │       ├── 📁 algorithm/sharding/    # 分片算法
│   │   │       │   └── 📄 CustomDbHashModShardingAlgorithm.java
│   │   │       ├── 📁 base/                  # 基础类
│   │   │       │   └── 📄 BaseDO.java
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   └── 📄 MybatisPlusAutoConfiguration.java
│   │   │       ├── 📁 handler/               # 处理器
│   │   │       │   ├── 📄 CustomIdGenerator.java
│   │   │       │   └── 📄 MyMetaObjectHandler.java
│   │   │       └── 📁 toolkit/               # 工具类
│   │   │           └── 📄 PageUtil.java
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 designpattern/                     # 设计模式组件
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/framework/starter/designpattern/
│   │   │       ├── 📁 builder/               # 建造者模式
│   │   │       │   └── 📄 Builder.java
│   │   │       ├── 📁 chain/                 # 责任链模式
│   │   │       │   ├── 📄 AbstractChainContext.java
│   │   │       │   └── 📄 AbstractChainHandler.java
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   └── 📄 DesignPatternAutoConfiguration.java
│   │   │       └── 📁 strategy/              # 策略模式
│   │   │           ├── 📄 AbstractExecuteStrategy.java
│   │   │           └── 📄 AbstractStrategyChoose.java
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 distributedid/                     # 分布式ID组件
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/framework/starter/distributedid/
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   └── 📄 DistributedIdAutoConfiguration.java
│   │   │       ├── 📁 core/                  # 核心组件
│   │   │       │   ├── 📁 serviceid/         # 服务ID生成
│   │   │       │   │   ├── 📄 DefaultServiceIdGenerator.java
│   │   │       │   │   └── 📄 ServiceIdGenerator.java
│   │   │       │   ├── 📁 snowflake/         # 雪花算法
│   │   │       │   │   ├── 📄 AbstractWorkIdChooseTemplate.java
│   │   │       │   │   ├── 📄 LocalRedisWorkIdChoose.java
│   │   │       │   │   ├── 📄 RandomWorkIdChoose.java
│   │   │       │   │   ├── 📄 Snowflake.java
│   │   │       │   │   ├── 📄 SnowflakeIdInfo.java
│   │   │       │   │   └── 📄 WorkIdWrapper.java
│   │   │       │   └── 📄 IdGenerator.java
│   │   │       ├── 📁 handler/               # 处理器
│   │   │       │   └── 📄 IdGeneratorManager.java
│   │   │       └── 📁 toolkit/               # 工具类
│   │   │           └── 📄 SnowflakeIdUtil.java
│   │   ├── 📁 src/main/resources/            # 资源文件
│   │   │   └── 📁 lua/                       # Lua脚本
│   │   │       └── 📄 chooseWorkIdLua.lua
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 idempotent/                        # 幂等性组件
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/framework/starter/idempotent/
│   │   │       ├── 📁 annotation/            # 注解定义
│   │   │       │   ├── 📄 Idempotent.java
│   │   │       │   ├── 📄 MQIdempotent.java
│   │   │       │   └── 📄 RestAPIIdempotent.java
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   ├── 📄 IdempotentAutoConfiguration.java
│   │   │       │   └── 📄 IdempotentProperties.java
│   │   │       ├── 📁 core/                  # 核心组件
│   │   │       │   ├── 📁 param/             # 参数幂等
│   │   │       │   │   ├── 📄 IdempotentParamExecuteHandler.java
│   │   │       │   │   └── 📄 IdempotentParamService.java
│   │   │       │   ├── 📁 spel/              # SpEL表达式幂等
│   │   │       │   │   ├── 📄 IdempotentSpELByMQExecuteHandler.java
│   │   │       │   │   ├── 📄 IdempotentSpELByRestAPIExecuteHandler.java
│   │   │       │   │   └── 📄 IdempotentSpELService.java
│   │   │       │   ├── 📁 token/             # Token幂等
│   │   │       │   │   ├── 📄 IdempotentTokenController.java
│   │   │       │   │   ├── 📄 IdempotentTokenExecuteHandler.java
│   │   │       │   │   └── 📄 IdempotentTokenService.java
│   │   │       │   ├── 📄 AbstractIdempotentExecuteHandler.java
│   │   │       │   ├── 📄 IdempotentAspect.java
│   │   │       │   ├── 📄 IdempotentContext.java
│   │   │       │   ├── 📄 IdempotentExecuteHandler.java
│   │   │       │   ├── 📄 IdempotentExecuteHandlerFactory.java
│   │   │       │   ├── 📄 IdempotentParamWrapper.java
│   │   │       │   └── 📄 RepeatConsumptionException.java
│   │   │       └── 📁 toolkit/               # 工具类
│   │   │           └── 📄 SpELUtil.java
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 log/                               # 日志组件
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/framework/starter/log/
│   │   │       ├── 📁 annotation/            # 注解定义
│   │   │       │   └── 📄 ILog.java
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   └── 📄 LogAutoConfiguration.java
│   │   │       └── 📁 core/                  # 核心组件
│   │   │           └── 📄 ILogPrintAspect.java
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 web/                               # Web组件
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/framework/starter/web/
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   └── 📄 WebAutoConfiguration.java
│   │   │       ├── 📁 exception/             # 异常处理
│   │   │       │   └── 📄 GlobalExceptionHandler.java
│   │   │       ├── 📁 initialize/            # 初始化组件
│   │   │       │   └── 📄 InitializeDispatcherServletController.java
│   │   │       └── 📁 toolkit/               # 工具类
│   │   │           └── 📄 UserInfoDTO.java
│   │   └── 📄 pom.xml                        # Maven配置
│   └── 📄 pom.xml                            # 框架总配置
│
├── 📁 services/                              # 微服务模块
│   ├── 📁 aggregation-service/               # 聚合服务 (单体部署)
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/biz/aggregationservice/
│   │   │       ├── 📄 AggregationServiceApplication.java  # 启动类
│   │   │       └── 📁 config/                # 配置类
│   │   │           └── 📄 AggregationServiceConfig.java
│   │   ├── 📁 src/main/resources/            # 配置文件
│   │   │   ├── 📄 application.yaml           # 应用配置
│   │   │   ├── 📄 application-dev.yaml       # 开发环境配置
│   │   │   └── 📄 application-aggregation.yaml # 聚合服务配置
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 gateway-service/                   # 网关服务
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/biz/gatewayservice/
│   │   │       ├── 📄 GatewayServiceApplication.java  # 启动类
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   └── 📄 Config.java
│   │   │       ├── 📁 filter/                # 过滤器
│   │   │       │   └── 📄 TokenValidateGatewayFilterFactory.java
│   │   │       └── 📁 toolkit/               # 工具类
│   │   │           ├── 📄 JWTUtil.java
│   │   │           └── 📄 UserInfoDTO.java
│   │   ├── 📁 src/main/resources/            # 配置文件
│   │   │   ├── 📄 application.yaml           # 应用配置
│   │   │   ├── 📄 application-dev.yaml       # 开发环境配置
│   │   │   └── 📄 application-aggregation.yaml # 聚合环境配置
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 user-service/                      # 用户服务
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/biz/userservice/
│   │   │       ├── 📄 UserServiceApplication.java  # 启动类
│   │   │       ├── 📁 controller/            # 控制器层
│   │   │       │   ├── 📄 PassengerController.java
│   │   │       │   ├── 📄 UserInfoController.java
│   │   │       │   └── 📄 UserLoginController.java
│   │   │       ├── 📁 service/               # 业务逻辑层
│   │   │       │   ├── 📁 impl/              # 实现类
│   │   │       │   │   ├── 📄 PassengerServiceImpl.java
│   │   │       │   │   ├── 📄 UserLoginServiceImpl.java
│   │   │       │   │   └── 📄 UserServiceImpl.java
│   │   │       │   ├── 📁 handler/filter/user/ # 责任链处理器
│   │   │       │   │   ├── 📄 UserRegisterCheckDeletionChainHandler.java
│   │   │       │   │   ├── 📄 UserRegisterCreateChainFilter.java
│   │   │       │   │   ├── 📄 UserRegisterHasUsernameChainHandler.java
│   │   │       │   │   └── 📄 UserRegisterParamNotNullChainHandler.java
│   │   │       │   ├── 📄 PassengerService.java
│   │   │       │   ├── 📄 UserLoginService.java
│   │   │       │   └── 📄 UserService.java
│   │   │       ├── 📁 dao/                   # 数据访问层
│   │   │       │   ├── 📁 entity/            # 实体类
│   │   │       │   │   ├── 📄 PassengerDO.java
│   │   │       │   │   ├── 📄 UserDO.java
│   │   │       │   │   ├── 📄 UserDeletionDO.java
│   │   │       │   │   ├── 📄 UserMailDO.java
│   │   │       │   │   ├── 📄 UserPhoneDO.java
│   │   │       │   │   └── 📄 UserReuseDO.java
│   │   │       │   └── 📁 mapper/            # Mapper接口
│   │   │       │       ├── 📄 PassengerMapper.java
│   │   │       │       ├── 📄 UserDeletionMapper.java
│   │   │       │       ├── 📄 UserMailMapper.java
│   │   │       │       ├── 📄 UserMapper.java
│   │   │       │       ├── 📄 UserPhoneMapper.java
│   │   │       │       └── 📄 UserReuseMapper.java
│   │   │       ├── 📁 dto/                   # 数据传输对象
│   │   │       │   ├── 📁 req/               # 请求DTO
│   │   │       │   │   ├── 📄 PassengerRemoveReqDTO.java
│   │   │       │   │   ├── 📄 PassengerReqDTO.java
│   │   │       │   │   ├── 📄 UserDeletionReqDTO.java
│   │   │       │   │   ├── 📄 UserLoginReqDTO.java
│   │   │       │   │   ├── 📄 UserRegisterReqDTO.java
│   │   │       │   │   └── 📄 UserUpdateReqDTO.java
│   │   │       │   └── 📁 resp/              # 响应DTO
│   │   │       │       ├── 📄 PassengerActualRespDTO.java
│   │   │       │       ├── 📄 PassengerRespDTO.java
│   │   │       │       ├── 📄 UserLoginRespDTO.java
│   │   │       │       ├── 📄 UserQueryActualRespDTO.java
│   │   │       │       ├── 📄 UserQueryRespDTO.java
│   │   │       │       └── 📄 UserRegisterRespDTO.java
│   │   │       ├── 📁 common/                # 通用组件
│   │   │       │   ├── 📁 constant/          # 常量定义
│   │   │       │   │   ├── 📄 Index12306Constant.java
│   │   │       │   │   └── 📄 RedisKeyConstant.java
│   │   │       │   └── 📁 enums/             # 枚举定义
│   │   │       │       ├── 📄 UserChainMarkEnum.java
│   │   │       │       ├── 📄 UserRegisterErrorCodeEnum.java
│   │   │       │       └── 📄 VerifyStatusEnum.java
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   ├── 📄 RBloomFilterConfiguration.java
│   │   │       │   └── 📄 UserRegisterBloomFilterProperties.java
│   │   │       ├── 📁 serialize/             # 序列化组件
│   │   │       │   ├── 📄 IdCardDesensitizationSerializer.java
│   │   │       │   └── 📄 PhoneDesensitizationSerializer.java
│   │   │       └── 📁 toolkit/               # 工具类
│   │   │           └── 📄 UserReuseUtil.java
│   │   ├── 📁 src/main/resources/            # 配置文件
│   │   │   ├── 📄 application.yaml           # 应用配置
│   │   │   ├── 📄 shardingsphere-config.yaml # 分库分表配置
│   │   │   └── 📁 mapper/                    # MyBatis映射文件
│   │   │       ├── 📄 UserMailMapper.xml
│   │   │       ├── 📄 UserMapper.xml
│   │   │       └── 📄 UserPhoneMapper.xml
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 ticket-service/                    # 购票服务
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/biz/ticketservice/
│   │   │       ├── 📄 TicketServiceApplication.java  # 启动类
│   │   │       ├── 📁 controller/            # 控制器层
│   │   │       │   ├── 📄 RegionStationController.java
│   │   │       │   ├── 📄 TempSeatController.java
│   │   │       │   ├── 📄 TicketController.java
│   │   │       │   └── 📄 TrainStationController.java
│   │   │       ├── 📁 service/               # 业务逻辑层
│   │   │       │   ├── 📁 impl/              # 实现类
│   │   │       │   │   ├── 📄 CarriageServiceImpl.java
│   │   │       │   │   ├── 📄 RegionStationImpl.java
│   │   │       │   │   ├── 📄 SeatServiceImpl.java
│   │   │       │   │   ├── 📄 TicketServiceImpl.java
│   │   │       │   │   └── 📄 TrainStationServiceImpl.java
│   │   │       │   ├── 📁 handler/ticket/    # 购票处理器
│   │   │       │   │   ├── 📁 base/          # 基础处理器
│   │   │       │   │   │   ├── 📄 AbstractTrainPurchaseTicketTemplate.java
│   │   │       │   │   │   ├── 📄 BitMapCheckSeat.java
│   │   │       │   │   │   ├── 📄 BitMapCheckSeatStatusFactory.java
│   │   │       │   │   │   ├── 📄 IPurchaseTicket.java
│   │   │       │   │   │   ├── 📄 TrainBitMapCheckSeat.java
│   │   │       │   │   │   ├── 📄 TrainBusinessCheckSeat.java
│   │   │       │   │   │   ├── 📄 TrainFirstCheckSeat.java
│   │   │       │   │   │   └── 📄 TrainSecondCheckSeat.java
│   │   │       │   │   ├── 📁 dto/           # 数据传输对象
│   │   │       │   │   │   ├── 📄 SelectSeatDTO.java
│   │   │       │   │   │   ├── 📄 TokenResultDTO.java
│   │   │       │   │   │   └── 📄 TrainPurchaseTicketRespDTO.java
│   │   │       │   │   ├── 📁 filter/        # 过滤器
│   │   │       │   │   │   ├── 📁 purchase/  # 购票过滤器
│   │   │       │   │   │   │   ├── 📄 TrainPurchaseTicketChainFilter.java
│   │   │       │   │   │   │   ├── 📄 TrainPurchaseTicketParamNotNullChainHandler.java
│   │   │       │   │   │   │   ├── 📄 TrainPurchaseTicketParamStockChainHandler.java
│   │   │       │   │   │   │   ├── 📄 TrainPurchaseTicketParamVerifyChainHandler.java
│   │   │       │   │   │   │   └── 📄 TrainPurchaseTicketRepeatChainHandler.java
│   │   │       │   │   │   ├── 📁 query/     # 查询过滤器
│   │   │       │   │   │   │   ├── 📄 TrainTicketQueryChainFilter.java
│   │   │       │   │   │   │   ├── 📄 TrainTicketQueryParamBaseVerifyChainFilter.java
│   │   │       │   │   │   │   ├── 📄 TrainTicketQueryParamNotNullChainFilter.java
│   │   │       │   │   │   │   └── 📄 TrainTicketQueryParamVerifyChainFilter.java
│   │   │       │   │   │   └── 📁 refund/    # 退票过滤器
│   │   │       │   │   │       ├── 📄 TrainRefundTicketChainFilter.java
│   │   │       │   │   │       └── 📄 TrainRefundTicketParamNotNullChainFilter.java
│   │   │       │   │   ├── 📁 select/        # 选座组件
│   │   │       │   │   │   ├── 📄 SeatSelection.java
│   │   │       │   │   │   └── 📄 TrainSeatTypeSelector.java
│   │   │       │   │   ├── 📁 tokenbucket/   # 令牌桶
│   │   │       │   │   │   └── 📄 TicketAvailabilityTokenBucket.java
│   │   │       │   │   ├── 📄 TrainBusinessClassPurchaseTicketHandler.java
│   │   │       │   │   ├── 📄 TrainFirstClassPurchaseTicketHandler.java
│   │   │       │   │   └── 📄 TrainSecondClassPurchaseTicketHandler.java
│   │   │       │   ├── 📁 cache/             # 缓存组件
│   │   │       │   │   └── 📄 SeatMarginCacheLoader.java
│   │   │       │   ├── 📄 CarriageService.java
│   │   │       │   ├── 📄 RegionStationService.java
│   │   │       │   ├── 📄 SeatService.java
│   │   │       │   ├── 📄 TicketService.java
│   │   │       │   └── 📄 TrainStationService.java
│   │   │       ├── 📁 dao/                   # 数据访问层
│   │   │       │   ├── 📁 entity/            # 实体类
│   │   │       │   │   ├── 📄 CarriageDO.java
│   │   │       │   │   ├── 📄 RegionDO.java
│   │   │       │   │   ├── 📄 SeatDO.java
│   │   │       │   │   ├── 📄 StationDO.java
│   │   │       │   │   ├── 📄 TicketDO.java
│   │   │       │   │   ├── 📄 TrainDO.java
│   │   │       │   │   ├── 📄 TrainStationDO.java
│   │   │       │   │   ├── 📄 TrainStationPriceDO.java
│   │   │       │   │   └── 📄 TrainStationRelationDO.java
│   │   │       │   └── 📁 mapper/            # Mapper接口
│   │   │       │       ├── 📄 CarriageMapper.java
│   │   │       │       ├── 📄 RegionMapper.java
│   │   │       │       ├── 📄 SeatMapper.java
│   │   │       │       ├── 📄 StationMapper.java
│   │   │       │       ├── 📄 TicketMapper.java
│   │   │       │       ├── 📄 TrainMapper.java
│   │   │       │       ├── 📄 TrainStationMapper.java
│   │   │       │       ├── 📄 TrainStationPriceMapper.java
│   │   │       │       └── 📄 TrainStationRelationMapper.java
│   │   │       ├── 📁 dto/                   # 数据传输对象
│   │   │       │   ├── 📁 domain/            # 领域对象
│   │   │       │   │   ├── 📄 BulletTrainDTO.java
│   │   │       │   │   ├── 📄 HighSpeedTrainDTO.java
│   │   │       │   │   ├── 📄 PurchaseTicketPassengerDetailDTO.java
│   │   │       │   │   ├── 📄 RegularTrainDTO.java
│   │   │       │   │   ├── 📄 RouteDTO.java
│   │   │       │   │   ├── 📄 SeatClassDTO.java
│   │   │       │   │   ├── 📄 SeatTypeCountDTO.java
│   │   │       │   │   ├── 📄 TicketListDTO.java
│   │   │       │   │   └── 📄 TrainSeatBaseDTO.java
│   │   │       │   ├── 📁 req/               # 请求DTO
│   │   │       │   │   ├── 📄 CancelTicketOrderReqDTO.java
│   │   │       │   │   ├── 📄 PurchaseTicketReqDTO.java
│   │   │       │   │   ├── 📄 RefundTicketReqDTO.java
│   │   │       │   │   ├── 📄 RegionStationQueryReqDTO.java
│   │   │       │   │   ├── 📄 TicketOrderItemQueryReqDTO.java
│   │   │       │   │   └── 📄 TicketPageQueryReqDTO.java
│   │   │       │   └── 📁 resp/              # 响应DTO
│   │   │       │       ├── 📄 RefundTicketRespDTO.java
│   │   │       │       ├── 📄 RegionStationQueryRespDTO.java
│   │   │       │       ├── 📄 StationQueryRespDTO.java
│   │   │       │       ├── 📄 TicketOrderDetailRespDTO.java
│   │   │       │       ├── 📄 TicketPageQueryRespDTO.java
│   │   │       │       ├── 📄 TicketPurchaseRespDTO.java
│   │   │       │       └── 📄 TrainStationQueryRespDTO.java
│   │   │       ├── 📁 mq/                    # 消息队列
│   │   │       │   ├── 📁 consumer/          # 消费者
│   │   │       │   │   ├── 📄 CanalCommonSyncBinlogConsumer.java
│   │   │       │   │   ├── 📄 DelayCloseOrderConsumer.java
│   │   │       │   │   └── 📄 PayResultCallbackTicketConsumer.java
│   │   │       │   ├── 📁 domain/            # 领域对象
│   │   │       │   │   └── 📄 MessageWrapper.java
│   │   │       │   └── 📁 event/             # 事件定义
│   │   │       │       ├── 📄 CanalBinlogEvent.java
│   │   │       │       ├── 📄 DelayCloseOrderEvent.java
│   │   │       │       └── 📄 PayResultCallbackTicketEvent.java
│   │   │       ├── 📁 job/                   # 定时任务
│   │   │       │   ├── 📁 base/              # 基础模板
│   │   │       │   │   └── 📄 AbstractTrainStationJobHandlerTemplate.java
│   │   │       │   ├── 📄 RegionTrainStationJobHandler.java
│   │   │       │   ├── 📄 TrainStationDetailJobHandler.java
│   │   │       │   ├── 📄 TrainStationJobHandler.java
│   │   │       │   └── 📄 TrainStationRemainingTicketJobHandler.java
│   │   │       ├── 📁 canal/                 # Canal组件
│   │   │       │   ├── 📄 OrderCloseCacheAndTokenUpdateHandler.java
│   │   │       │   └── 📄 TicketAvailabilityCacheUpdateHandler.java
│   │   │       ├── 📁 remote/                # 远程调用
│   │   │       │   ├── 📁 dto/               # 远程调用DTO
│   │   │       │   │   ├── 📄 PassengerRespDTO.java
│   │   │       │   │   ├── 📄 PayInfoRespDTO.java
│   │   │       │   │   ├── 📄 RefundReqDTO.java
│   │   │       │   │   ├── 📄 RefundRespDTO.java
│   │   │       │   │   ├── 📄 TicketOrderCreateRemoteReqDTO.java
│   │   │       │   │   ├── 📄 TicketOrderDetailRespDTO.java
│   │   │       │   │   ├── 📄 TicketOrderItemCreateRemoteReqDTO.java
│   │   │       │   │   └── 📄 TicketOrderPassengerDetailRespDTO.java
│   │   │       │   ├── 📄 PayRemoteService.java
│   │   │       │   ├── 📄 TicketOrderRemoteService.java
│   │   │       │   └── 📄 UserRemoteService.java
│   │   │       ├── 📁 common/                # 通用组件
│   │   │       │   ├── 📁 constant/          # 常量定义
│   │   │       │   │   ├── 📄 Index12306Constant.java
│   │   │       │   │   ├── 📄 RedisKeyConstant.java
│   │   │       │   │   └── 📄 TicketRocketMQConstant.java
│   │   │       │   └── 📁 enums/             # 枚举定义
│   │   │       │       ├── 📄 CanalExecuteStrategyMarkEnum.java
│   │   │       │       ├── 📄 RefundTypeEnum.java
│   │   │       │       ├── 📄 RegionStationQueryTypeEnum.java
│   │   │       │       ├── 📄 SeatStatusEnum.java
│   │   │       │       ├── 📄 SourceEnum.java
│   │   │       │       ├── 📄 TicketChainMarkEnum.java
│   │   │       │       ├── 📄 TicketStatusEnum.java
│   │   │       │       ├── 📄 TrainBrandEnum.java
│   │   │       │       ├── 📄 VehicleSeatTypeEnum.java
│   │   │       │       └── 📄 VehicleTypeEnum.java
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   └── 📄 Hippo4jThreadPoolConfiguration.java
│   │   │       └── 📁 toolkit/               # 工具类
│   │   │           ├── 📄 CarriageVacantSeatCalculateUtil.java
│   │   │           ├── 📄 ChooseSeatUtil.java
│   │   │           ├── 📄 DateUtil.java
│   │   │           ├── 📄 SeatNumberUtil.java
│   │   │           ├── 📄 StationCalculateUtil.java
│   │   │           ├── 📄 SurplusNeedMatchSeatUtil.java
│   │   │           └── 📄 TimeStringComparator.java
│   │   ├── 📁 src/main/resources/            # 配置文件
│   │   │   ├── 📄 application.yaml           # 应用配置
│   │   │   ├── 📁 lua/                       # Lua脚本
│   │   │   │   ├── 📄 ticket_availability_rollback_token_bucket.lua
│   │   │   │   └── 📄 ticket_availability_token_bucket.lua
│   │   │   └── 📁 mapper/                    # MyBatis映射文件
│   │   │       └── 📄 SeatMapper.xml
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 order-service/                     # 订单服务
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/biz/orderservice/
│   │   │       ├── 📄 OrderServiceApplication.java  # 启动类
│   │   │       ├── 📁 controller/            # 控制器层
│   │   │       │   └── 📄 TicketOrderController.java
│   │   │       ├── 📁 service/               # 业务逻辑层
│   │   │       │   ├── 📁 impl/              # 实现类
│   │   │       │   │   ├── 📄 OrderItemServiceImpl.java
│   │   │       │   │   ├── 📄 OrderPassengerRelationServiceImpl.java
│   │   │       │   │   └── 📄 OrderServiceImpl.java
│   │   │       │   ├── 📁 orderid/           # 订单ID生成
│   │   │       │   │   ├── 📄 DistributedIdGenerator.java
│   │   │       │   │   └── 📄 OrderIdGeneratorManager.java
│   │   │       │   ├── 📄 OrderItemService.java
│   │   │       │   ├── 📄 OrderPassengerRelationService.java
│   │   │       │   └── 📄 OrderService.java
│   │   │       ├── 📁 dao/                   # 数据访问层
│   │   │       │   ├── 📁 entity/            # 实体类
│   │   │       │   │   ├── 📄 OrderDO.java
│   │   │       │   │   ├── 📄 OrderItemDO.java
│   │   │       │   │   └── 📄 OrderItemPassengerDO.java
│   │   │       │   ├── 📁 mapper/            # Mapper接口
│   │   │       │   │   ├── 📄 OrderItemMapper.java
│   │   │       │   │   ├── 📄 OrderItemPassengerMapper.java
│   │   │       │   │   └── 📄 OrderMapper.java
│   │   │       │   └── 📁 algorithm/         # 分片算法
│   │   │       │       ├── 📄 OrderCommonDataBaseComplexAlgorithm.java
│   │   │       │       └── 📄 OrderCommonTableComplexAlgorithm.java
│   │   │       ├── 📁 dto/                   # 数据传输对象
│   │   │       │   ├── 📁 domain/            # 领域对象
│   │   │       │   │   ├── 📄 OrderItemStatusReversalDTO.java
│   │   │       │   │   └── 📄 OrderStatusReversalDTO.java
│   │   │       │   ├── 📁 req/               # 请求DTO
│   │   │       │   │   ├── 📄 CancelTicketOrderReqDTO.java
│   │   │       │   │   ├── 📄 TicketOrderCreateReqDTO.java
│   │   │       │   │   ├── 📄 TicketOrderItemCreateReqDTO.java
│   │   │       │   │   ├── 📄 TicketOrderItemQueryReqDTO.java
│   │   │       │   │   ├── 📄 TicketOrderPageQueryReqDTO.java
│   │   │       │   │   └── 📄 TicketOrderSelfPageQueryReqDTO.java
│   │   │       │   └── 📁 resp/              # 响应DTO
│   │   │       │       ├── 📄 TicketOrderDetailRespDTO.java
│   │   │       │       ├── 📄 TicketOrderDetailSelfRespDTO.java
│   │   │       │       └── 📄 TicketOrderPassengerDetailRespDTO.java
│   │   │       ├── 📁 mq/                    # 消息队列
│   │   │       │   ├── 📁 consumer/          # 消费者
│   │   │       │   │   ├── 📄 PayResultCallbackOrderConsumer.java
│   │   │       │   │   └── 📄 RefundResultCallbackOrderConsumer.java
│   │   │       │   ├── 📁 domain/            # 领域对象
│   │   │       │   │   └── 📄 MessageWrapper.java
│   │   │       │   ├── 📁 event/             # 事件定义
│   │   │       │   │   ├── 📄 DelayCloseOrderEvent.java
│   │   │       │   │   ├── 📄 PayResultCallbackOrderEvent.java
│   │   │       │   │   └── 📄 RefundResultCallbackOrderEvent.java
│   │   │       │   └── 📁 produce/           # 生产者
│   │   │       │       ├── 📄 AbstractCommonSendProduceTemplate.java
│   │   │       │       ├── 📄 BaseSendExtendDTO.java
│   │   │       │       └── 📄 DelayCloseOrderSendProduce.java
│   │   │       ├── 📁 remote/                # 远程调用
│   │   │       │   ├── 📁 dto/               # 远程调用DTO
│   │   │       │   │   └── 📄 UserQueryActualRespDTO.java
│   │   │       │   └── 📄 UserRemoteService.java
│   │   │       ├── 📁 serialize/             # 序列化组件
│   │   │       │   ├── 📄 IdCardDesensitizationSerializer.java
│   │   │       │   └── 📄 PhoneDesensitizationSerializer.java
│   │   │       └── 📁 common/                # 通用组件
│   │   │           ├── 📁 constant/          # 常量定义
│   │   │           │   └── 📄 OrderRocketMQConstant.java
│   │   │           └── 📁 enums/             # 枚举定义
│   │   │               ├── 📄 OrderCanalErrorCodeEnum.java
│   │   │               ├── 📄 OrderItemStatusEnum.java
│   │   │               ├── 📄 OrderStatusEnum.java
│   │   │               ├── 📄 PayChannelEnum.java
│   │   │               └── 📄 RefundTypeEnum.java
│   │   ├── 📁 src/main/resources/            # 配置文件
│   │   │   ├── 📄 application.yaml           # 应用配置
│   │   │   └── 📄 shardingsphere-config.yaml # 分库分表配置
│   │   └── 📄 pom.xml                        # Maven配置
│   ├── 📁 pay-service/                       # 支付服务
│   │   ├── 📁 src/main/java/                 # Java源码
│   │   │   └── 📁 org/opengoofy/index12306/biz/payservice/
│   │   │       ├── 📄 PayServiceApplication.java  # 启动类
│   │   │       ├── 📁 controller/            # 控制器层
│   │   │       │   ├── 📄 PayCallbackController.java
│   │   │       │   ├── 📄 PayController.java
│   │   │       │   └── 📄 RefundController.java
│   │   │       ├── 📁 service/               # 业务逻辑层
│   │   │       │   ├── 📁 impl/              # 实现类
│   │   │       │   │   ├── 📄 PayServiceImpl.java
│   │   │       │   │   └── 📄 RefundServiceImpl.java
│   │   │       │   ├── 📁 payid/             # 支付ID生成
│   │   │       │   │   ├── 📄 DistributedIdGenerator.java
│   │   │       │   │   └── 📄 PayIdGeneratorManager.java
│   │   │       │   ├── 📄 PayService.java
│   │   │       │   └── 📄 RefundService.java
│   │   │       ├── 📁 dao/                   # 数据访问层
│   │   │       │   ├── 📁 entity/            # 实体类
│   │   │       │   │   ├── 📄 PayDO.java
│   │   │       │   │   └── 📄 RefundDO.java
│   │   │       │   ├── 📁 mapper/            # Mapper接口
│   │   │       │   │   ├── 📄 PayMapper.java
│   │   │       │   │   └── 📄 RefundMapper.java
│   │   │       │   └── 📁 algorithm/         # 分片算法
│   │   │       │       ├── 📄 PayDataBaseComplexAlgorithm.java
│   │   │       │       └── 📄 PayTableComplexAlgorithm.java
│   │   │       ├── 📁 dto/                   # 数据传输对象
│   │   │       │   ├── 📁 base/              # 基础DTO
│   │   │       │   │   ├── 📄 AbstractPayCallbackRequest.java
│   │   │       │   │   ├── 📄 AbstractPayRequest.java
│   │   │       │   │   ├── 📄 AbstractRefundRequest.java
│   │   │       │   │   ├── 📄 AliPayCallbackRequest.java
│   │   │       │   │   ├── 📄 AliPayRequest.java
│   │   │       │   │   ├── 📄 AliRefundRequest.java
│   │   │       │   │   ├── 📄 PayCallbackRequest.java
│   │   │       │   │   ├── 📄 PayRequest.java
│   │   │       │   │   ├── 📄 PayResponse.java
│   │   │       │   │   ├── 📄 RefundRequest.java
│   │   │       │   │   └── 📄 RefundResponse.java
│   │   │       │   ├── 📄 PayCallbackCommand.java
│   │   │       │   ├── 📄 PayCallbackReqDTO.java
│   │   │       │   ├── 📄 PayCommand.java
│   │   │       │   ├── 📄 PayCreateReqDTO.java
│   │   │       │   ├── 📄 PayInfoRespDTO.java
│   │   │       │   ├── 📄 PayRespDTO.java
│   │   │       │   ├── 📄 RefundCommand.java
│   │   │       │   ├── 📄 RefundCreateDTO.java
│   │   │       │   ├── 📄 RefundReqDTO.java
│   │   │       │   └── 📄 RefundRespDTO.java
│   │   │       ├── 📁 handler/               # 支付处理器
│   │   │       │   ├── 📁 base/              # 基础处理器
│   │   │       │   │   ├── 📄 AbstractPayCallbackHandler.java
│   │   │       │   │   ├── 📄 AbstractPayHandler.java
│   │   │       │   │   └── 📄 AbstractRefundHandler.java
│   │   │       │   ├── 📄 AliPayCallbackHandler.java
│   │   │       │   ├── 📄 AliPayNativeHandler.java
│   │   │       │   └── 📄 AliRefundNativeHandler.java
│   │   │       ├── 📁 convert/               # 转换器
│   │   │       │   ├── 📄 PayCallbackRequestConvert.java
│   │   │       │   ├── 📄 PayRequestConvert.java
│   │   │       │   └── 📄 RefundRequestConvert.java
│   │   │       ├── 📁 mq/                    # 消息队列
│   │   │       │   ├── 📁 domain/            # 领域对象
│   │   │       │   │   └── 📄 MessageWrapper.java
│   │   │       │   ├── 📁 event/             # 事件定义
│   │   │       │   │   ├── 📄 PayResultCallbackOrderEvent.java
│   │   │       │   │   └── 📄 RefundResultCallbackOrderEvent.java
│   │   │       │   └── 📁 produce/           # 生产者
│   │   │       │       ├── 📄 AbstractCommonSendProduceTemplate.java
│   │   │       │       ├── 📄 BaseSendExtendDTO.java
│   │   │       │       ├── 📄 PayResultCallbackOrderSendProduce.java
│   │   │       │       └── 📄 RefundResultCallbackOrderSendProduce.java
│   │   │       ├── 📁 remote/                # 远程调用
│   │   │       │   ├── 📁 dto/               # 远程调用DTO
│   │   │       │   │   ├── 📄 TicketOrderDetailRespDTO.java
│   │   │       │   │   └── 📄 TicketOrderPassengerDetailRespDTO.java
│   │   │       │   └── 📄 TicketOrderRemoteService.java
│   │   │       ├── 📁 config/                # 配置类
│   │   │       │   └── 📄 AliPayProperties.java
│   │   │       └── 📁 common/                # 通用组件
│   │   │           ├── 📁 constant/          # 常量定义
│   │   │           │   ├── 📄 PayRocketMQConstant.java
│   │   │           │   └── 📄 RedisKeyConstant.java
│   │   │           └── 📁 enums/             # 枚举定义
│   │   │               ├── 📄 PayChannelEnum.java
│   │   │               ├── 📄 PayTradeTypeEnum.java
│   │   │               ├── 📄 RefundTypeEnum.java
│   │   │               └── 📄 TradeStatusEnum.java
│   │   ├── 📁 src/main/resources/            # 配置文件
│   │   │   ├── 📄 application.yaml           # 应用配置
│   │   │   └── 📄 shardingsphere-config.yaml # 分库分表配置
│   │   └── 📄 pom.xml                        # Maven配置
│   └── 📄 pom.xml                            # 服务总配置
│
├── 📁 tests/                                 # 测试模块
│   ├── 📁 general/                           # 通用测试
│   │   ├── 📁 src/test/java/                 # 测试源码
│   │   │   └── 📁 org/opengoofy/index12306/test/general/
│   │   │       └── 📄 GeneralTests.java
│   │   └── 📄 pom.xml                        # Maven配置
│   └── 📄 pom.xml                            # 测试总配置
│
├── 📁 resources/                             # 项目资源
│   ├── 📁 data/                              # 数据文件
│   └── 📁 db/                                # 数据库脚本
│
├── 📁 checkstyle/                            # 代码规范检查
│   ├── 📄 12306_checkstyle.xml               # Checkstyle规则配置
│   └── 📄 12306_checkstyle_suppression.xml   # Checkstyle抑制配置
│
├── 📁 format/                                # 代码格式化配置
│   ├── 📄 12306_spotless_formatter.xml       # Spotless格式化配置
│   └── 📄 copyright.txt                      # 版权信息模板
│
├── 📁 .mvn/wrapper/                          # Maven Wrapper
│   ├── 📄 maven-wrapper.jar                  # Maven Wrapper JAR
│   └── 📄 maven-wrapper.properties           # Maven Wrapper配置
│
├── 📄 pom.xml                                # Maven主配置文件
├── 📄 lombok.config                          # Lombok配置
├── 📄 mvnw                                   # Maven Wrapper脚本(Unix)
├── 📄 mvnw.cmd                               # Maven Wrapper脚本(Windows)
├── 📄 .gitignore                             # Git忽略文件配置
├── 📄 LICENSE                                # 开源许可证
└── 📄 README.md                              # 项目说明文档

🔧 核心模块说明

🏢 微服务模块 (services/)

服务名称 端口 功能描述 核心特性
gateway-service 8000 API网关服务 路由转发、认证鉴权、限流熔断
user-service 8001 用户服务 用户注册登录、乘车人管理、分库分表
ticket-service 8002 购票服务 车票查询、座位选择、库存管理
order-service 8003 订单服务 订单创建、状态管理、分库分表
pay-service 8004 支付服务 支付处理、退款管理、多渠道支付
aggregation-service 8888 聚合服务 单体部署版本,包含所有业务功能

🛠️ 框架组件库 (frameworks/)

组件名称 功能描述 核心特性
base 基础组件 应用上下文、单例模式、安全模式
cache 缓存组件 多级缓存、分布式缓存、缓存穿透防护
database 数据库组件 MyBatis-Plus集成、分库分表、自动填充
designpattern 设计模式组件 责任链、策略模式、建造者模式
distributedid 分布式ID组件 雪花算法、服务ID生成
idempotent 幂等性组件 接口幂等、MQ幂等、参数幂等
web Web组件 全局异常处理、统一返回格式
convention 约定组件 错误码定义、分页封装、结果封装
common 通用组件 工具类、线程池、枚举定义
log 日志组件 日志切面、链路追踪
bizs/user 用户业务组件 JWT工具、用户上下文、过滤器

🚀 快速开始

📋 环境要求

软件 版本要求 说明
JDK 17+ 必须使用JDK17或更高版本
Maven 3.6+ 项目构建工具
MySQL 8.0+ 数据库
Redis 6.0+ 缓存数据库
RocketMQ 4.9+ 消息队列
Node.js 16+ 前端开发环境
Yarn 1.22+ 前端包管理器

🔧 环境搭建

1. 克隆项目

git clone https://github.com/opengoofy/12306.git
cd 12306

2. 数据库初始化

-- 创建数据库
CREATE DATABASE `12306_user` DEFAULT CHARACTER SET utf8mb4;
CREATE DATABASE `12306_ticket` DEFAULT CHARACTER SET utf8mb4;
CREATE DATABASE `12306_order` DEFAULT CHARACTER SET utf8mb4;
CREATE DATABASE `12306_pay` DEFAULT CHARACTER SET utf8mb4;

-- 导入数据库脚本
-- 脚本位置:resources/db/

3. 修改配置文件

# application.yaml 示例配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/12306_user?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: your_password

  redis:
    host: localhost
    port: 6379
    password: your_redis_password

rocketmq:
  name-server: localhost:9876

🎯 启动方式

方式一:聚合服务启动(推荐新手)

# 1. 编译项目
mvn clean compile

# 2. 启动聚合服务
cd services/aggregation-service
mvn spring-boot:run

# 3. 启动网关服务
cd ../gateway-service
mvn spring-boot:run

# 4. 启动前端
cd ../../console-vue
yarn install
yarn serve

方式二:微服务分别启动(推荐学习)

# 1. 启动用户服务
cd services/user-service
mvn spring-boot:run

# 2. 启动购票服务
cd ../ticket-service
mvn spring-boot:run

# 3. 启动订单服务
cd ../order-service
mvn spring-boot:run

# 4. 启动支付服务
cd ../pay-service
mvn spring-boot:run

# 5. 启动网关服务
cd ../gateway-service
mvn spring-boot:run

# 6. 启动前端
cd ../../console-vue
yarn serve

🌐 访问地址

服务 地址 说明
前端控制台 http://localhost:8080 Vue3前端系统
API网关 http://localhost:8000 统一API入口
用户服务 http://localhost:8001 用户相关接口
购票服务 http://localhost:8002 购票相关接口
订单服务 http://localhost:8003 订单相关接口
支付服务 http://localhost:8004 支付相关接口

🎨 功能展示

1. 🔍 车票查询功能

车票查询

核心特性:

  • 智能查询算法,支持多种查询条件
  • 实时余票展示,精确到座位类型
  • 缓存优化,毫秒级响应
  • 支持中转查询和直达查询

2. 👥 乘车人管理

乘车人管理

核心特性:

  • 乘车人信息管理
  • 证件信息验证
  • 常用乘车人快速选择
  • 信息脱敏保护

3. 🎫 在线选座

在线选座

核心特性:

  • 可视化座位图
  • 智能座位推荐
  • 相邻座位优先分配
  • 实时座位状态更新

4. 📋 订单确认

订单确认

核心特性:

  • 订单信息确认
  • 多种支付方式
  • 订单状态实时更新
  • 支持订单取消和退款

💡 核心亮点

🔥 业务难点与解决方案

1. 高并发购票场景

问题:秒杀场景下的高并发处理 解决方案

  • 令牌桶限流算法
  • 分布式锁防止超卖
  • 异步处理提升吞吐量
  • 多级缓存减少数据库压力

2. 分库分表设计

问题:海量用户数据的存储和查询 解决方案

  • 基于用户ID的分片策略
  • 读写分离提升性能
  • 平滑数据迁移方案
  • 跨库查询优化

3. 缓存穿透防护

问题:恶意请求导致的缓存穿透 解决方案

  • 布隆过滤器预判
  • 空值缓存策略
  • 请求合并减少压力
  • 熔断降级保护

4. 座位分配算法

问题:复杂的座位分配逻辑 解决方案

座位分配优先级:
1. 相邻座位(同车厢)
2. 不相邻座位(同车厢)
3. 不同车厢座位
4. 智能推荐算法

5. 数据安全保护

问题:敏感信息的安全存储 解决方案

  • 字段级加密存储
  • 数据脱敏展示
  • 访问权限控制
  • 审计日志记录

🎯 技术亮点

1. 设计模式应用

// 责任链模式 - 购票流程处理
@Component
public class TrainPurchaseTicketChainFilter implements CommandLineRunner {
    @Resource
    private AbstractChainContext abstractChainContext;

    @Override
    public void run(String... args) throws Exception {
        abstractChainContext.handler(TicketChainMarkEnum.TRAIN_PURCHASE_TICKET_FILTER.name(),
                new TrainPurchaseTicketParamNotNullChainHandler(),
                new TrainPurchaseTicketParamVerifyChainHandler(),
                new TrainPurchaseTicketParamStockChainHandler(),
                new TrainPurchaseTicketParamRepeatChainHandler());
    }
}

// 策略模式 - 支付方式处理
@Component
public class PayStrategyChoose extends AbstractStrategyChoose implements ApplicationContextAware {

    public PayResponse executeResp(PayRequest requestParam) {
        AbstractPayHandler instance = getInstance(requestParam.buildMark());
        return instance.handler(requestParam);
    }
}

2. 分布式ID生成

// 雪花算法实现
@Component
public class SnowflakeIdUtil {

    public static long nextId() {
        return IdGeneratorManager.getDefaultServiceIdGenerator().nextId();
    }

    public static String nextIdStr() {
        return IdGeneratorManager.getDefaultServiceIdGenerator().nextIdStr();
    }
}

3. 缓存设计

// 多级缓存实现
@Component
public class SeatMarginCacheLoader implements CacheLoader<String> {

    @Override
    public String load(String key) {
        // 从数据库加载座位余量信息
        return loadSeatMarginFromDatabase(key);
    }
}

📊 性能指标

指标 目标值 说明
QPS 10000+ 查询接口并发处理能力
TPS 5000+ 购票接口事务处理能力
响应时间 <100ms 接口平均响应时间
可用性 99.9% 系统可用性指标
数据一致性 强一致 核心业务数据一致性

❓ 常见问题

Q1:项目适合什么水平的开发者学习?

A1: 项目设计了不同的学习路径:

  • 初学者:可以从聚合服务版本开始,理解基本的业务流程
  • 进阶者:学习微服务架构设计和分布式系统原理
  • 高级者:深入研究高并发、分库分表等技术难点

Q2:如何将项目写到简历上?

A2: 建议突出以下亮点:

  • 技术栈:SpringBoot3 + SpringCloud + 分库分表 + 高并发
  • 业务复杂度:12306购票系统的业务复杂性
  • 技术难点:缓存穿透、分布式锁、座位分配算法
  • 性能优化:多级缓存、异步处理、限流熔断

Q3:项目的学习路径建议?

A3: 推荐学习顺序:

  1. 环境搭建 → 熟悉项目结构和技术栈
  2. 业务理解 → 理解12306购票的业务流程
  3. 代码阅读 → 从简单模块开始,逐步深入
  4. 功能扩展 → 尝试添加新功能或优化现有功能
  5. 性能调优 → 学习高并发和性能优化技巧

Q4:遇到问题如何获得帮助?

A4: 多种获取帮助的方式:

  • 项目文档https://nageoffer.com/12306
  • GitHub Issues:提交问题和建议
  • 技术交流群:添加微信备注"12306"加入交流群
  • 公众号:关注"马丁玩编程"获取最新资料

🤝 贡献指南

🔧 开发规范

代码规范

  • 遵循阿里巴巴Java开发手册
  • 使用Checkstyle进行代码检查
  • 统一使用Spotless进行代码格式化

提交规范

feat: 新功能
fix: 修复bug
docs: 文档更新
style: 代码格式调整
refactor: 代码重构
test: 测试相关
chore: 构建过程或辅助工具的变动

分支管理

  • main:主分支,稳定版本
  • develop:开发分支,最新功能
  • feature/*:功能分支
  • hotfix/*:热修复分支

🎯 贡献方式

  1. Fork 项目到自己的GitHub
  2. 创建功能分支 git checkout -b feature/AmazingFeature
  3. 提交更改 git commit -m 'Add some AmazingFeature'
  4. 推送分支 git push origin feature/AmazingFeature
  5. 创建 Pull Request

🏆 贡献者

感谢所有为项目做出贡献的开发者!

📄 许可证

本项目基于 Apache License 2.0 许可证开源。

🔗 相关链接

📞 联系我们

  • 公众号:马丁玩编程
  • 微信群:添加微信备注"12306"
  • 邮箱machen@apache.org

⭐ 如果这个项目对你有帮助,请给个Star支持一下!⭐

🎯 让我们一起构建更好的12306系统!🎯

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors