refactor(margin): ConsTrade.InterestMarginModels 4处引用收敛到 MarginModes

上次失败根因: EodClientBalanceCalc:134 是 EF Core LINQ 表达式,
HashSet.Contains 无法翻译成 SQL, 导致场景3/4 全红。

修正: MarginModes 新增 ForLinq(List<int>) 供 EF Core 翻译用。
- SwapEodPositionService 2处纯函数(非LINQ): 用 MarginModes.Contains
- EodClientBalanceCalc LINQ表达式: 用 MarginModes.ForLinq.Contains
- RealTimeClientBanlanceService(已ToList,内存集合): 用 MarginModes.Contains

ConsTrade.InterestMarginModels 产品代码引用: 4处 → 0(只剩定义+注释)。
保证金mode判断 {初始预付金,追加预付金} 现在统一由 MarginModes 提供。

验证: sln编译0错误, 全量485测试7失败(基线一致,零回归)。
This commit is contained in:
hjhan
2026-08-11 09:57:20 +08:00
parent ef1a126b8f
commit 22f22bc9c5
5 changed files with 84 additions and 10 deletions
@@ -2314,7 +2314,7 @@ namespace YLErp.Modules.SwapModule
public static decimal CalculateSwapRealizedPnl(eod_swap_position position)
{
var interestRatio = position.InterestDirection == (int)SwapDirectionEnum. ? 1m : -1m;
if (ConsTrade.InterestMarginModels.Contains(position.InterestMode))
if (MarginModes.Contains(position.InterestMode))
{
interestRatio = -interestRatio;
}
@@ -2338,7 +2338,7 @@ namespace YLErp.Modules.SwapModule
if (position.InterestDirection <= 0) return;
var interestRatio = position.InterestDirection == (int)SwapDirectionEnum. ? 1m : -1m;
if (ConsTrade.InterestMarginModels.Contains(position.InterestMode))
if (MarginModes.Contains(position.InterestMode))
{
interestRatio = -interestRatio;
}