From 083848fb62e3b300b2683ca5a1e054791f9ab1dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Wed, 28 May 2025 18:09:19 +0800 Subject: [PATCH] =?UTF-8?q?TRS-ZS-464=20=E4=BC=B0=E5=80=BC=E5=8D=95?= =?UTF-8?q?=E8=B0=83=E6=95=B4&=20=E5=88=A9=E6=81=AF=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D&=E5=AE=A1=E6=89=B9=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../YLErp.Core/DBModels/SwapFlowEvent.cs | 16 ++++ .../YLErp.Core/Models/SwapEndConfirmModel.cs | 4 + .../App_Docs/结算单/非DMA结算单.xlsx | Bin 10421 -> 10448 bytes .../TradeSettleBillGenerator.cs | 5 +- YLErpDAL/Model/ClientSwapPositionRequest.cs | 25 ++++++ .../SettlementReportFotShanXiService.cs | 24 +++++- .../Modules/SwapModule/SwapDealService.cs | 80 ++++++------------ .../SwapModule/SwapEodPositionService.cs | 8 +- .../SwapModule/SwapFlowEventService.cs | 18 ++++ .../SwapModule/SwapTradeAutoService.cs | 14 +++ YLErpWeb/App_Docs/导出模板/结算报告模板.xlsx | Bin 17786 -> 18328 bytes YLErpWeb/Hubs/SwapFlowCombookingHub.cs | 8 +- .../TradeMarketReport_EodPosition.js | 25 +++++- ...MarketReport_HistoricalPositionSwapFlow.js | 70 +++++++-------- 14 files changed, 198 insertions(+), 99 deletions(-) diff --git a/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs b/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs index de644ae3..6eec6675 100644 --- a/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs +++ b/Framework/YLErp.Core/DBModels/SwapFlowEvent.cs @@ -253,6 +253,22 @@ namespace YLErp.DBModels [DisplayName("收支方向")] [DataChange] public int InterestDirection { get; set; } + [NotMapped] + public string InterestDirectionStr + { + get + { + if (InterestDirection == 1) + { + return "收取"; + } + else if (InterestDirection == 2) + { + return "支付"; + } + else return ""; + } + } /// /// 计息方式 1:固定值,2:合约名义本金规模,3:持仓名义本金,4:持仓市值 /// diff --git a/Framework/YLErp.Core/Models/SwapEndConfirmModel.cs b/Framework/YLErp.Core/Models/SwapEndConfirmModel.cs index a17503a1..6ffbccf3 100644 --- a/Framework/YLErp.Core/Models/SwapEndConfirmModel.cs +++ b/Framework/YLErp.Core/Models/SwapEndConfirmModel.cs @@ -39,5 +39,9 @@ namespace YLErp.Models public string NetSettleAmout { get; set; } public string MarginInterestAmount { get; set; } + /// + /// 分红 + /// + public string DividendIn { get; set; } } } diff --git a/Plugins/YLErp.Plugins.ZheShang/App_Docs/结算单/非DMA结算单.xlsx b/Plugins/YLErp.Plugins.ZheShang/App_Docs/结算单/非DMA结算单.xlsx index 1f66aab5338b13bc63bfe6a69b2d4254a26ea63b..6cadad288c1aa88bd804cbdb0dbae9d22cafb719 100644 GIT binary patch delta 3102 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 ConsTrade.InterestModels.Contains(x.InterestMode)).Sum(s => s.InterestRate); row.InterestRate = interestRate.ToString("0.00%"); - var PosiNotionalValue = flowEventGroup.Quantity * flowEventGroup.ContractSize; + var PosiNotionalValue = flowEventGroup.Quantity * flowEventGroup.ContractSize* posi.PosiGrossPrice; row.PosiNotionalValue = PosiNotionalValue.ToString("0.00"); row.PosiNetPrice = (posi.PosiGrossPrice * 100).OtcFormat(OtcFormatFlag.umprice); //var tradingFee = (flowEventGroup.TradingAmountFeeAvg- posi.PosiNetPrice- flowEventGroup.TradingAmountAvg+ posi.PosiGrossPrice)* PosiNotionalValue* ratio; @@ -98,10 +98,11 @@ namespace YLErp.Plugins.ShanXi.DocumentGenerator //row.MarginInterestAmount = MarginInterestAmount.ToString("0.00"); var FloatRate = PosiNotionalValue == 0 ? 0 : InterestAmount / PosiNotionalValue; row.FloatRate = FloatRate.ToString("0.0000%"); - var PosiPnl = -(flowEventGroup.MarkClosePnl- tradingFee); + var PosiPnl = -(flowEventGroup.MarkClosePnl- tradingFee-flowEventGroup.DividendIn); row.PosiPnl = PosiPnl.ToString("0.00"); var markClosePnl = (-flowEventGroup.MarkClosePnl); row.MarkClosePnl = markClosePnl.ToString("0.00"); + row.DividendIn = (-flowEventGroup.DividendIn).ToString("0.00"); var marginBackAmount = unwindFlowEvents.Where(x => ConsTrade.InterestMarginModels.Contains(x.InterestMode)).Sum(s => s.InterestPrincipal); var NetSettleAmout = unwindFlowEvents.Sum(x => x.InterestClosePnL) * -1 + flowEventGroup.MarkClosePnl * -1 + marginBackAmount; row.NetSettleAmout = NetSettleAmout.ToString("0.00"); diff --git a/YLErpDAL/Model/ClientSwapPositionRequest.cs b/YLErpDAL/Model/ClientSwapPositionRequest.cs index 34e8de76..e688d281 100644 --- a/YLErpDAL/Model/ClientSwapPositionRequest.cs +++ b/YLErpDAL/Model/ClientSwapPositionRequest.cs @@ -36,5 +36,30 @@ namespace YLErp.Model public string StructureType { get; set; } public string ContractCode { get; set; } + /// + /// 交易费用 + /// + public decimal TradeFee { get; set; } + /// + /// 交易费用后付 + /// + public decimal TradingFee { get; set; } + + /// + /// 净额结算金额 互换持仓价值+待返还的预付金本金 + /// + public decimal NetSettmentAmount { get; set; } + /// + /// 浮动标的代码 + /// + public string FloatRateUnderlyingCode { get; set; } + + public decimal PosiPnl { get; set; } + /// + /// 计息天数 + /// + public decimal Days { get; set; } + + public DateTime StartDate { get; set; } } } diff --git a/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs b/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs index 2298e3fb..1e54f8b8 100644 --- a/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs +++ b/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs @@ -233,7 +233,17 @@ namespace YLErp.Modules.ReportModule.SettlementReportModule } if (report.EodSwapPositions != null) { - modelDict.Add("互换估值", report.EodSwapPositions); + modelDict.Add("互换估值", new + { + EodSwapPositions = report.EodSwapPositions, + PosiNotionalValueSum= report.EodSwapPositions.Sum(x => x.position.PosiNotionalValue), + PosiQuantitySum= report.EodSwapPositions.Sum(x => x.position.PosiQuantity), + PeriodAmountSum= report.EodSwapPositions.Sum(x => x.PeriodAmount), + InterestAmountSum= report.EodSwapPositions.Sum(x => x.InterestAmount), + VTradingFeeSum= report.EodSwapPositions.Sum(x => x.position.VTradingFee), + PosiProfitSum= report.EodSwapPositions.Sum(x => x.position.PosiProfitSum), + NetSettmentAmountSum= report.EodSwapPositions.Sum(x => x.NetSettmentAmount), + }); } if (report.SwapPositions != null) { @@ -241,7 +251,17 @@ namespace YLErp.Modules.ReportModule.SettlementReportModule } if (report.clientSwapPositions != null) { - modelDict.Add("互换交易流水", report.clientSwapPositions); + modelDict.Add("互换交易流水", new + { + ClientSwapPositions = report.clientSwapPositions, + TradeFeeSum= report.clientSwapPositions.Sum(x => x.TradeFee), + TradingFeeSum= report.clientSwapPositions.Sum(x => x.TradingFee), + PosiPnlSum = report.clientSwapPositions.Sum(x => x.PosiPnl), + DividendInSum= report.clientSwapPositions.Sum(x => x.FlowEvent.DividendIn), + InterestAmountSum= report.clientSwapPositions.Sum(x => x.FlowEvent.InterestAmount), + InterestFeeSum= report.clientSwapPositions.Sum(x => x.FlowEvent.InterestFee), + NetSettmentAmountSum = report.clientSwapPositions.Sum(x => x.NetSettmentAmount), + }); } if (report.ClientCashInCashOutExtendList != null) { diff --git a/YLErpDAL/Modules/SwapModule/SwapDealService.cs b/YLErpDAL/Modules/SwapModule/SwapDealService.cs index 056017ba..33093c4c 100644 --- a/YLErpDAL/Modules/SwapModule/SwapDealService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapDealService.cs @@ -556,28 +556,22 @@ namespace YLErp.Modules.SwapModule } else { + decimal aDays = position.IsAnnualized ? annualDays : 1; InterestAmount = closePosiNotionalValue * (interest.InterestRate + position.FloatRate); TdInterestAmount = posiNotionalValue * (interest.InterestRate + position.FloatRate); if (settment) { - if (position.IsAnnualized) - { - InterestAmount = InterestAmount * ((decimal)itemDays / annualDays); - TdInterestAmount = TdInterestAmount * ((decimal)itemDays / annualDays); - } + InterestAmount = InterestAmount * ((decimal)itemDays / aDays); + TdInterestAmount = TdInterestAmount * ((decimal)itemDays / aDays); InterestAmount = (interestProfitSum * closePrecent) + InterestAmount; } else { - if (itemDays > 1)//日期超算情况 + if (endDate > lastSwapDate)//日期超算情况 { - decimal days = (decimal)itemDays - 1m; - if (position.IsAnnualized) - { - InterestAmount = InterestAmount * (days / annualDays); - TdInterestAmount = TdInterestAmount * (days / annualDays); - InterestAmount += (interestProfitSum * closePrecent); - } + InterestAmount = InterestAmount * ((decimal)itemDays / aDays); + TdInterestAmount = TdInterestAmount * ((decimal)itemDays / aDays); + InterestAmount += (interestProfitSum * closePrecent); } else { @@ -1251,55 +1245,31 @@ namespace YLErp.Modules.SwapModule swapEvent.unwindData = JsonConvert.DeserializeObject(swapEvent.EventData); var flowList = DbContext.swap_flow_event.Where(x => x.EventId == swapEvent.id).ToList(); string action = eventType == (int)SwapEventTypeEnum.互换 ? ClientCashInCashOut.系统操作_互换 : ClientCashInCashOut.系统操作_平仓费; - int clientCashId = AddClientCashInCashOut(td, Convert.ToDouble(swapEvent.unwindData.SwapCloseAmount), action, swapEvent.unwindData.ValueDate); - swapEvent.ClientCashId = clientCashId; - if (td.StructureType != "多空组合") + int clientCashId = AddClientCashInCashOut(td, Convert.ToDouble(-swapEvent.unwindData.SwapRealizedPnL), action, swapEvent.unwindData.ValueDate); + if (swapEvent.unwindData.SwapMarginAmount != 0) { - if (eventType == (int)SwapEventTypeEnum.互换) + AddClientCashInCashOut(td, Convert.ToDouble(swapEvent.unwindData.SwapMarginAmount), ClientCashInCashOut.系统操作_应付预付金, swapEvent.unwindData.ValueDate); + } + swapEvent.ClientCashId = clientCashId; + if (swapEvent.unwindData.CloseMethod == (int)CloseMethodEnum.全部平仓) + { + td.TradeStatus = "已平仓"; + td.trade_extend = DbContext.trade_extend.FirstOrDefault(x => x.TradeId == td.id); + if (td.trade_extend != null && !td.trade_extend.ExtendObj.NeedOpenFee) { - if (td.ExerciseDate <= swapEvent.unwindData.ValueDate) - { - td.Notional = 0; - td.StockEqvNotional = 0; - td.TradeStatus = ConsTrade.已到期; - } - else - { - td.TradeStatus = ConsTrade.确认成交; - } + new ClientCashInCashOutService(this).SaveSwapTradeClientCash(td, td.TradePrice ?? 0, swapEvent.unwindData.ValueDate, 0); } - else - { - if (swapEvent.unwindData.CloseMethod == (int)CloseMethodEnum.全部平仓) - { - td.TradeStatus = ConsTrade.已平仓; - td.Notional = 0; - td.TradeAmount = 0; - } - else - { - td.TradeStatus = ConsTrade.确认成交; - td.HasPartialUnWind = 1; - td.TradeAmount -= Convert.ToDouble(swapEvent.unwindData.CloseQty); - } - td.StockEqvNotional -= Convert.ToDouble(swapEvent.unwindData.CloseNotionalValue); - } - td.UnWindDate = swapEvent.unwindData.UnwindDate; - UpdateInitalPosition(flowList, swapEvent.unwindData, eventType); - DbContext.SaveChanges(); } else { - if (eventType == (int)SwapEventTypeEnum.平仓) - { - td.UnWindDate = swapEvent.unwindData.UnwindDate; - td.StockEqvNotional = 0; - td.TradeStatus = "已平仓"; - } - UpdateInitalPosition(flowList, swapEvent.unwindData, eventType); - DbContext.SaveChanges(); + td.HasPartialUnWind = 1; } - + td.UnWindDate = swapEvent.unwindData.UnwindDate; + td.StockEqvNotional -= Convert.ToDouble(swapEvent.unwindData.CloseNotionalValue); + td.TradeAmount -= Convert.ToDouble(swapEvent.unwindData.CloseQty); + td.Notional = td.TradeAmount; + UpdateInitalPosition(flowList, swapEvent.unwindData, eventType); + DbContext.SaveChanges(); } /// diff --git a/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs b/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs index 99a5755b..fb7d29c7 100644 --- a/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs @@ -137,7 +137,7 @@ namespace YLErp.Modules.SwapModule } var flowEvents = new List(); Expression> eventExpression = x => x.SwapTradeId == td.id && x.DataState == (int)SwapFlowDateStateEnum.完成; - eventExpression = eventExpression.And(x => (x.EventDate == settleDate && x.EventType == (int)SwapFlowEventTypeEnum.开仓) || (x.UnwindDate == settleDate && eventTyps.Contains(x.EventType))); + eventExpression = eventExpression.And(x => x.EventDate == settleDate ); //if (settleDate == td.TradeDate) //{ // eventExpression = eventExpression.And(x => x.EventDate == settleDate); @@ -1834,7 +1834,7 @@ namespace YLErp.Modules.SwapModule private SearchListResult GetSearchEodPositionList(ClientSwapPositionRequest req) { - var predicate = PredicateBuilder.Create(n => !n.Invalid && n.PosiQuantity > 0); + var predicate = PredicateBuilder.Create(n => !n.Invalid && n.PosiDirection > 0); var interestPredicate = PredicateBuilder.Create(n => !n.Invalid && n.InterestDirection > 0); var tradePredicate = PredicateBuilder.Create(n => n.StructureType == req.StructureType && n.ValidState != "InValid"); @@ -1894,8 +1894,9 @@ namespace YLErp.Modules.SwapModule //item.position.PosiProfitSum += item.TradingFee; var posiProfitSum= item.position.PosiProfitSum; //item.position.PosiProfitSum 不需要加交易费用 - item.position.PosiProfitSum = item.position.PosiProfitSum - item.position.VTradingFee; + item.position.PosiProfitSum = item.position.PosiProfitSum - item.position.VTradingFee-item.position.PosiDividendSum; item.NetSettmentAmount = posiProfitSum; + item.PeriodAmount = item.position.PosiDividendSum; var margins = positions.Where(x => x.SwapTradeId == item.position.SwapTradeId); var interests = eodPositions.Where(x => x.SwapTradeId == item.position.SwapTradeId && x.ValueDate == item.position.ValueDate); var eodMargins = interests.Where(x => marginTypes.Contains(x.InterestMode)); @@ -1936,6 +1937,7 @@ namespace YLErp.Modules.SwapModule position.PosiProfitSum = -position.PosiProfitSum; position.VTradingFee = -position.VTradingFee; position.SwapPositionValue = -position.SwapPositionValue; + position.PosiDividendSum = -position.PosiDividendSum; } private void SetPosiPrice(eod_swap_position position) { diff --git a/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs b/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs index a57f8e0d..309be6d3 100644 --- a/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapFlowEventService.cs @@ -475,6 +475,7 @@ namespace YLErp.Modules.SwapModule var tradeQuery = DbContext.trade.Where(tradePredicate); var query = from flow in positionQuery join td in tradeQuery on flow.SwapTradeId equals td.id + join posi in DbContext.swap_position on flow.PositionId equals posi.PositionId join tr in DbContext.trade_contract_r on td.id equals tr.TradeId into tradeContractGroup from tradeContract in tradeContractGroup.DefaultIfEmpty() select new ClientSwapPositionResponse @@ -485,6 +486,8 @@ namespace YLErp.Modules.SwapModule ClientName = td.ClientName, ClientId = td.ClientId, ContractCode = tradeContract.ContractCode, + FloatRateUnderlyingCode=posi.FloatRateUnderlyingCode, + StartDate = td.StartDate.Value, }; if (string.IsNullOrEmpty(req.sidx)) { @@ -501,6 +504,21 @@ namespace YLErp.Modules.SwapModule item.FlowEvent.InterestFee = -item.FlowEvent.InterestFee; item.FlowEvent.TradingFee = -item.FlowEvent.TradingFee; item.FlowEvent.TradingFeePending = -item.FlowEvent.TradingFeePending; + + if (item.FlowEvent.EventType==(int)SwapFlowEventTypeEnum.开仓) + { + item.TradeFee = 0; + item.TradingFee= item.FlowEvent.TradingFeePending; + } + else + { + item.TradeFee = item.FlowEvent.TradingFee; + item.TradingFee = item.FlowEvent.TradingFeePending; + item.PosiPnl= item.FlowEvent.MarkClosePnl- item.FlowEvent.CloseFee-item.FlowEvent.DividendIn; + item.NetSettmentAmount = item.FlowEvent.MarkClosePnl + item.FlowEvent.InterestClosePnL; + item.Days = (item.FlowEvent.UnwindDate - item.StartDate).Value.Days; + } + } return retListResult; } diff --git a/YLErpDAL/Modules/SwapModule/SwapTradeAutoService.cs b/YLErpDAL/Modules/SwapModule/SwapTradeAutoService.cs index 52e82bd1..b220a92f 100644 --- a/YLErpDAL/Modules/SwapModule/SwapTradeAutoService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapTradeAutoService.cs @@ -4,6 +4,7 @@ using CsvHelper; using Dapper; using DocumentFormat.OpenXml.Drawing; using MoreLinq; +using Newtonsoft.Json; using NPOI.SS.Formula.Functions; using Qdp.ComputeServiceV2.Data.CommonModels.TradeInfos; using Qdp.Pricing.Base.Enums; @@ -213,6 +214,19 @@ namespace YLErp.Modules.SwapModule return resetTradeIds; } /// + /// 检查FR007数据 + /// + /// + /// + public void CheckFR007Data(DateTime valueDate) + { + var existFr007= DbContext.eod_commodity_future_price.Any(s => s.ValueDate==valueDate && s.UnderlyingCode=="FR007"); + if (!existFr007) + { + throw new ServiceException($"{valueDate.ToString("yyyy-MM-dd")}没有FR007数据不能进行簿记"); + } + } + /// /// 校验交易是否收盘 /// /// diff --git a/YLErpWeb/App_Docs/导出模板/结算报告模板.xlsx b/YLErpWeb/App_Docs/导出模板/结算报告模板.xlsx index 2ded3ffcaf44e609177d06dfd73dc1b119715c70..ded2478ed515aa1f75527bd10eb32643b60995fb 100644 GIT binary patch delta 10481 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 diff --git a/YLErpWeb/Hubs/SwapFlowCombookingHub.cs b/YLErpWeb/Hubs/SwapFlowCombookingHub.cs index 950487d8..582786d7 100644 --- a/YLErpWeb/Hubs/SwapFlowCombookingHub.cs +++ b/YLErpWeb/Hubs/SwapFlowCombookingHub.cs @@ -1,4 +1,5 @@ -using Confluent.Kafka; +using Autofac.Core; +using Confluent.Kafka; using CsvHelper; using DocumentFormat.OpenXml.InkML; using DocumentFormat.OpenXml.Spreadsheet; @@ -60,6 +61,11 @@ namespace YLErp.Web.Hubs // 数据校验逻辑 currentStep = "校验上一日是否收盘"; await client.SendAsync("ReceiveMessage", currentStep); + // 数据校验逻辑 + currentStep = "校验FR007数据"; + await client.SendAsync("ReceiveMessage", currentStep); + //检验FR007 + service.CheckFR007Data(req.tradeDate); service.CheckTradEods(req.tradeDate, mergeList); //currentStep = "检测当前日期是否已经流水合成簿记"; //service.CheckBookByDate(tradeDate); diff --git a/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_EodPosition.js b/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_EodPosition.js index 2abb9762..9c6b9f68 100644 --- a/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_EodPosition.js +++ b/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_EodPosition.js @@ -210,6 +210,21 @@ var colModelGrid = [ align: 'center', sortable: false, formatter: RateFormat + }, { + name: 'position.FloatRateUnderlyingCode', + label: '基准利率', + index: 'position.FloatRateUnderlyingCode', + width: 120, + align: 'center', + sortable: false + }, { + name: 'position.FloatRate', + label: '当日适用基准利率', + index: 'position.FloatRate', + width: 120, + align: 'center', + sortable: false, + formatter: RateFormat }, { name: 'position.PosiNotionalValue', label: '标的名义金额', @@ -218,6 +233,14 @@ var colModelGrid = [ align: 'center', sortable: false, formatter: StockEqvNotionalFormat, + }, { + name: 'position.PosiQuantity', + label: '标的数量', + index: 'position.PosiQuantity', + width: 150, + align: 'center', + sortable: false, + formatter: StockEqvNotionalFormat, }, { name: 'PeriodAmount', label: '期间付息', @@ -266,7 +289,7 @@ var colModelGrid = [ sortable: false, }, { name: 'position.VTradingFee', - label: '交易费用', + label: '预估交易费用', index: 'position.VTradingFee', width: 120, align: 'center', diff --git a/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_HistoricalPositionSwapFlow.js b/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_HistoricalPositionSwapFlow.js index 2917a342..a0a73c03 100644 --- a/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_HistoricalPositionSwapFlow.js +++ b/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_HistoricalPositionSwapFlow.js @@ -224,13 +224,6 @@ var colModelGrid = [ width: 90, align: 'center', formatter: PriceFormat - }, { - name: 'FlowEvent.TradingAmountFeeAvg', - label: '含费均价', - index: 'FlowEvent.TradingAmountFeeAvg', - width: 90, - align: 'center', - formatter: PriceFormat }, { name: 'FlowEvent.Quantity', label: '成交数量', @@ -253,30 +246,23 @@ var colModelGrid = [ align: 'center', formatter: StockEqvNotionalFormat, }, { - name: 'FlowEvent.TradingFee', - label: '交易费用佣金', - index: 'FlowEvent.TradingFee', - width: 120, - align: 'center', - formatter: StockEqvNotionalFormat - }, { - name: 'FlowEvent.TradingFeePending', - label: '待结算后付交易费用佣金', - index: 'FlowEvent.TradingFeePending', + name: 'TradingFee', + label: '待结算交易费用佣金', + index: 'TradingFee', width: 220, align: 'center', formatter: StockEqvNotionalFormat }, { - name: 'FlowEvent.DividendPending', - label: '待结算分红收益', - index: 'FlowEvent.DividendPending', + name: 'TradeFee', + label: '交易费用佣金', + index: 'TradeFee', width: 120, align: 'center', formatter: StockEqvNotionalFormat }, { - name: 'FlowEvent.MarkClosePnl', + name: 'PosiPnl', label: '浮动端平仓盈亏·盯市', - index: 'FlowEvent.MarkClosePnl', + index: 'PosiPnl', width: 220, align: 'center', formatter: StockEqvNotionalFormat, @@ -287,13 +273,6 @@ var colModelGrid = [ width: 220, align: 'center', formatter: StockEqvNotionalFormat, - }, { - name: 'FlowEvent.CloseFee', - label: '浮动端平仓盈亏·费用', - index: 'FlowEvent.CloseFee', - width: 220, - align: 'center', - formatter: StockEqvNotionalFormat, }, { name: 'FlowEvent.InterestDirection', label: '[利息]收支方向', @@ -302,25 +281,38 @@ var colModelGrid = [ align: 'center', formatter: DrictionFormat }, { - name: 'FlowEvent.InterestModeStr', - label: '计息基准类型', - index: 'FlowEvent.InterestModeStr', - width: 90, + name: 'FloatRateUnderlyingCode', + label: '基准利率', + index: 'FloatRateUnderlyingCode', + width: 120, align: 'center', + }, { + name: 'FlowEvent.FloatRate', + label: '当日适用基准利率', + index: 'FlowEvent.FloatRate', + width: 120, + align: 'center', + formatter: PercentFormat }, { name: 'FlowEvent.InterestPrincipal', - label: '计息基准固定值', + label: '计息基数', index: 'FlowEvent.InterestPrincipal', width: 120, align: 'center', formatter: StockEqvNotionalFormat }, { name: 'FlowEvent.InterestRate', - label: '互换利率(年化)', + label: '利率', index: 'FlowEvent.InterestRate', width: 140, align: 'center', formatter:PercentFormat + }, { + name: 'Days', + label: '计息天数', + index: 'Days', + width: 140, + align: 'center' }, { name: 'FlowEvent.InterestAmount', label: '利息端平仓盈亏·利息', @@ -336,6 +328,14 @@ var colModelGrid = [ align: 'center', formatter: StockEqvNotionalFormat } + , { + name: 'NetSettmentAmount', + label: '净额结算金额', + index: 'NetSettmentAmount', + width: 220, + align: 'center', + formatter: StockEqvNotionalFormat + } ]; function formatter6(cellvalue, options, rowObject) {