Files
dc-tranlog-service/README.md
T

197 lines
6.3 KiB
Markdown
Raw Normal View History

2026-01-26 18:08:01 +08:00
# 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