Files
2026-01-26 18:08:01 +08:00

6.3 KiB
Raw Permalink Blame History

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等)

注意事项

  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