From ba03d402a09acc15af5c1ed777ba01128946fe06 Mon Sep 17 00:00:00 2001 From: gongpei Date: Wed, 15 Oct 2025 15:08:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=94=B6=E7=9B=8A=E7=8E=87=E7=A9=BA?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DBModels/EodSwapPositionResponse.cs | 2 +- .../YLErp.Core/DBModels/SwapFlowEvent.cs | 2 +- Framework/YLErp.Core/DBModels/SwapPosition.cs | 2 +- YLErpDAL/Model/ClientSwapPositionRequest.cs | 2 +- YLErpDAL/Model/SwapFlowEventExportModel.cs | 2 ++ YLErpDAL/Model/Trade.cs | 2 +- .../SwapModule/SwapFlowEventService.cs | 2 +- .../Modules/SwapModule/SwapFlowService.cs | 3 ++- .../Modules/SwapModule/SwapTradeService.cs | 4 ++-- .../导出模板/互换开平仓事件流水导出模板.xlsx | Bin 10086 -> 11178 bytes .../Scripts/app/swaptrade/eventlist.js | 10 +++++++--- 11 files changed, 19 insertions(+), 12 deletions(-) diff --git a/Framework/YLErp.Core/DBModels/EodSwapPositionResponse.cs b/Framework/YLErp.Core/DBModels/EodSwapPositionResponse.cs index dfb643cd..18533989 100644 --- a/Framework/YLErp.Core/DBModels/EodSwapPositionResponse.cs +++ b/Framework/YLErp.Core/DBModels/EodSwapPositionResponse.cs @@ -37,7 +37,7 @@ namespace YLErp.DBModels /// public decimal PeriodAmount { get; set; } - public decimal InitYtm { get; set; } + public decimal? InitYtm { get; set; } /// /// 期限 /// diff --git a/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs b/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs index 305568af..c4c9e6df 100644 --- a/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs +++ b/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs @@ -388,7 +388,7 @@ namespace YLErp.DBModels /// 成交收益率 /// [NotMapped] - public decimal InitYtm { get; set; } + public decimal? InitYtm { get; set; } } } diff --git a/Framework/YLErp.Core/DBModels/SwapPosition.cs b/Framework/YLErp.Core/DBModels/SwapPosition.cs index f9e1a8a8..bcc18c36 100644 --- a/Framework/YLErp.Core/DBModels/SwapPosition.cs +++ b/Framework/YLErp.Core/DBModels/SwapPosition.cs @@ -232,7 +232,7 @@ namespace YLErp.DBModels /// /// 期初收益率 /// - public decimal InitYtm { get; set; } + public decimal? InitYtm { get; set; } /// /// 是否无效 /// diff --git a/YLErpDAL/Model/ClientSwapPositionRequest.cs b/YLErpDAL/Model/ClientSwapPositionRequest.cs index 77c98722..c4883a06 100644 --- a/YLErpDAL/Model/ClientSwapPositionRequest.cs +++ b/YLErpDAL/Model/ClientSwapPositionRequest.cs @@ -45,7 +45,7 @@ namespace YLErp.Model /// public decimal TradingFee { get; set; } - public decimal InitYtm { get; set; } + public decimal? InitYtm { get; set; } /// /// 净额结算金额 互换持仓价值+待返还的预付金本金 diff --git a/YLErpDAL/Model/SwapFlowEventExportModel.cs b/YLErpDAL/Model/SwapFlowEventExportModel.cs index 901ff943..d710bf22 100644 --- a/YLErpDAL/Model/SwapFlowEventExportModel.cs +++ b/YLErpDAL/Model/SwapFlowEventExportModel.cs @@ -98,5 +98,7 @@ namespace YLErp.Model public string DividendIn { get; set; } public string OptLog { get; set; } + + public decimal? InitYtm { get; set; } } } diff --git a/YLErpDAL/Model/Trade.cs b/YLErpDAL/Model/Trade.cs index d0ae332e..98e5ada5 100644 --- a/YLErpDAL/Model/Trade.cs +++ b/YLErpDAL/Model/Trade.cs @@ -336,7 +336,7 @@ namespace YLErp.DBModels public double DividendRatio { get; internal set; } [DisplayName("簿记后生成的成交收益率")] - public decimal InitYtm { get; set; } + public decimal? InitYtm { get; set; } public string GetDataTraceKeyInfo() { diff --git a/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs b/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs index ceba0abc..3bad869c 100644 --- a/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs @@ -502,7 +502,7 @@ namespace YLErp.Modules.SwapModule 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(); // 查询成交收益率 - Dictionary ytmMap = DbContext.trade.AsNoTracking().Where(p => tds.Contains(p.id)).ToList().ToDictionary(t => t.id, t => t.InitYtm); + 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; diff --git a/YLErpDAL/Modules/SwapModule/SwapFlowService.cs b/YLErpDAL/Modules/SwapModule/SwapFlowService.cs index 3657f104..24ed1178 100644 --- a/YLErpDAL/Modules/SwapModule/SwapFlowService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapFlowService.cs @@ -282,7 +282,7 @@ namespace YLErp.Modules.SwapModule } var retListResult = eventQuery.ToSearchList(req); List extendList = null; - Dictionary ytmMap = new Dictionary(); + Dictionary ytmMap = new Dictionary(); if (retListResult != null && retListResult.rows != null && retListResult.rows.Any()) { var tradeIds = retListResult.rows.Where(p => p.PayDate == null || p.EventType != (int)SwapEventTypeEnum.平仓).Select(p => p.SwapTradeId).Distinct().ToList(); @@ -381,6 +381,7 @@ namespace YLErp.Modules.SwapModule exportModel.MarkClosePnl = item.MarkClosePnl.OtcFormatMoney(false, 4); exportModel.DividendIn = item.DividendIn.OtcFormatMoney(false, 4); exportModel.OptLog = item.OptLog; + exportModel.InitYtm = item.InitYtm; list.Add(exportModel); } var tplFilePath = OtcAppContext.MapPath("/App_Docs"); diff --git a/YLErpDAL/Modules/SwapModule/SwapTradeService.cs b/YLErpDAL/Modules/SwapModule/SwapTradeService.cs index b04c8b49..962cec7a 100644 --- a/YLErpDAL/Modules/SwapModule/SwapTradeService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapTradeService.cs @@ -386,7 +386,7 @@ namespace YLErp.Modules.SwapModule OptId = UserInfo.UserId, OptName = UserInfo.UserName, UnderlyingInstrumentType = underlying.UnderlyingInstrumentType, - InitYtm = flowMerge.InitYtm ?? 0 + InitYtm = flowMerge.InitYtm }; td.swap_positions.Add(floatPosition); swap_position interestPosition = new swap_position() @@ -579,7 +579,7 @@ namespace YLErp.Modules.SwapModule dbTrade.trade_extend = req.trade_extend; dbTrade.swap_positions = req.swap_positions; dbTrade.MetaDic = req.MetaDic; - dbTrade.InitYtm = req.swap_positions.FirstOrDefault(p => p.InitYtm > 0)?.InitYtm ?? 0m; + dbTrade.InitYtm = req.swap_positions.FirstOrDefault(p => p.InitYtm != null)?.InitYtm; InnerSaveTrade(false, dbTrade, changsStr, changeConfirmStatus); return dbTrade; diff --git a/YLErpWeb/App_Docs/导出模板/互换开平仓事件流水导出模板.xlsx b/YLErpWeb/App_Docs/导出模板/互换开平仓事件流水导出模板.xlsx index ea91fe5bd097b18f0313057bdd91da770eeabbf3..aacc08b6e87bd1658583d52d93482a548cf1fa75 100644 GIT binary patch delta 4563 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 diff --git a/YLErpWeb/wwwroot/Scripts/app/swaptrade/eventlist.js b/YLErpWeb/wwwroot/Scripts/app/swaptrade/eventlist.js index 1838596e..e9f8f6b7 100644 --- a/YLErpWeb/wwwroot/Scripts/app/swaptrade/eventlist.js +++ b/YLErpWeb/wwwroot/Scripts/app/swaptrade/eventlist.js @@ -194,9 +194,13 @@ var getColModelGrid = function () { label: '成交收益率', width: 90, align: 'center', - formatter: otcformat.trading.premiumRateP - }, - { + formatter: function (cellValue, options, rowObject) { + if (cellValue == null) { + return ""; + } + return otcformat.trading.premiumRateP(cellValue); + } + }, { name: 'TradingAmountNetFeeAvg', label: '成交净价(含费)', width: 90,