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
@@ -15,6 +15,7 @@ using YLErp.Model.Enum;
using YLErp.Models;
using YLErp.Modules.CalculationModule;
using YLErp.Modules.EodModule.QueryModule;
using YLErp.Modules.SwapModule.Margin;
using YLErp.Modules.TradeRiskCalcModule;
namespace YLErp.Modules.EodModule.SettlementModule
@@ -131,7 +132,7 @@ namespace YLErp.Modules.EodModule.SettlementModule
var positionList = DbContext.trade.Where(t => (ConsTrade.TradeStatusAfterConfirmed.Contains(t.TradeStatus)||t.UnWindDate> balanceDate) && t.ValidState != "InValid"&&t.TradeType=="收益互换");
var marignQuery = from t in positionList
join s in DbContext.eod_swap_position on t.id equals s.SwapTradeId
where ConsTrade.InterestMarginModels.Contains(s.InterestMode) && !s.Invalid && s.HappenDate <= balanceDate &&s.ValueDate==balanceDate
where MarginModes.ForLinq.Contains(s.InterestMode) && !s.Invalid && s.HappenDate <= balanceDate &&s.ValueDate==balanceDate
select new
{
ClientId = t.ClientId,