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
|