197 lines
6.3 KiB
Markdown
197 lines
6.3 KiB
Markdown
# 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)
|
||
|
||
## 使用说明
|
||
|
||
### 启动应用
|
||
|
||
```bash
|
||
mvn spring-boot:run
|
||
```
|
||
|
||
### 配置说明
|
||
|
||
主要配置在 `application.yml` 中:
|
||
|
||
```yaml
|
||
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等)
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **线程安全**:使用 `ReentrantReadWriteLock` 保证线程安全
|
||
2. **内存管理**:数据主要存储在内存中(ConcurrentHashMap),类似Redis
|
||
3. **性能优化**:使用异步处理和定时任务提高性能
|
||
4. **扩展性**:支持水平扩展,可以部署多个实例
|
||
|
||
## 开发说明
|
||
|
||
### 代码转换说明
|
||
|
||
本项目按照 `source/项目快速理解指南-面向Java程序员.md` 中的转换逻辑进行转换:
|
||
|
||
1. **C++类 → Java类**:使用Spring的`@Service`、`@RestController`等注解
|
||
2. **线程 → 异步**:使用`@Async`和`ThreadPoolTaskExecutor`
|
||
3. **定时器 → 定时任务**:使用`@Scheduled`
|
||
4. **多播通信 → REST API/消息队列**:使用Spring MVC或RabbitMQ/Kafka
|
||
5. **读写锁**:使用`ReentrantReadWriteLock`
|
||
|
||
### 待完善功能
|
||
|
||
1. **消息队列集成**:集成RabbitMQ或Kafka接收实时数据
|
||
2. **数据持久化**:完善MySQL持久化功能
|
||
3. **Redis缓存**:集成Redis缓存热点数据
|
||
4. **监控和日志**:集成Spring Boot Actuator和日志系统
|
||
5. **单元测试**:添加单元测试和集成测试
|
||
|
||
## 许可证
|
||
|
||
Copyright (c) 2025
|