更新合约维度追保金额计算逻辑
This commit is contained in:
@@ -154,5 +154,34 @@ namespace YLErp.Modules.SwapModule.Margin
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 合约维度追保金额输入(2026-08-28 新口径):当日产生的追加保证金资金记录中"资金来源=现金"的金额合计(按客户)。
|
||||
/// 仅统计 Action=系统操作_追加保证金 且 HappenDate=当日 的现金流水(−Σ(Money),收取为正)——
|
||||
/// 授信部分只写 client_credit_inout 不产生资金记录(授信不追、现金才追);
|
||||
/// 腿化改造后现金流水逐日增量(每日新腿一条、HappenDate=结算日,同日重跑先清后建,幂等);
|
||||
/// 该 Action 仅 EOD 追保会写(手工链路写应付预付金,语义天然隔离);追保回落不返还(无负记录),结果天然 ≥ 0。
|
||||
/// 注意:EOD 未跑(日间实时)时当日无记录,结果为 0——与通知书口径一致。
|
||||
/// </summary>
|
||||
public static Dictionary<int, double> GetTodayCashAdditionalMarginByClients(List<int> clientIds, DateTime valueDate, YLContext db)
|
||||
{
|
||||
if (clientIds == null || clientIds.Count == 0)
|
||||
{
|
||||
return new Dictionary<int, double>();
|
||||
}
|
||||
|
||||
var dayStart = valueDate.Date;
|
||||
var dayEnd = dayStart.AddDays(1);
|
||||
return db.ClientCashInCashOut.AsNoTracking()
|
||||
.Where(x => clientIds.Contains(x.ClientId ?? 0)
|
||||
&& x.Action == ClientCashInCashOut.系统操作_追加保证金
|
||||
&& x.HappenDate >= dayStart && x.HappenDate < dayEnd
|
||||
&& x.ValidState != ConsGlobal.InValid
|
||||
&& (x.State == ClientCashInCashOut.已确认 || x.State == ClientCashInCashOut.已结算)
|
||||
&& x.Money != null)
|
||||
.GroupBy(x => x.ClientId ?? 0)
|
||||
.Select(g => new { ClientId = g.Key, Sum = -g.Sum(x => x.Money ?? 0d) })
|
||||
.ToDictionary(x => x.ClientId, x => x.Sum);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user