From 4adfbabec1eee91fc0097ab55b3e6b16ab2b7d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= Date: Wed, 26 Aug 2026 15:26:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E4=BA=8E=20.NET=20=E7=9A=84=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E9=A2=84=E4=BB=98=E9=87=91=E4=BA=92=E6=8D=A2=E9=A2=84?= =?UTF-8?q?=E4=BB=98=E9=87=91=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=8F=9C=E5=8D=95=E9=A1=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EodCheckMonitoredTrade.cs | 42 ++++++++++--------- YLErpWeb/App_Data/Menus.txt | 2 +- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/YLErpDAL/Modules/EodModule/SettlementModule/EodCheckMonitoredTrade.cs b/YLErpDAL/Modules/EodModule/SettlementModule/EodCheckMonitoredTrade.cs index 79a3b431..1e3a79a6 100644 --- a/YLErpDAL/Modules/EodModule/SettlementModule/EodCheckMonitoredTrade.cs +++ b/YLErpDAL/Modules/EodModule/SettlementModule/EodCheckMonitoredTrade.cs @@ -176,33 +176,37 @@ namespace YLErp.Modules.EodModule.SettlementModule } /// - /// 计算互换预付金 + /// 计算互换预付金(保证金模板V2 引擎,本端闭环)。 + /// 2026-08-26 收口:原实现 HTTP 调 bond-oms /marginAlgorithm/triggerMarginCalc——Java 按 marginrate + /// (旧预付金率维护数据)对在市互换算盯市并清写当天 trade_span/client_span;现改为直接跑本端预付金引擎 + /// EodWorstClientPayableCalc(模板V2 三级层解析:无预付金=0、区间追保结构 x/y 或方案B收盘落档, + /// 产出 trade_span.Spv 并聚合 client_span),保证金计算→追加预付金生成闭环全部在 .NET。 + /// 交易范围与原 Java selectPreCloseTradeList 同口径:在市收益互换(确认成交未到期 + 平仓日落在区间), + /// 剔除多空组合子交易(引擎本身跳过);"日终持仓结算"步骤随后会对确认成交全集幂等重算覆盖。 + /// Java 侧自此仅保留资金通知书邮件与 DMA 实时预付金(RealtimePnlCalc.CalcDMAMargin,迁移方案阶段三待切项)。 + /// preSettleDate 参数保留以维持调用签名,引擎取数按 settleDate 自行解析。 /// /// public bool CalculateMargin(DateTime settleDate, DateTime preSettleDate, IEnumerable ClientIds) { - // 构建请求对象 - CalculateMarginRequest request = new CalculateMarginRequest() + var clientIds = ClientIds?.Where(x => x > 0).Distinct().ToList(); + List tradeList; + using (var db = new YLErp.BLL.YLContext()) { - currentDate = settleDate.ToString("yyyy-MM-dd"), - clientIds = ClientIds, - preSettleDate = preSettleDate.ToString("yyyy-MM-dd") - }; - var baseUrl = Environment.GetEnvironmentVariable("BondOmsInterface_BaseUrl"); - var calculateMarginUrl = "/marginAlgorithm/triggerMarginCalc"; - - if (!string.IsNullOrEmpty(baseUrl)) - { - var httpHelper = new HttpHelper(baseUrl, null); - // http 请求 Web项目接口 - var result = httpHelper.PostRequestNoAuth(calculateMarginUrl, request).Result; - - if (result != null && !result.success) + var query = db.trade.Where(t => t.TradeType == "收益互换" + && t.ValidState != YLErp.ConsGlobal.InValid + && t.ParentTradeId == 0 + && ((t.TradeStatus == YLErp.DBModels.ConsTrade.确认成交 && t.TradeDate <= settleDate && t.ExerciseDate >= settleDate) + || (t.TradeStatus == YLErp.DBModels.ConsTrade.已平仓 && t.TradeDate <= settleDate + && t.UnWindDate > settleDate && t.UnWindDate > t.StartDate))); + if (clientIds != null && clientIds.Count > 0) { - throw new ServiceException($"互换预付金计算失败:{result.message}"); + var idScope = clientIds; + query = query.Where(t => idScope.Contains(t.ClientId)); } + tradeList = query.ToList(); } - + new EodWorstClientPayableCalc(_context).WorstClientPayableCalc(tradeList); return true; } } diff --git a/YLErpWeb/App_Data/Menus.txt b/YLErpWeb/App_Data/Menus.txt index e572691f..966c67f1 100644 --- a/YLErpWeb/App_Data/Menus.txt +++ b/YLErpWeb/App_Data/Menus.txt @@ -94,7 +94,7 @@ {Name:"交易市场",Rights:["基础参数管理-交易市场"],Url:"market/marketList"}, {Name:"变更记录",Rights:["基础参数管理-变更记录"],Url:"Datatrace/ClientInfoChange"}, {Name:"设置货币",Rights:["基础参数管理-设置货币"],Url:"Currency/setCurrency"}, - {Name:"预付金模板V2",Rights:["基础参数管理-预付金模板V2"],Url:"margin_template_v2/margin_template_v2List"}, + {Name:"预付金模板",Rights:["基础参数管理-预付金模板V2"],Url:"margin_template_v2/margin_template_v2List"}, ] }, {Name:"系统管理",Rights:["系统管理"],Icon:"menu-icon iconten"