Files
zszq-trs/项目文档/互换模块迁移清单.md
T
hjhan 7f0f15ceaa docs(architecture): 添加互换模块独立化实施方案文档
- 设计了基于YARP反向代理的微服务架构方案
- 规划了独立互换API服务的技术实现细节
- 定义了完整的数据传输对象(DTO)结构
- 制定了前端无感知适配的路由映射规则
- 创建了详细的迁移清单和实施路线图
- 配置了监控告警和风险控制机制
2026-02-13 10:02:54 +08:00

8.5 KiB

互换模块独立化迁移清单

一、需要清理的冗余文件(已删除)

  • nginx-swap-service.conf
  • ocelot-swap-config.json
  • swap-service-proxy.js

二、需要迁移的核心组件

2.1 控制器迁移清单

Web层控制器(需要API化)

需要迁移的控制器文件:
├── YLErpWeb/Controllers/SwapTradeController.cs (1199行)
├── YLErpWeb/Controllers/SwapTrade2Controller.cs (1090行)
└── YLErpWeb/Controllers/MarginRateSwapController.cs (250行左右)

需要保留的控制器:
├── YLErpWeb/Controllers/SwapRateController.cs (簿记预设相关,暂不迁移)
├── YLErpWeb/Controllers/SwapFloatRateController.cs (浮动利率相关,暂不迁移)
└── YLErpWeb/Controllers/EtradeAccountController.cs (衡泰关系相关,暂不迁移)

API控制器需要提取的核心方法

SwapTradeController.cs 需要迁移的方法:

// 核心业务方法
- TradeQuery(TradeReq req)              // 交易查询
- SearchGroupChildrenList(int id)       // 子交易查询
- TradeFlowQuery(TradeFlowReq req)      // 流水查询
- TradeFlowHistoryQuery(TradeFlowReq req) // 流水历史查询
- TradeEditJson(trade req)             // 交易保存
- TradeDelete(string enid)             // 交易删除
- TradeUnwind(int tradeId)             // 交易平仓
- TradeConfirm(int tradeId)            // 交易确认

SwapTrade2Controller.cs 需要迁移的方法:

// 核心业务方法
- TradeList()                          // 交易列表
- TradeEdit(string enid)               // 交易编辑
- TradeView(string enid)               // 交易查看
- SwapUnwind(string enid)              // 收益互换平仓
- SwapIncome(string enid)              // 收益互换结算
- SwapLongShortUnwind(string enid)     // 多空组合平仓
- SaveTrade(trade req)                 // 保存交易
- DeleteTrade(string enid)             // 删除交易
- CheckEodTrade(string enid)           // 校验收盘交易

2.2 业务服务层迁移清单

需要迁移的服务类

YLErpDAL/Modules/SwapModule/ 目录下需要迁移的核心服务:

必须迁移:
├── SwapTradeService.cs (80KB)         // 核心交易服务
├── SwapTradeBaseService.cs (20KB)     // 基础服务
├── SwapDealService.cs (78KB)          // 交易处理服务
├── SwapEodPositionService.cs (122KB)  // 持仓服务
├── SwapFlowService.cs (36KB)          // 流水服务
├── SwapFlowEventService.cs (34KB)     // 流水事件服务
├── SwapEventService.cs (9KB)          // 事件服务
└── SwapTradeAutoService.cs (72KB)     // 自动交易服务

可选迁移(根据业务需要):
├── SwapRateService.cs (20KB)          // 费率服务
├── SwapFloatRateService.cs (18KB)     // 浮动利率服务
├── SwapFlowImportService.cs (15KB)    // 流水导入服务
├── SwapConsumerService.cs (8KB)       // 消费者服务
└── SwapMonitorService.cs (18KB)       // 监控服务

TradeModule目录下需要迁移的服务

YLErpDAL/Modules/TradeModule/SwapModule/ 目录:

必须迁移:
├── TradeSwapService.cs                // 交易互换服务
├── SwapTradeImportService.cs          // 交易导入服务
├── SwapTradeFlowImportService.cs      // 流水导入服务
├── SwapTradeFlowMoreImportService.cs  // 更多流水导入
└── SwapMultiCloseService.cs           // 多空平仓服务

2.3 数据模型和DTO迁移清单

需要迁移的数据模型

数据模型迁移重点:

核心实体:
├── trade (交易主表)
├── trade_swap (互换交易扩展表)
├── swap_position (互换持仓表)
├── swap_flow (互换流水表)
├── swap_flow_event (互换流水事件表)
├── trade_swap_detail (互换明细表)
└── trade_cash_swap (互换现金流表)

查询模型:
├── TradeReq (交易查询请求)
├── TradeFlowReq (流水查询请求)
├── SwapPositionRequest (持仓查询请求)
└── SwapRiskRequest (风险查询请求)

DTO模型:
├── SwapTradeDto (互换交易DTO)
├── SwapPositionDto (持仓DTO)
├── SwapFlowDto (流水DTO)
└── TradeResultDto (交易结果DTO)

2.4 具体迁移步骤

第一阶段:核心API服务搭建

  1. 创建YLSwapService项目结构

    YLSwapService/
    ├── Controllers/
       ├── SwapTradeController.cs     (迁移核心交易API)
       ├── SwapPositionController.cs  (迁移持仓API)
       └── SwapFlowController.cs      (迁移流水API)
    ├── Services/
       ├── ISwapTradeService.cs       (接口定义)
       ├── SwapTradeService.cs        (实现类)
       └── DTOs/                      (数据传输对象)
    └── Program.cs                     (启动配置)
    
  2. 迁移核心业务逻辑

    // 从SwapTradeService提取核心方法
    public interface ISwapTradeService
    {
        Task<List<SwapTradeDto>> SearchTradesAsync(TradeSearchRequest request);
        Task<SwapTradeDetailDto> GetTradeAsync(int tradeId);
        Task<TradeResultDto> CreateTradeAsync(CreateSwapTradeRequest request);
        Task<TradeResultDto> UpdateTradeAsync(int tradeId, UpdateSwapTradeRequest request);
        Task<bool> DeleteTradeAsync(int tradeId);
        Task<List<SwapFlowDto>> GetTradeFlowsAsync(int tradeId);
    }
    

第二阶段:数据访问层适配

  1. 复用现有DbContext

    // 继续使用主应用的数据库上下文
    public class SwapTradeService
    {
        private readonly YLContext _context;  // 共享数据库连接
    
        public async Task<List<SwapTradeDto>> SearchTradesAsync(TradeSearchRequest request)
        {
            // 使用相同的LINQ查询逻辑
            var query = _context.trade.Where(t => t.TradeType == "收益互换");
            // ... 原有的查询逻辑保持不变
        }
    }
    
  2. 保持数据模型一致性

    • 继续使用现有的EF实体类
    • 保持原有的表结构和关系
    • 复用现有的数据验证逻辑

第三阶段:API接口标准化

  1. RESTful API设计

    // 标准化的API路由
    [ApiController]
    [Route("api/[controller]")]
    public class SwapTradeController : ControllerBase
    {
        [HttpGet]                    // GET /api/swaptrade
        public async Task<ActionResult<List<SwapTradeDto>>> GetTrades([FromQuery] TradeSearchRequest request)
    
        [HttpGet("{id}")]           // GET /api/swaptrade/123
        public async Task<ActionResult<SwapTradeDetailDto>> GetTrade(int id)
    
        [HttpPost]                  // POST /api/swaptrade
        public async Task<ActionResult<TradeResultDto>> CreateTrade([FromBody] CreateSwapTradeRequest request)
    
        [HttpPut("{id}")]           // PUT /api/swaptrade/123
        public async Task<ActionResult<TradeResultDto>> UpdateTrade(int id, [FromBody] UpdateSwapTradeRequest request)
    }
    
  2. 请求/响应DTO设计

    // 请求DTO
    public class CreateSwapTradeRequest
    {
        public int ClientId { get; set; }
        public string UnderlyingCode { get; set; }
        public decimal Notional { get; set; }
        public DateTime TradeDate { get; set; }
        // ... 其他必要字段
    }
    
    // 响应DTO
    public class TradeResultDto
    {
        public int TradeId { get; set; }
        public string TradeNumber { get; set; }
        public string Status { get; set; }
        public string Message { get; set; }
    }
    

2.5 前端适配要求

保持现有调用方式不变

// 前端JavaScript调用保持原有方式
function createSwapTrade(data) {
    // 原有调用方式不变
    return $.post('/swaptrade/CreateTrade', data);
    // 通过YARP自动转发到 /api/swaptrade
}

function querySwapTrades(params) {
    // 原有调用方式不变
    return $.get('/swaptrade2/TradeQuery', params);
    // 通过YARP自动转发到 /api/swaptrade/search
}

2.6 迁移优先级建议

第一优先级(核心业务):

  1. SwapTradeService核心交易功能
  2. 交易查询和编辑功能
  3. 基本的持仓查询功能

第二优先级(辅助功能):

  1. 流水查询和处理
  2. 交易平仓和结算功能
  3. 风险计算相关功能

第三优先级(可延后):

  1. 报表生成功能
  2. 批量导入导出功能
  3. 高级监控功能

这样的迁移策略确保了核心业务功能的快速上线,同时为后续功能完善留出了时间和空间。