main
DC TranLog Server
交易日志服务器 - 处理交易数据、MTC(分钟交易数据)、价格成交量等业务逻辑
项目概述
TranLogServer 是一个实时交易日志服务器,主要用于:
- 接收和处理实时交易数据(股票、期货等金融产品)
- 计算和生成分钟级交易数据(MTC - Minute Transaction Count)
- 提供价格-成交量分析、买卖强度计算等增值服务
- 支持数据重建、备份、同步等功能
本项目是从C++版本转换而来的Java 17 + Spring Cloud Alibaba版本。
技术栈
- Java 17
- Spring Boot
- Spring Cloud Alibaba
- Lombok
- MySQL (可选,用于数据持久化)
项目结构
dc-tranlog-server/
├── src/main/java/com/afe/dc/tranlog/
│ ├── TranLogServerApplication.java # 主应用类
│ ├── controller/ # 控制器层
│ │ ├── DataReceiverController.java # 数据接收控制器
│ │ ├── DataQueryController.java # 数据查询控制器
│ │ └── TradeDayController.java # 交易日管理控制器
│ ├── service/ # 服务层
│ │ ├── TranLogService.java # 主服务(对应CTranLogServer)
│ │ ├── TranDatabaseService.java # 数据库服务(对应CTranDatabase)
│ │ ├── TranTableService.java # 交易表服务(对应CTranTable)
│ │ ├── MTCLogicService.java # MTC逻辑服务(对应CMTCLogic)
│ │ ├── AccumulatedLogicService.java # 累计数据服务(对应CAccumulatedLogic)
│ │ └── BuySellStrengthService.java # 买卖强度服务(对应CBuySellStrengthLogic)
│ ├── entity/ # 实体类
│ │ ├── TranRecord.java # 交易记录
│ │ ├── TranTable.java # 交易表
│ │ ├── MtcRecord.java # MTC记录
│ │ └── BsRecord.java # 买卖强度记录
│ ├── dto/ # 数据传输对象
│ │ ├── COPItem.java # COP数据项
│ │ ├── TradeDayResponse.java # 交易日响应
│ │ ├── AccumulatedData.java # 累计数据
│ │ └── BuySellStrength.java # 买卖强度
│ ├── config/ # 配置类
│ │ ├── AsyncConfig.java # 异步配置
│ │ └── ScheduleConfig.java # 定时任务配置
│ └── task/ # 定时任务
│ └── ScheduledTask.java # 定时任务类
└── src/main/resources/
└── application.yml # 配置文件
核心功能
1. 数据接收和处理
- 接收实时交易数据(通过REST API或消息队列)
- 处理不同类型的消息(UPDATE、DROP、REBUILD等)
- 管理交易日历和交易时间
2. MTC(分钟交易数据)计算
- 将实时交易数据聚合成分钟级数据
- 包含:开盘价、最高价、最低价、收盘价、成交量
3. 业务逻辑计算
- 累计数据:累计成交量和成交额
- 买卖强度:根据交易价格和成交量计算买卖强度(高/中/低)
- 价格-成交量分析:价格-成交量分布
4. 定时任务
- MTC发送任务(每50ms)
- 定期重建任务(每30s)
- 价格-成交量发送任务(每50ms)
- 开盘维护任务(每天9:00)
- 收盘维护任务(每天16:00)
使用说明
启动应用
mvn spring-boot:run
配置说明
主要配置在 application.yml 中:
tranlog:
trade:
start-hour: 9
start-minute: 30
period: 240 # 交易时长(分钟)
mtc:
update-period: 50 # MTC更新周期(毫秒)
rebuild:
enabled: true
schedule: "0 0 2 * * ?" # 每天凌晨2点
API接口
1. 接收交易数据
POST /api/tranlog/process
Content-Type: application/json
{
"itemNo": 123456,
"msgType": 1,
"fields": {
"1001": {...} // FID_TRAN_LOG
}
}
2. 查询MTC记录
GET /api/data/mtc/{itemNo}?dateIndex=0&startIndex=0&endIndex=100
3. 查询累计数据
GET /api/data/accumulated/{itemNo}
4. 查询买卖强度
GET /api/data/buysell/{itemNo}?is15Tick=false
架构说明
C++ 到 Java 的映射关系
| C++ 类 | Java 对应 | 说明 |
|---|---|---|
CTranLogServer |
TranLogService + DataReceiverController |
主服务器类 |
CTranDatabase |
TranDatabaseService |
数据访问层 |
CTranTable |
TranTableService + TranTable |
交易表 |
CMTCLogic |
MTCLogicService |
MTC计算逻辑 |
CAccumulatedLogic |
AccumulatedLogicService |
累计数据逻辑 |
CBuySellStrengthLogic |
BuySellStrengthService |
买卖强度逻辑 |
数据流
外部数据源
↓
DataReceiverController (REST API)
↓
TranLogService::process()
↓
TranDatabaseService::updateTran()
↓
TranTableService::updateTran()
↓
业务逻辑更新 (MTCLogicService, AccumulatedLogicService等)
注意事项
- 线程安全:使用
ReentrantReadWriteLock保证线程安全 - 内存管理:数据主要存储在内存中(ConcurrentHashMap),类似Redis
- 性能优化:使用异步处理和定时任务提高性能
- 扩展性:支持水平扩展,可以部署多个实例
开发说明
代码转换说明
本项目按照 source/项目快速理解指南-面向Java程序员.md 中的转换逻辑进行转换:
- C++类 → Java类:使用Spring的
@Service、@RestController等注解 - 线程 → 异步:使用
@Async和ThreadPoolTaskExecutor - 定时器 → 定时任务:使用
@Scheduled - 多播通信 → REST API/消息队列:使用Spring MVC或RabbitMQ/Kafka
- 读写锁:使用
ReentrantReadWriteLock
待完善功能
- 消息队列集成:集成RabbitMQ或Kafka接收实时数据
- 数据持久化:完善MySQL持久化功能
- Redis缓存:集成Redis缓存热点数据
- 监控和日志:集成Spring Boot Actuator和日志系统
- 单元测试:添加单元测试和集成测试
许可证
Copyright (c) 2025
Languages
Java
100%