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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user