- 设计了基于YARP反向代理的微服务架构方案 - 规划了独立互换API服务的技术实现细节 - 定义了完整的数据传输对象(DTO)结构 - 制定了前端无感知适配的路由映射规则 - 创建了详细的迁移清单和实施路线图 - 配置了监控告警和风险控制机制
8.5 KiB
8.5 KiB
互换模块独立化迁移清单
一、需要清理的冗余文件(已删除)
nginx-swap-service.confocelot-swap-config.jsonswap-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服务搭建
-
创建YLSwapService项目结构
YLSwapService/ ├── Controllers/ │ ├── SwapTradeController.cs (迁移核心交易API) │ ├── SwapPositionController.cs (迁移持仓API) │ └── SwapFlowController.cs (迁移流水API) ├── Services/ │ ├── ISwapTradeService.cs (接口定义) │ ├── SwapTradeService.cs (实现类) │ └── DTOs/ (数据传输对象) └── Program.cs (启动配置) -
迁移核心业务逻辑
// 从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); }
第二阶段:数据访问层适配
-
复用现有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 == "收益互换"); // ... 原有的查询逻辑保持不变 } } -
保持数据模型一致性
- 继续使用现有的EF实体类
- 保持原有的表结构和关系
- 复用现有的数据验证逻辑
第三阶段:API接口标准化
-
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) } -
请求/响应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 迁移优先级建议
第一优先级(核心业务):
- SwapTradeService核心交易功能
- 交易查询和编辑功能
- 基本的持仓查询功能
第二优先级(辅助功能):
- 流水查询和处理
- 交易平仓和结算功能
- 风险计算相关功能
第三优先级(可延后):
- 报表生成功能
- 批量导入导出功能
- 高级监控功能
这样的迁移策略确保了核心业务功能的快速上线,同时为后续功能完善留出了时间和空间。