From 4771fa1268971dfde003e43b269aad5051766a3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Fri, 7 Jun 2024 13:39:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RealTimeClientBanlanceService.cs | 40 ++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs b/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs index cf069486..09c828d1 100644 --- a/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs +++ b/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs @@ -1372,34 +1372,28 @@ namespace YLErp.BLL.Eod private void ProcessClientSwap(DateTime lastSettletDate, DateTime startDate) { var clientIds = _clientBalanceDic.Keys; - var positionList = DbContext.trade.Where(t => (ConsTrade.PositionTradeStatusList.Contains(t.TradeStatus)) && clientIds.Contains(t.ClientId) && t.ValidState != "InValid" && t.TradeType == "收益互换"); - var marignQuery = from t in positionList - join s in DbContext.swap_position on t.id equals s.SwapTradeId - where !s.IsInitial && !s.Invalid - select new - { - ClientId=t.ClientId, - StructureType=t.StructureType, - Position=s, - margin= s.InterestPrincipalFix*(s.InterestDirection==1?-1:1) - }; - var marginQueryGroup = marignQuery.ToList().GroupBy(t => t.ClientId); - foreach (var marginItem in marginQueryGroup) + var trades = DbContext.trade.Where(t => (ConsTrade.PositionTradeStatusList.Contains(t.TradeStatus)) && clientIds.Contains(t.ClientId) && t.ValidState != "InValid" && t.TradeType == "收益互换").Select(s => new {s.id,s.ClientId }).ToList(); + var tradeIds = trades.Select(s=>s.id).ToList(); + var positions = DbContext.swap_position.Where(s => tradeIds.Contains(s.SwapTradeId) && !s.IsInitial && !s.Invalid).ToList(); + var queryGroup = trades.GroupBy(t => t.ClientId); + foreach (var item in queryGroup) { - var balance = _clientBalanceDic[marginItem.Key]; - var marginList = marginItem.Where(x => x.StructureType != "多空组合"&& ConsTrade.InterestMarginModels.Contains(x.Position.InterestMode)).Sum(s=>s.Position.InterestPrincipalFix * (s.Position.InterestDirection == 1 ? -1 : 1)); + var balance = _clientBalanceDic[item.Key]; + var clientTradeIds = item.Select(s => s.id).ToList(); + var clientPositions = positions.Where(x => clientTradeIds.Contains(x.SwapTradeId)).ToList(); + var marginList = clientPositions.Where(x =>ConsTrade.InterestMarginModels.Contains(x.InterestMode)).Sum(s=>s.InterestPrincipalFix * (s.InterestDirection == 1 ? -1 : 1)); balance.SwapMargin =Convert.ToDouble(marginList); - var positions= marginItem.Where(x => x.Position.PosiQuantity > 0); - balance.PositionCount= positions.Select(s=>s.Position.SwapTradeId).Distinct().Count(); - balance.PositionNotionalPrincipal = Convert.ToDouble(positions.Sum(s=>s.Position.PosiNotionalValue));//实时 + var floatPositions= positions.Where(x => x.PosiQuantity > 0); + balance.PositionCount= tradeIds.Count(); + balance.PositionNotionalPrincipal = Convert.ToDouble(positions.Sum(s=>s.PosiNotionalValue));//实时 } var eodSwapQuery = DbContext.eod_swap.Where(x => clientIds.Contains(x.ClientId) && x.ValueDate >= lastSettletDate && x.ValueDate <= startDate).GroupBy(x => x.SwapTradeId) .Select(g => g.OrderByDescending(x => x.ValueDate).FirstOrDefault()).ToList(); - var tradeIds = eodSwapQuery.Select(s => s.SwapTradeId).ToList(); - var trades = DbContext.trade.Where(t => (ConsTrade.TradeStatusAfterConfirmed.Contains(t.TradeStatus)) && tradeIds.Contains(t.id) && t.ValidState != "InValid" && startDate >= t.StartDate); - tradeIds = trades.Select(s => s.id).ToList(); - eodSwapQuery = eodSwapQuery.Where(x => tradeIds.Contains(x.SwapTradeId)).ToList(); - var eodSwapPositions = DbContext.eod_swap_position.Where(x => tradeIds.Contains(x.SwapTradeId) && x.ValueDate >= lastSettletDate && x.ValueDate <= startDate && x.PosiDirection > 0); + var eodTradeIds = eodSwapQuery.Select(s => s.SwapTradeId).ToList(); + var eodTrades = DbContext.trade.Where(t => (ConsTrade.TradeStatusAfterConfirmed.Contains(t.TradeStatus)) && tradeIds.Contains(t.id) && t.ValidState != "InValid" && startDate >= t.StartDate); + eodTradeIds = eodTrades.Select(s => s.id).ToList(); + eodSwapQuery = eodSwapQuery.Where(x => eodTradeIds.Contains(x.SwapTradeId)).ToList(); + var eodSwapPositions = DbContext.eod_swap_position.Where(x => eodTradeIds.Contains(x.SwapTradeId) && x.ValueDate >= lastSettletDate && x.ValueDate <= startDate && x.PosiDirection > 0); var eodSwaps = eodSwapQuery.GroupBy(g => g.ClientId).ToList(); foreach (var data in eodSwaps) {