From a78152090abf99bfe4755ea156a5efdca33b43a4 Mon Sep 17 00:00:00 2001 From: gongpei Date: Wed, 15 Oct 2025 11:13:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AF=BC=E5=87=BA=E4=BC=B0=E5=80=BC?= =?UTF-8?q?=E6=8A=A5=E5=91=8A=E6=90=BA=E5=B8=A6=E6=88=90=E4=BA=A4=E6=94=B6?= =?UTF-8?q?=E7=9B=8A=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwapModule/SwapFlowEventService.cs | 7 ++++++- .../SwapModule/SwapTradeAutoService.cs | 3 ++- YLErpWeb/App_Docs/导出模板/结算报告模板.xlsx | Bin 18358 -> 19342 bytes YLErpWeb/Views/SwapTrade2/SwapflowList.cshtml | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs b/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs index 3d9b23bd..ceba0abc 100644 --- a/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs @@ -3,6 +3,7 @@ using ClosedXML.Report.Utils; using Confluent.Kafka; using Microsoft.Office.Interop.Excel; using MoreLinq; +using NPOI.OpenXmlFormats.Spreadsheet; using System.Collections.Generic; using YLErp.BLL.Calculation; using YLErp.DBModels; @@ -11,6 +12,7 @@ using YLErp.Model; using YLErp.Modules.AppModule; using YLErp.Modules.EodModule.QueryModule; using YLErp.QdpModule; +using static YLErp.ConsGlobal; namespace YLErp.Modules.SwapModule { @@ -498,7 +500,9 @@ namespace YLErp.Modules.SwapModule } var retListResult = query.ToSearchList(req); var tds= retListResult.rows.Select(x => x.FlowEvent.SwapTradeId).Distinct().ToList(); - var posiList = DbContext.swap_position.Where(s => !s.Invalid && s.IsInitial && tds.Contains(s.SwapTradeId)&&!string.IsNullOrEmpty(s.FloatRateUnderlyingCode)).ToList(); + var posiList = DbContext.swap_position.Where(s => !s.Invalid && s.IsInitial && tds.Contains(s.SwapTradeId) && !string.IsNullOrEmpty(s.FloatRateUnderlyingCode)).ToList(); + // 查询成交收益率 + Dictionary ytmMap = DbContext.trade.AsNoTracking().Where(p => tds.Contains(p.id)).ToList().ToDictionary(t => t.id, t => t.InitYtm); foreach (var item in retListResult.rows) { item.FlowEvent.DividendPending = -item.FlowEvent.DividendPending; @@ -509,6 +513,7 @@ namespace YLErp.Modules.SwapModule item.FlowEvent.TradingFee = -item.FlowEvent.TradingFee; item.FlowEvent.TradingFeePending = -item.FlowEvent.TradingFeePending; item.FlowEvent.InterestClosePnL = -item.FlowEvent.InterestClosePnL; + item.FlowEvent.InitYtm = ytmMap.GetValueOrDefault(item.FlowEvent.SwapTradeId); var posi= posiList.FirstOrDefault(s => s.id == item.FlowEvent.PositionId); item.FloatRateUnderlyingCode= posi?.FloatRateUnderlyingCode; if (item.FlowEvent.EventType==(int)SwapFlowEventTypeEnum.开仓) diff --git a/YLErpDAL/Modules/SwapModule/SwapTradeAutoService.cs b/YLErpDAL/Modules/SwapModule/SwapTradeAutoService.cs index c0efa879..fd5846c6 100644 --- a/YLErpDAL/Modules/SwapModule/SwapTradeAutoService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapTradeAutoService.cs @@ -355,6 +355,7 @@ namespace YLErp.Modules.SwapModule /// public List SummaryFlow(List swapFlows, DateTime valueDate, bool save = true, Action callback = null) { + DateTime settleDate = QdpCalendarHelper.GetNonHoliday(valueDate.AddDays(1)); var swapFlowGroup = swapFlows.GroupBy(g => new { g.ClientId, g.OccurTime, g.UnderlyingCode, g.BsType }).ToList(); List list = new List(); foreach (var gourpItem in swapFlowGroup) @@ -389,7 +390,7 @@ namespace YLErp.Modules.SwapModule swap_flow_summary.TradingAmountNetFeeAvg = swap_flow_summary.TradingQty == 0 ? swap_flow_summary.TradingAmountNetAvg : swap_flow_summary.TradingAmountNetAvg + swap_flow_summary.TradingFeePending * tradeSide / swap_flow_summary.TradingQty; swap_flow_summary.TradingAmountNetFeeAvg = Math.Round(swap_flow_summary.TradingAmountNetFeeAvg ?? 0, 10); // 计算收益率 - CalBondResult result = BondCalcHepler.BondCalcByDate(gourpItem.Key.UnderlyingCode, swap_flow_summary.TradingAmountAvg * ConsGlobal.bondShowPriceMultiple, valueDate.ToString("yyyy-MM-dd")); + CalBondResult result = BondCalcHepler.BondCalcByDate(gourpItem.Key.UnderlyingCode, swap_flow_summary.TradingAmountAvg * ConsGlobal.bondShowPriceMultiple, settleDate.ToString("yyyy-MM-dd")); if (result != null) { swap_flow_summary.InitYtm = result.ytm * ConsGlobal.bondPriceMultiple; diff --git a/YLErpWeb/App_Docs/导出模板/结算报告模板.xlsx b/YLErpWeb/App_Docs/导出模板/结算报告模板.xlsx index ce65897f23e66938d54bfe4ccda2436951b7186f..ba6be62b0fc3b8a55c5fe543a0d921c2878548bd 100644 GIT binary patch delta 11370 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 delta 10514 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
- +