From 17005aa5396f297101b43b5de57c83708b52c047 Mon Sep 17 00:00:00 2001 From: hjhan Date: Thu, 2 Jul 2026 09:08:05 +0800 Subject: [PATCH] =?UTF-8?q?refactor(swap):=20ClearSwapPositions=E6=8E=A5?= =?UTF-8?q?=E7=BC=9D-GetLegacyAutoSwapClientCashRecords=E5=8F=AF=E6=B5=8B?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SwapTradeBaseService加3个protected virtual虚方法: - FindFlowEventsByEventIds: 查flow_event(原DbContext.swap_flow_event) - FindManualClientCashIds: 查手动互换ClientCashId(原DbContext.swap_event) - FindClientCashInCashOut: 查资金记录(原DbContext.ClientCashInCashOut) GetLegacyAutoSwapClientCashRecords改为protected virtual, 内部3处DB查询替换为调虚方法。 这是78751f0a(重收盘误删资金修复)的核心逻辑: GetLegacyAutoSwapClientCashRecords负责排除manualClientCashIds, 确保手动互换资金记录不被误删。 验证: 111个测试全通过。 --- .../SwapModule/SwapTradeBaseService.cs | 47 ++++++++++++++----- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/YLErpDAL/Modules/SwapModule/SwapTradeBaseService.cs b/YLErpDAL/Modules/SwapModule/SwapTradeBaseService.cs index 80a4a0a4..e859fcad 100644 --- a/YLErpDAL/Modules/SwapModule/SwapTradeBaseService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapTradeBaseService.cs @@ -282,6 +282,34 @@ namespace YLErp.Modules.SwapModule } return swapEvent.ValueDate; } + + #region 可测试化接缝(ClearSwapPositions 相关) + + /// 查找该交易的 flow_event(生产: DbContext.swap_flow_event;测试: 内存列表) + protected virtual List FindFlowEventsByEventIds(List eventIds) + { + return DbContext.swap_flow_event.Where(x => x.EventId.HasValue && eventIds.Contains(x.EventId.Value)).ToList(); + } + + /// 查找手动互换的 ClientCashId(生产: DbContext.swap_event;测试: 内存列表) + protected virtual List FindManualClientCashIds(int swapTradeId) + { + return DbContext.swap_event + .Where(x => x.SwapTradeId == swapTradeId + && x.ClientCashId > 0 + && x.EventType != (int)SwapEventTypeEnum.自动互换) + .Select(x => x.ClientCashId) + .ToList(); + } + + /// 查找该交易的资金记录(生产: DbContext.ClientCashInCashOut;测试: 内存列表) + protected virtual List FindClientCashRecords(int tradeId) + { + return DbContext.ClientCashInCashOut.Where(x => x.TradeId == tradeId).ToList(); + } + + #endregion + public int AddClientCashInCashOut(OtcTradeBase td, double amount, string action, DateTime valueDate) { var cl = DataCacheProvider.GetClientDataSource().GetData(td.ClientId); @@ -444,7 +472,7 @@ namespace YLErp.Modules.SwapModule } } - private List GetLegacyAutoSwapClientCashRecords(List swapEvents, List excludedClientCashIds) + protected virtual List GetLegacyAutoSwapClientCashRecords(List swapEvents, List excludedClientCashIds) { if (swapEvents == null || !swapEvents.Any()) { @@ -452,15 +480,8 @@ namespace YLErp.Modules.SwapModule } var eventIds = swapEvents.Select(x => x.id).ToList(); - var flowEvents = DbContext.swap_flow_event - .Where(x => x.EventId.HasValue && eventIds.Contains(x.EventId.Value)) - .ToList(); - var manualClientCashIds = DbContext.swap_event - .Where(x => x.SwapTradeId == swapEvents.First().SwapTradeId - && x.ClientCashId > 0 - && x.EventType != (int)SwapEventTypeEnum.自动互换) - .Select(x => x.ClientCashId) - .ToList(); + var flowEvents = FindFlowEventsByEventIds(eventIds); + var manualClientCashIds = FindManualClientCashIds(swapEvents.First().SwapTradeId); var records = new List(); foreach (var swapEvent in swapEvents) @@ -485,9 +506,9 @@ namespace YLErp.Modules.SwapModule } eventFlowEvents.Where(x => x.PayDate.HasValue).ToList().ForEach(x => candidateDates.Add(x.PayDate.Value.Date)); - var eventRecords = DbContext.ClientCashInCashOut - .Where(x => x.TradeId == swapEvent.SwapTradeId - && !excludedClientCashIds.Contains(x.id) + var allCashRecords = FindClientCashRecords(swapEvent.SwapTradeId); + var eventRecords = allCashRecords + .Where(x => !excludedClientCashIds.Contains(x.id) && !manualClientCashIds.Contains(x.id) && (x.Action == ClientCashInCashOut.系统操作_预付金返息 || x.Action == ClientCashInCashOut.系统操作_互换)) .ToList()