refactor(swap): ClearSwapPositions接缝-GetLegacyAutoSwapClientCashRecords可测化

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个测试全通过。
This commit is contained in:
hjhan
2026-07-02 09:08:05 +08:00
parent eaa4ed735a
commit 17005aa539
@@ -282,6 +282,34 @@ namespace YLErp.Modules.SwapModule
}
return swapEvent.ValueDate;
}
#region ClearSwapPositions
/// <summary>查找该交易的 flow_event(生产: DbContext.swap_flow_event;测试: 内存列表)</summary>
protected virtual List<swap_flow_event> FindFlowEventsByEventIds(List<long> eventIds)
{
return DbContext.swap_flow_event.Where(x => x.EventId.HasValue && eventIds.Contains(x.EventId.Value)).ToList();
}
/// <summary>查找手动互换的 ClientCashId(生产: DbContext.swap_event;测试: 内存列表)</summary>
protected virtual List<int> FindManualClientCashIds(int swapTradeId)
{
return DbContext.swap_event
.Where(x => x.SwapTradeId == swapTradeId
&& x.ClientCashId > 0
&& x.EventType != (int)SwapEventTypeEnum.)
.Select(x => x.ClientCashId)
.ToList();
}
/// <summary>查找该交易的资金记录(生产: DbContext.ClientCashInCashOut;测试: 内存列表)</summary>
protected virtual List<ClientCashInCashOut> 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<ClientCashInCashOut> GetLegacyAutoSwapClientCashRecords(List<swap_event> swapEvents, List<int> excludedClientCashIds)
protected virtual List<ClientCashInCashOut> GetLegacyAutoSwapClientCashRecords(List<swap_event> swapEvents, List<int> 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<ClientCashInCashOut>();
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()