diff --git a/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs b/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs index 8796d2f4..13e40b66 100644 --- a/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs +++ b/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs @@ -1280,7 +1280,7 @@ namespace YLErp.BLL.Eod var posiQty = eodPosi?.PosiQuantity ?? 0; var flowEvents = swapFlowEvents.Where(x => x.SwapTradeId == item.Key).ToList(); var unwindQty = flowEvents.Sum(s => s.Quantity); - var pnl = lastEodSwap.PostionValue; + var pnl = lastEodSwap.PostionValue- eodPosi?.VTradingFee+eodPosi?.PosiFeePending; decimal unwindPercent = 0; if (unwindQty != 0) { diff --git a/YLErpDAL/Modules/EodModule/SettlementModule/EodClientBalanceCalc.cs b/YLErpDAL/Modules/EodModule/SettlementModule/EodClientBalanceCalc.cs index 20106ec9..6d7ed87a 100644 --- a/YLErpDAL/Modules/EodModule/SettlementModule/EodClientBalanceCalc.cs +++ b/YLErpDAL/Modules/EodModule/SettlementModule/EodClientBalanceCalc.cs @@ -129,7 +129,10 @@ namespace YLErp.Modules.EodModule.SettlementModule var eodSwapQuery = from eod in DbContext.eod_swap.Where(x => x.ValueDate <= balanceDate && x.ValueDate >= preBalanceDate) join t in DbContext.trade.Where(x => x.TradeType == "收益互换" && x.ValidState != ConsGlobal.InValid && ConsTrade.TradeStatusAfterConfirmed.Contains(x.TradeStatus)) on eod.SwapTradeId equals t.id select eod; - + // 互换合约估值持仓信息 + var eodSwapPosiQuery = from eod in DbContext.eod_swap_position.Where(x => x.ValueDate <= balanceDate && x.ValueDate >= preBalanceDate&&x.PosiDirection>0) + join t in DbContext.trade.Where(x => x.TradeType == "收益互换" && x.ValidState != ConsGlobal.InValid && ConsTrade.TradeStatusAfterConfirmed.Contains(x.TradeStatus)) on eod.SwapTradeId equals t.id + select eod; 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 @@ -142,9 +145,11 @@ namespace YLErp.Modules.EodModule.SettlementModule }; var eodSwaps = eodSwapQuery.ToList(); + var eodSwapPosis = eodSwapPosiQuery.ToList(); if (reqClientIds != null && reqClientIds.Any()) { eodSwaps = eodSwaps.Where(t => reqClientIds.Contains(t.ClientId)).ToList(); + eodSwapPosis= eodSwapPosis.Where(t => reqClientIds.Contains(t.ClientId)).ToList(); marignQuery = marignQuery.Where(t => reqClientIds.Contains(t.ClientId)); } var swapIds = eodSwaps.Select(s => s.SwapTradeId); @@ -701,6 +706,7 @@ namespace YLErp.Modules.EodModule.SettlementModule //持仓交易 var positionTrades = trades.Where(t => t.TradeStatus.Equals(ConsTrade.确认成交) && t.ClientId == client.id && t.TradeType != "收益互换").ToList(); var clientEodSwaps = eodSwaps.Where(t => t.ClientId == client.id && t.ValueDate == balanceDate).ToList(); + var clientEodSwapPosis= eodSwapPosis.Where(t => t.ClientId == client.id && t.ValueDate == balanceDate).ToList(); //var tradeIds = clientTrades.Where(t => t.ClientId == client.id).Select(t => t.id).ToList(); //获取所有持仓交易ids var positionTradeIds = positionTrades == null || positionTrades.Count == 0 ? new List() : positionTrades.Select(t => t.id).ToList(); @@ -837,14 +843,17 @@ namespace YLErp.Modules.EodModule.SettlementModule } #region 收益互换V2 var clientEodSwapsLast = clientEodSwaps.ToList(); + var clientEodSwapPositionLast = clientEodSwapPosis.ToList(); foreach (var item in clientEodSwapsLast) { var lastEodSwap = eodSwaps.FirstOrDefault(t => t.SwapTradeId == item.SwapTradeId && t.ValueDate == preBalanceDate); + var lastEodSwapPosition = eodSwapPosis.FirstOrDefault(t => t.SwapTradeId == item.SwapTradeId && t.ValueDate == preBalanceDate); + var eodSwapPosition = clientEodSwapPositionLast.FirstOrDefault(t => t.SwapTradeId == item.SwapTradeId && t.ValueDate == balanceDate); PotentialSurpluses += Convert.ToDouble(item.PostionValue) * (-1); WinLoss += Convert.ToDouble(item.TdRealizedPnL) * (-1); - var lastPv = lastEodSwap != null ? Convert.ToDouble(lastEodSwap.PostionValue) * (-1) : 0; + var lastPv = lastEodSwap != null ? Convert.ToDouble(lastEodSwap.PostionValue- lastEodSwapPosition?.VTradingFee+lastEodSwapPosition?.PosiFeePending) * (-1) : 0; eodPnlSum.LastPvSum = eodPnlSum.LastPvSum.HasValue ? eodPnlSum.LastPvSum + lastPv : lastPv; - var pnl = item.PostionValue; + var pnl = item.PostionValue- eodSwapPosition?.VTradingFee+ eodSwapPosition?.PosiFeePending; eodPnlSum.PvSum = eodPnlSum.PvSum.HasValue ? eodPnlSum.PvSum - Convert.ToDouble(item.PostionValue) : Convert.ToDouble(item.PostionValue) * (-1); eodPnlSum.SellPvSum = eodPnlSum.SellPvSum.HasValue ? eodPnlSum.SellPvSum - Convert.ToDouble(item.MarketValueShort) : Convert.ToDouble(item.MarketValueShort) * (-1); eodPnlSum.RoundedPvSum = eodPnlSum.RoundedPvSum.HasValue ? eodPnlSum.RoundedPvSum - Math.Round(Convert.ToDouble(item.PostionValue), 2) : Math.Round(Convert.ToDouble(item.PostionValue), 2) * (-1); diff --git a/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs b/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs index 1e54f8b8..f057be3c 100644 --- a/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs +++ b/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs @@ -240,7 +240,7 @@ namespace YLErp.Modules.ReportModule.SettlementReportModule 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), + PosiFeePendingSum = report.EodSwapPositions.Sum(x => x.position.PosiFeePending), PosiProfitSum= report.EodSwapPositions.Sum(x => x.position.PosiProfitSum), NetSettmentAmountSum= report.EodSwapPositions.Sum(x => x.NetSettmentAmount), }); diff --git a/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs b/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs index e13a929d..c0b00f33 100644 --- a/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapEodPositionService.cs @@ -1895,7 +1895,7 @@ namespace YLErp.Modules.SwapModule var posiProfitSum= item.position.PosiProfitSum; //item.position.PosiProfitSum 不需要加交易费用 item.position.PosiProfitSum = item.position.PosiProfitSum - item.position.VTradingFee-item.position.PosiDividendSum; - item.NetSettmentAmount = posiProfitSum; + item.NetSettmentAmount = item.position.PosiProfitSum+ item.position.PosiDividendSum+ item.position.PosiFeePending; 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); @@ -1939,6 +1939,7 @@ namespace YLErp.Modules.SwapModule position.InterestProfitSum = -position.InterestProfitSum; position.PosiProfitSum = -position.PosiProfitSum; position.VTradingFee = -position.VTradingFee; + position.PosiFeePending = -position.PosiFeePending; position.SwapPositionValue = -position.SwapPositionValue; position.PosiDividendSum = -position.PosiDividendSum; } diff --git a/YLErpWeb/App_Docs/导出模板/结算报告模板.xlsx b/YLErpWeb/App_Docs/导出模板/结算报告模板.xlsx index ded2478e..6f1c339a 100644 Binary files a/YLErpWeb/App_Docs/导出模板/结算报告模板.xlsx and b/YLErpWeb/App_Docs/导出模板/结算报告模板.xlsx differ diff --git a/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_EodPosition.js b/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_EodPosition.js index 9c6b9f68..df4a8579 100644 --- a/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_EodPosition.js +++ b/YLErpWeb/wwwroot/Scripts/app/swaptrade/TradeMarketReport_EodPosition.js @@ -288,9 +288,9 @@ var colModelGrid = [ formatter: StockEqvNotionalFormat, sortable: false, }, { - name: 'position.VTradingFee', - label: '预估交易费用', - index: 'position.VTradingFee', + name: 'position.PosiFeePending', + label: '开仓交易费用', + index: 'position.PosiFeePending', width: 120, align: 'center', formatter: StockEqvNotionalFormat,