# 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