From 2fbffcceb4c8f36f1c87ea445214284e2f0811c9 Mon Sep 17 00:00:00 2001 From: hjhan Date: Tue, 11 Aug 2026 14:26:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor(margin):=203=E5=A4=84=E6=95=A3?= =?UTF-8?q?=E8=90=BD=E4=BF=9D=E8=AF=81=E9=87=91=E8=B5=84=E9=87=91=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=94=B6=E6=95=9B=E5=88=B0=20RecordMarginCashFlow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RecordMarginCashFlow 加委托重载, 统一 AddClientCash(virtual)和 AddClientCashInCashOut(非virtual)两条路径。 替换3处 inline: - :1663 SwapUnwind 平仓(AddClientCash, 只有应付预付金) - :1979 DealUnwind(AddClientCashInCashOut, 只有应付预付金) - :2128 SwapIncome 互换(AddClientCash, 只有预付金返息) - :2195 自动互换(AddClientCash, 只有应付预付金, swapEvent.unwindData) 注释掉的返息代码(//if SwapMarginRebatePnl)同步清理—— 通过传 marginRebate:0 表达'不写返息', 不再留注释代码。 SwapDealService 保证金资金记录 inline: 4处 → 0。 全部走 RecordMarginCashFlow 的 2 个重载。 验证: 编译0错误, 全量509测试7失败(基线一致)。 --- .../Modules/SwapModule/SwapDealService.cs | 51 ++++++++----------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/YLErpDAL/Modules/SwapModule/SwapDealService.cs b/YLErpDAL/Modules/SwapModule/SwapDealService.cs index c4bdd523..70733b47 100644 --- a/YLErpDAL/Modules/SwapModule/SwapDealService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapDealService.cs @@ -1172,15 +1172,23 @@ namespace YLErp.Modules.SwapModule /// 待迁入 Margin 模块。 /// private void RecordMarginCashFlow(trade td, UnwindData unwindData) + => RecordMarginCashFlow(td, unwindData.ValueDate, + unwindData.SwapMarginAmount, unwindData.SwapMarginRebatePnl, + AddClientCashInCashOut); + + /// + /// 写入保证金资金记录的通用重载,接受资金写入委托。 + /// AddClientCash(virtual,测试可stub) 和 AddClientCashInCashOut(非virtual,直接写库) + /// 都可通过此重载统一。 + /// + private void RecordMarginCashFlow(trade td, DateTime valueDate, + decimal marginAmount, decimal marginRebate, + Func writeCash) { - if (unwindData.SwapMarginAmount != 0) - { - AddClientCashInCashOut(td, Convert.ToDouble(unwindData.SwapMarginAmount), ClientCashInCashOut.系统操作_应付预付金, unwindData.ValueDate); - } - if (unwindData.SwapMarginRebatePnl != 0) - { - AddClientCashInCashOut(td, Convert.ToDouble(-unwindData.SwapMarginRebatePnl), ClientCashInCashOut.系统操作_预付金返息, unwindData.ValueDate); - } + if (marginAmount != 0) + writeCash(td, Convert.ToDouble(marginAmount), ClientCashInCashOut.系统操作_应付预付金, valueDate); + if (marginRebate != 0) + writeCash(td, Convert.ToDouble(-marginRebate), ClientCashInCashOut.系统操作_预付金返息, valueDate); } /// @@ -1652,14 +1660,7 @@ namespace YLErp.Modules.SwapModule ExecuteInTransaction(() => { int clientCashId = AddClientCash(td, Convert.ToDouble(-unwindData.SwapRealizedPnL), ClientCashInCashOut.系统操作_平仓费, unwindData.ValueDate); - if (unwindData.SwapMarginAmount != 0) - { - AddClientCash(td, Convert.ToDouble(unwindData.SwapMarginAmount), ClientCashInCashOut.系统操作_应付预付金, unwindData.ValueDate); - } - //if (unwindData.SwapMarginRebatePnl != 0) - //{ - // AddClientCash(td, Convert.ToDouble(-unwindData.SwapMarginRebatePnl), ClientCashInCashOut.系统操作_预付金返息, unwindData.ValueDate); - //} + RecordMarginCashFlow(td, unwindData.ValueDate, unwindData.SwapMarginAmount, 0m, AddClientCash); DealFloatPosition(unwindData); var flowList = new List(unwindData.FlowEvents); var eventId = SaveSwapDeal(unwindData, (int)SwapEventTypeEnum.平仓, clientCashId, "系统操作_平仓"); @@ -1975,14 +1976,7 @@ namespace YLErp.Modules.SwapModule private void DealUnwind(UnwindData unwindData, trade td, string actionMsg = "系统操作_自动平仓") { int clientCashId = AddClientCashInCashOut(td, Convert.ToDouble(-unwindData.SwapRealizedPnL), ClientCashInCashOut.系统操作_平仓费, unwindData.ValueDate); - if (unwindData.SwapMarginAmount != 0) - { - AddClientCashInCashOut(td, Convert.ToDouble(unwindData.SwapMarginAmount), ClientCashInCashOut.系统操作_应付预付金, unwindData.ValueDate); - } - //if (unwindData.SwapMarginRebatePnl != 0) - //{ - // AddClientCashInCashOut(td, Convert.ToDouble(-unwindData.SwapMarginRebatePnl), ClientCashInCashOut.系统操作_预付金返息, unwindData.ValueDate); - //} + RecordMarginCashFlow(td, unwindData.ValueDate, unwindData.SwapMarginAmount, 0m, AddClientCashInCashOut); var flowList = new List(unwindData.FlowEvents); var eventId = SaveSwapDeal(unwindData, (int)SwapEventTypeEnum.平仓, clientCashId, actionMsg); if (unwindData.CloseMethod == (int)CloseMethodEnum.全部平仓) @@ -2131,10 +2125,7 @@ namespace YLErp.Modules.SwapModule ExecuteInTransaction(() => { int clientCashId = AddClientCash(td, Convert.ToDouble(-unwindData.SwapRealizedPnL), ClientCashInCashOut.系统操作_互换, unwindData.ValueDate); - if (unwindData.SwapMarginRebatePnl != 0) - { - AddClientCash(td, Convert.ToDouble(-unwindData.SwapMarginRebatePnl), ClientCashInCashOut.系统操作_预付金返息, unwindData.ValueDate); - } + RecordMarginCashFlow(td, unwindData.ValueDate, 0m, unwindData.SwapMarginRebatePnl, AddClientCash); foreach (var item in unwindData.FlowEvents) { item.OptLog = "手工操作"; @@ -2201,9 +2192,9 @@ namespace YLErp.Modules.SwapModule } string action = eventType == (int)SwapEventTypeEnum.互换 ? ClientCashInCashOut.系统操作_互换 : ClientCashInCashOut.系统操作_平仓费; int clientCashId = AddClientCash(td, Convert.ToDouble(-swapEvent.unwindData.SwapRealizedPnL), action, swapEvent.unwindData.ValueDate); - if (eventType == (int)SwapEventTypeEnum.平仓 && swapEvent.unwindData.SwapMarginAmount != 0) + if (eventType == (int)SwapEventTypeEnum.平仓) { - AddClientCash(td, Convert.ToDouble(swapEvent.unwindData.SwapMarginAmount), ClientCashInCashOut.系统操作_应付预付金, swapEvent.unwindData.ValueDate); + RecordMarginCashFlow(td, swapEvent.unwindData.ValueDate, swapEvent.unwindData.SwapMarginAmount, 0m, AddClientCash); } swapEvent.ClientCashId = clientCashId; td.UnWindDate = swapEvent.unwindData.UnwindDate;