🔥 热门推荐 🔥 大学春招、秋招、应届项目
基于 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 # 项目说明文档
| 服务名称 | 端口 | 功能描述 | 核心特性 |
|---|---|---|---|
| gateway-service | 8000 | API网关服务 | 路由转发、认证鉴权、限流熔断 |
| user-service | 8001 | 用户服务 | 用户注册登录、乘车人管理、分库分表 |
| ticket-service | 8002 | 购票服务 | 车票查询、座位选择、库存管理 |
| order-service | 8003 | 订单服务 | 订单创建、状态管理、分库分表 |
| pay-service | 8004 | 支付服务 | 支付处理、退款管理、多渠道支付 |
| aggregation-service | 8888 | 聚合服务 | 单体部署版本,包含所有业务功能 |
| 组件名称 | 功能描述 | 核心特性 |
|---|---|---|
| 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+ | 前端包管理器 |
git clone https://github.com/opengoofy/12306.git
cd 12306-- 创建数据库
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/# 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 | 支付相关接口 |
核心特性:
- 智能查询算法,支持多种查询条件
- 实时余票展示,精确到座位类型
- 缓存优化,毫秒级响应
- 支持中转查询和直达查询
核心特性:
- 乘车人信息管理
- 证件信息验证
- 常用乘车人快速选择
- 信息脱敏保护
核心特性:
- 可视化座位图
- 智能座位推荐
- 相邻座位优先分配
- 实时座位状态更新
核心特性:
- 订单信息确认
- 多种支付方式
- 订单状态实时更新
- 支持订单取消和退款
问题:秒杀场景下的高并发处理 解决方案:
- 令牌桶限流算法
- 分布式锁防止超卖
- 异步处理提升吞吐量
- 多级缓存减少数据库压力
问题:海量用户数据的存储和查询 解决方案:
- 基于用户ID的分片策略
- 读写分离提升性能
- 平滑数据迁移方案
- 跨库查询优化
问题:恶意请求导致的缓存穿透 解决方案:
- 布隆过滤器预判
- 空值缓存策略
- 请求合并减少压力
- 熔断降级保护
问题:复杂的座位分配逻辑 解决方案:
座位分配优先级:
1. 相邻座位(同车厢)
2. 不相邻座位(同车厢)
3. 不同车厢座位
4. 智能推荐算法
问题:敏感信息的安全存储 解决方案:
- 字段级加密存储
- 数据脱敏展示
- 访问权限控制
- 审计日志记录
// 责任链模式 - 购票流程处理
@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);
}
}// 雪花算法实现
@Component
public class SnowflakeIdUtil {
public static long nextId() {
return IdGeneratorManager.getDefaultServiceIdGenerator().nextId();
}
public static String nextIdStr() {
return IdGeneratorManager.getDefaultServiceIdGenerator().nextIdStr();
}
}// 多级缓存实现
@Component
public class SeatMarginCacheLoader implements CacheLoader<String> {
@Override
public String load(String key) {
// 从数据库加载座位余量信息
return loadSeatMarginFromDatabase(key);
}
}| 指标 | 目标值 | 说明 |
|---|---|---|
| QPS | 10000+ | 查询接口并发处理能力 |
| TPS | 5000+ | 购票接口事务处理能力 |
| 响应时间 | <100ms | 接口平均响应时间 |
| 可用性 | 99.9% | 系统可用性指标 |
| 数据一致性 | 强一致 | 核心业务数据一致性 |
A1: 项目设计了不同的学习路径:
- 初学者:可以从聚合服务版本开始,理解基本的业务流程
- 进阶者:学习微服务架构设计和分布式系统原理
- 高级者:深入研究高并发、分库分表等技术难点
A2: 建议突出以下亮点:
- 技术栈:SpringBoot3 + SpringCloud + 分库分表 + 高并发
- 业务复杂度:12306购票系统的业务复杂性
- 技术难点:缓存穿透、分布式锁、座位分配算法
- 性能优化:多级缓存、异步处理、限流熔断
A3: 推荐学习顺序:
- 环境搭建 → 熟悉项目结构和技术栈
- 业务理解 → 理解12306购票的业务流程
- 代码阅读 → 从简单模块开始,逐步深入
- 功能扩展 → 尝试添加新功能或优化现有功能
- 性能调优 → 学习高并发和性能优化技巧
A4: 多种获取帮助的方式:
- 项目文档:https://nageoffer.com/12306
- GitHub Issues:提交问题和建议
- 技术交流群:添加微信备注"12306"加入交流群
- 公众号:关注"马丁玩编程"获取最新资料
- 遵循阿里巴巴Java开发手册
- 使用Checkstyle进行代码检查
- 统一使用Spotless进行代码格式化
feat: 新功能
fix: 修复bug
docs: 文档更新
style: 代码格式调整
refactor: 代码重构
test: 测试相关
chore: 构建过程或辅助工具的变动
main:主分支,稳定版本develop:开发分支,最新功能feature/*:功能分支hotfix/*:热修复分支
- Fork 项目到自己的GitHub
- 创建功能分支
git checkout -b feature/AmazingFeature - 提交更改
git commit -m 'Add some AmazingFeature' - 推送分支
git push origin feature/AmazingFeature - 创建 Pull Request
感谢所有为项目做出贡献的开发者!
本项目基于 Apache License 2.0 许可证开源。
- 项目官网:https://nageoffer.com/12306
- 在线体验:http://12306.magestack.cn
- 技术文档:https://nageoffer.com/12306/framework
- API文档:https://nageoffer.com/12306/interface/
- Hippo4j项目:https://github.com/opengoofy/hippo4j
- 公众号:马丁玩编程
- 微信群:添加微信备注"12306"
- 邮箱:machen@apache.org
⭐ 如果这个项目对你有帮助,请给个Star支持一下!⭐
🎯 让我们一起构建更好的12306系统!🎯



