From 136b399027dcccc98604cad42449a9ab42cbb5c9 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 25 Nov 2022 05:21:33 +0800 Subject: [PATCH] 1 --- .../JD/JDStockNumWarningBusiness.cs | 10 + .../JDReportFormStatisticsBusiness.cs | 807 +++++++++--------- 2 files changed, 411 insertions(+), 406 deletions(-) diff --git a/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs b/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs index a1ef175c..7effe9a3 100644 --- a/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs +++ b/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs @@ -93,14 +93,20 @@ namespace BBWY.Server.Business //第一周期销量 var firstCycleSaleList = skuSaleDailyList.Where(s => s.Sku == sku && s.Date >= firstCycleStartDate && s.Date <= firstCycleEndDate); var firstCycleItemTotal = firstCycleSaleList.Count() > 0 ? firstCycleSaleList.Sum(s => s.ItemTotal - s.CancelItemTotal) : 0; + if (firstCycleItemTotal < 0) + firstCycleItemTotal = 0; //第二周期销量 var secondCycleSaleList = skuSaleDailyList.Where(s => s.Sku == sku && s.Date >= secondCycleStartDate && s.Date <= secondCycleEndDate); var secondCycleItemTotal = secondCycleSaleList.Count() > 0 ? secondCycleSaleList.Sum(s => s.ItemTotal - s.CancelItemTotal) : 0; + if (secondCycleItemTotal < 0) + secondCycleItemTotal = 0; //第三周期销量 var thirdCycleSaleList = skuSaleDailyList.Where(s => s.Sku == sku && s.Date >= thirdCycleStartDate && s.Date <= thirdCycleEndDate); var thirdCycleItemTotal = thirdCycleSaleList.Count() > 0 ? thirdCycleSaleList.Sum(s => s.ItemTotal - s.CancelItemTotal) : 0; + if (thirdCycleItemTotal < 0) + thirdCycleItemTotal = 0; //计算周期增幅 var _2Ratio = firstCycleItemTotal == 0 ? 0 : 1.0 * secondCycleItemTotal / firstCycleItemTotal - 1; @@ -110,7 +116,11 @@ namespace BBWY.Server.Business var _7dSaleList = skuSaleDailyList.Where(s => s.Sku == sku && s.Date >= _7dAvgStartDate && s.Date <= yesterDayDate); var _15dSaleList = skuSaleDailyList.Where(s => s.Sku == sku); var _7dItemTotal = _7dSaleList.Sum(s => s.ItemTotal - s.CancelItemTotal); + if (_7dItemTotal < 0) + _7dItemTotal = 0; var _15dItemTotal = _15dSaleList.Sum(s => s.ItemTotal - s.CancelItemTotal); //近15天销量 + if (_15dItemTotal < 0) + _15dItemTotal = 0; var _7dAvgItemTotal = 1.0 * _7dItemTotal / 7; //近7天日均销量 diff --git a/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs b/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs index a40886ea..e274dee8 100644 --- a/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs +++ b/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs @@ -460,89 +460,83 @@ namespace BBWY.Server.Business.Statistics var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + var campaignList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.CampaignId.Value)) + .GroupBy(s => new { s.CampaignId, s.Sku }) + .ToList(g => new { g.Key.CampaignId, g.Key.Sku }); - var _7dCampaignCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && - jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) - .GroupBy((jas1, jas2) => jas1.CampaignId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - CampaignId = g.Key - }); + var skuIds = campaignList.Select(campaign => campaign.Sku).Distinct().ToList(); - var _7dCampaignProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.CampaignId.Value) && - ocd.IsEnabled && - ocd.CreateTime >= _7dStartDate && - ocd.CreateTime <= _7dEndTime) - .GroupBy((jas, ocd) => jas.CampaignId) - .ToList(g => new - { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - CampaignId = g.Key - }); - - var _30dCampaignCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && - jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) - .GroupBy((jas1, jas2) => jas1.CampaignId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - CampaignId = g.Key - }); - - var _30dCampaignProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.CampaignId.Value) && - ocd.IsEnabled && - ocd.CreateTime >= _30dStartDate && - ocd.CreateTime <= _30dEndTime) - .GroupBy((jas, ocd) => jas.CampaignId) - .ToList(g => new - { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - CampaignId = g.Key - }); - - var _customCampaignCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && - jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) - .GroupBy((jas1, jas2) => jas1.CampaignId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - CampaignId = g.Key - }); - - var _customCampaignProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.CampaignId.Value) && - ocd.IsEnabled && - ocd.CreateTime >= gOIRequest.StartDate && - ocd.CreateTime <= customEndTime) - .GroupBy((jas, ocd) => jas.CampaignId) - .ToList(g => new - { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - CampaignId = g.Key - }); - - var _totalCampaignCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value)) - .GroupBy((jas1, jas2) => jas1.CampaignId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - CampaignId = g.Key - }); + var _7dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); + + var _7dProfits = fsql.Select() + .Where(ocd => skuIds.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= _7dStartDate && + ocd.CreateTime <= _7dEndTime) + .GroupBy(ocd => ocd.SkuId) + .ToList(g => new + { + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key + }); + var _30dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); + + var _30dProfits = fsql.Select() + .Where(ocd => skuIds.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= _30dStartDate && + ocd.CreateTime <= _30dEndTime) + .GroupBy(ocd => ocd.SkuId) + .ToList(g => new + { + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key + }); + + var _customCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); + + var _customProfits = fsql.Select() + .Where(ocd => skuIds.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= gOIRequest.StartDate && + ocd.CreateTime <= customEndTime) + .GroupBy(ocd => ocd.SkuId) + .ToList(g => new + { + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key + }); + + var _totalCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku)) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) @@ -551,16 +545,19 @@ namespace BBWY.Server.Business.Statistics { LevelId = levelId }; - goiResponse._7GOI.Cost = _7dCampaignCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; - goiResponse._7GOI.Profit = _7dCampaignProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; - goiResponse._30GOI.Cost = _30dCampaignCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; - goiResponse._30GOI.Profit = _30dCampaignProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; + var currentLevelIdSkuIds = campaignList.Where(campaign => campaign.CampaignId == levelId).Select(campaign => campaign.Sku).Distinct().ToList(); + + goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; + goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Profit ?? 0M; + + goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; + goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Profit ?? 0M; - goiResponse.CustomDaysGOI.Cost = _customCampaignCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; - goiResponse.CustomDaysGOI.Profit = _customCampaignProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Profit ?? 0M; - goiResponse.TotalCost = _totalCampaignCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; + goiResponse.TotalCost = _totalCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; list.Add(goiResponse); } return list; @@ -578,88 +575,83 @@ namespace BBWY.Server.Business.Statistics var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + var adGroupList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.AdGroupId.Value)) + .GroupBy(s => new { s.AdGroupId, s.Sku }) + .ToList(g => new { g.Key.AdGroupId, g.Key.Sku }); - var _7dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && - jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) - .GroupBy((jas1, jas2) => jas1.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdGroupId = g.Key - }); + var skuIds = adGroupList.Select(adGroup => adGroup.Sku).Distinct().ToList(); - var _7dProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.AdGroupId.Value) && - ocd.IsEnabled && - ocd.CreateTime >= _7dStartDate && - ocd.CreateTime <= _7dEndTime) - .GroupBy((jas, ocd) => jas.AdGroupId) - .ToList(g => new - { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - AdGroupId = g.Key - }); + var _7dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); + + var _7dProfits = fsql.Select() + .Where(ocd => skuIds.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= _7dStartDate && + ocd.CreateTime <= _7dEndTime) + .GroupBy(ocd => ocd.SkuId) + .ToList(g => new + { + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key + }); - var _30dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && - jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) - .GroupBy((jas1, jas2) => jas1.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdGroupId = g.Key - }); - - var _30dProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.AdGroupId.Value) && - ocd.IsEnabled && - ocd.CreateTime >= _30dStartDate && - ocd.CreateTime <= _30dEndTime) - .GroupBy((jas, ocd) => jas.AdGroupId) - .ToList(g => new - { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - AdGroupId = g.Key - }); + var _30dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); + + var _30dProfits = fsql.Select() + .Where(ocd => skuIds.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= _30dStartDate && + ocd.CreateTime <= _30dEndTime) + .GroupBy(ocd => ocd.SkuId) + .ToList(g => new + { + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key + }); - var _customCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && - jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) - .GroupBy((jas1, jas2) => jas1.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdGroupId = g.Key - }); - - var _customProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.AdGroupId.Value) && - ocd.IsEnabled && - ocd.CreateTime >= gOIRequest.StartDate && - ocd.CreateTime <= customEndTime) - .GroupBy((jas, ocd) => jas.AdGroupId) + var _customCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) + .GroupBy(jas => jas.Sku) .ToList(g => new { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - AdGroupId = g.Key + Cost = g.Sum(g.Value.Cost), + Sku = g.Key }); - var _totalAdGroupCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value)) - .GroupBy((jas1, jas2) => jas1.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdGroupId = g.Key - }); + var _customProfits = fsql.Select() + .Where(ocd => skuIds.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= gOIRequest.StartDate && + ocd.CreateTime <= customEndTime) + .GroupBy(ocd => ocd.SkuId) + .ToList(g => new + { + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key + }); + + var _totalCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku)) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) @@ -668,15 +660,19 @@ namespace BBWY.Server.Business.Statistics { LevelId = levelId }; - goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; - goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; - goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; - goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; + var currentLevelIdSkuIds = adGroupList.Where(adGroup => adGroup.AdGroupId == levelId).Select(adGroup => adGroup.Sku).Distinct().ToList(); - goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; - goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; - goiResponse.TotalCost = _totalAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; + goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; + goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Profit ?? 0M; + + goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; + goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Profit ?? 0M; + + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Profit ?? 0M; + + goiResponse.TotalCost = _totalCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; list.Add(goiResponse); } return list; @@ -694,88 +690,83 @@ namespace BBWY.Server.Business.Statistics var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + var adList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.AdId.Value)) + .GroupBy(s => new { s.AdId, s.Sku }) + .ToList(g => new { g.Key.AdId, g.Key.Sku }); - var _7dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && - jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) - .GroupBy((jas1, jas2) => jas1.AdId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdId = g.Key - }); - - var _7dProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.AdId.Value) && - ocd.IsEnabled && - ocd.CreateTime >= _7dStartDate && - ocd.CreateTime <= _7dEndTime) - .GroupBy((jas, ocd) => jas.AdId) - .ToList(g => new - { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - AdId = g.Key - }); + var skuIds = adList.Select(ad => ad.Sku).Distinct().ToList(); - var _30dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && - jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) - .GroupBy((jas1, jas2) => jas1.AdId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdId = g.Key - }); + var _7dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); + + var _7dProfits = fsql.Select() + .Where(ocd => skuIds.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= _7dStartDate && + ocd.CreateTime <= _7dEndTime) + .GroupBy(ocd => ocd.SkuId) + .ToList(g => new + { + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key + }); - var _30dProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.AdId.Value) && - ocd.IsEnabled && - ocd.CreateTime >= _30dStartDate && - ocd.CreateTime <= _30dEndTime) - .GroupBy((jas, ocd) => jas.AdId) + var _30dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); + + var _30dProfits = fsql.Select() + .Where(ocd => skuIds.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= _30dStartDate && + ocd.CreateTime <= _30dEndTime) + .GroupBy(ocd => ocd.SkuId) .ToList(g => new { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - AdId = g.Key + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key }); - var _customCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && - jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) - .GroupBy((jas1, jas2) => jas1.AdId) + var _customCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) + .GroupBy(jas => jas.Sku) .ToList(g => new { - Cost = g.Sum(g.Value.Item2.Cost), - AdId = g.Key + Cost = g.Sum(g.Value.Cost), + Sku = g.Key }); - var _customProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.AdId.Value) && + var _customProfits = fsql.Select() + .Where(ocd => skuIds.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= gOIRequest.StartDate && ocd.CreateTime <= customEndTime) - .GroupBy((jas, ocd) => jas.AdId) + .GroupBy(ocd => ocd.SkuId) .ToList(g => new { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - AdId = g.Key + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key }); - var totalAdCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value)) - .GroupBy((jas1, jas2) => jas1.AdId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdId = g.Key - }); + var _totalCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku)) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) @@ -784,16 +775,19 @@ namespace BBWY.Server.Business.Statistics { LevelId = levelId }; - goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; - goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => x.AdId == levelId)?.Profit ?? 0M; - goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; - goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => x.AdId == levelId)?.Profit ?? 0M; + var currentLevelIdSkuIds = adList.Where(ad => ad.AdId == levelId).Select(ad => ad.Sku).Distinct().ToList(); - goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; - goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.AdId == levelId)?.Profit ?? 0M; + goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; + goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Profit ?? 0M; - goiResponse.TotalCost = totalAdCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; + goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; + goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Profit ?? 0M; + + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Profit ?? 0M; + + goiResponse.TotalCost = _totalCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; list.Add(goiResponse); } return list; @@ -822,18 +816,17 @@ namespace BBWY.Server.Business.Statistics Sku = g.Key }); - var _7dProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.Sku) && - ocd.IsEnabled && - ocd.CreateTime >= _7dStartDate && - ocd.CreateTime <= _7dEndTime) - .GroupBy((jas, ocd) => jas.Sku) - .ToList(g => new - { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - Sku = g.Key - }); + var _7dProfits = fsql.Select() + .Where(ocd => gOIRequest.LevelIdList.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= _7dStartDate && + ocd.CreateTime <= _7dEndTime) + .GroupBy(ocd => ocd.SkuId) + .ToList(g => new + { + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key + }); var _30dCosts = fsql.Select() .Where(jas => gOIRequest.LevelIdList.Contains(jas.Sku) && @@ -845,18 +838,17 @@ namespace BBWY.Server.Business.Statistics Sku = g.Key }); - var _30dProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.Sku) && - ocd.IsEnabled && - ocd.CreateTime >= _30dStartDate && - ocd.CreateTime <= _30dEndTime) - .GroupBy((jas, ocd) => jas.Sku) - .ToList(g => new - { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), - Sku = g.Key - }); + var _30dProfits = fsql.Select() + .Where(ocd => gOIRequest.LevelIdList.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= _30dStartDate && + ocd.CreateTime <= _30dEndTime) + .GroupBy(ocd => ocd.SkuId) + .ToList(g => new + { + Profit = g.Sum(g.Value.SkuGrossProfit), + Sku = g.Key + }); var _customCosts = fsql.Select() .Where(jas => gOIRequest.LevelIdList.Contains(jas.Sku) && @@ -868,16 +860,15 @@ namespace BBWY.Server.Business.Statistics Sku = g.Key }); - var _customProfits = fsql.Select() - .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) - .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.Sku) && - ocd.IsEnabled && - ocd.CreateTime >= gOIRequest.StartDate && - ocd.CreateTime <= customEndTime) - .GroupBy((jas, ocd) => jas.Sku) + var _customProfits = fsql.Select() + .Where(ocd => gOIRequest.LevelIdList.Contains(ocd.SkuId) && + ocd.IsEnabled && + ocd.CreateTime >= gOIRequest.StartDate && + ocd.CreateTime <= customEndTime) + .GroupBy(ocd => ocd.SkuId) .ToList(g => new { - Profit = g.Sum(g.Value.Item2.SkuGrossProfit), + Profit = g.Sum(g.Value.SkuGrossProfit), Sku = g.Key }); @@ -925,23 +916,26 @@ namespace BBWY.Server.Business.Statistics var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + var campaignList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.CampaignId.Value)) + .GroupBy(s => new { s.CampaignId, s.Sku }) + .ToList(g => new { g.Key.CampaignId, g.Key.Sku }); - var _7dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && - jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) - .GroupBy((jas1, jas2) => jas1.CampaignId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - CampaignId = g.Key - }); + var skuIds = campaignList.Select(campaign => campaign.Sku).Distinct().ToList(); + + var _7dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var _7dProfits = fsql.Select() .InnerJoin((jad, jr, ocd) => jad.Sku == jr.PopularizeSku) .InnerJoin((jad, jr, ocd) => jr.OrderId == ocd.OrderId) .Where((jad, jr, ocd) => gOIRequest.LevelIdList.Contains(jad.CampaignId.Value) && - jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndDate && + jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && ocd.IsEnabled == true) .GroupBy((jad, jr, ocd) => jad.CampaignId) .ToList(g => new @@ -950,22 +944,20 @@ namespace BBWY.Server.Business.Statistics CampaignId = g.Key }); - var _30dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && - jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) - .GroupBy((jas1, jas2) => jas1.CampaignId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - CampaignId = g.Key - }); + var _30dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var _30dProfits = fsql.Select() .InnerJoin((jad, jr, ocd) => jad.Sku == jr.PopularizeSku) .InnerJoin((jad, jr, ocd) => jr.OrderId == ocd.OrderId) .Where((jad, jr, ocd) => gOIRequest.LevelIdList.Contains(jad.CampaignId.Value) && - jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndDate && + jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && ocd.IsEnabled == true) .GroupBy((jad, jr, ocd) => jad.CampaignId) .ToList(g => new @@ -974,16 +966,14 @@ namespace BBWY.Server.Business.Statistics CampaignId = g.Key }); - var _customCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && - jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) - .GroupBy((jas1, jas2) => jas1.CampaignId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - CampaignId = g.Key - }); + var _customCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var _customProfits = fsql.Select() .InnerJoin((jad, jr, ocd) => jad.Sku == jr.PopularizeSku) @@ -998,15 +988,14 @@ namespace BBWY.Server.Business.Statistics CampaignId = g.Key }); - var _totalCampaignCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value)) - .GroupBy((jas1, jas2) => jas1.CampaignId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - CampaignId = g.Key - }); + var _totalCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku)) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) @@ -1015,16 +1004,19 @@ namespace BBWY.Server.Business.Statistics { LevelId = levelId }; - goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; + + var currentLevelIdSkuIds = campaignList.Where(campaign => campaign.CampaignId == levelId).Select(campaign => campaign.Sku).Distinct().ToList(); + + goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; - goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; + goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; - goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; - goiResponse.TotalCost = _totalCampaignCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; + goiResponse.TotalCost = _totalCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; list.Add(goiResponse); } return list; @@ -1042,23 +1034,26 @@ namespace BBWY.Server.Business.Statistics var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + var adGroupList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.AdGroupId.Value)) + .GroupBy(s => new { s.AdGroupId, s.Sku }) + .ToList(g => new { g.Key.AdGroupId, g.Key.Sku }); - var _7dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && - jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) - .GroupBy((jas1, jas2) => jas1.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdGroupId = g.Key - }); + var skuIds = adGroupList.Select(adGroup => adGroup.Sku).Distinct().ToList(); + + var _7dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var _7dProfits = fsql.Select() .InnerJoin((jad, jr, ocd) => jad.Sku == jr.PopularizeSku) .InnerJoin((jad, jr, ocd) => jr.OrderId == ocd.OrderId) .Where((jad, jr, ocd) => gOIRequest.LevelIdList.Contains(jad.AdGroupId.Value) && - jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndDate && + jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && ocd.IsEnabled == true) .GroupBy((jad, jr, ocd) => jad.AdGroupId) .ToList(g => new @@ -1067,22 +1062,20 @@ namespace BBWY.Server.Business.Statistics AdGroupId = g.Key }); - var _30dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && - jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) - .GroupBy((jas1, jas2) => jas1.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdGroupId = g.Key - }); + var _30dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var _30dProfits = fsql.Select() .InnerJoin((jad, jr, ocd) => jad.Sku == jr.PopularizeSku) .InnerJoin((jad, jr, ocd) => jr.OrderId == ocd.OrderId) .Where((jad, jr, ocd) => gOIRequest.LevelIdList.Contains(jad.AdGroupId.Value) && - jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndDate && + jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && ocd.IsEnabled == true) .GroupBy((jad, jr, ocd) => jad.AdGroupId) .ToList(g => new @@ -1091,16 +1084,14 @@ namespace BBWY.Server.Business.Statistics AdGroupId = g.Key }); - var _customCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && - jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) - .GroupBy((jas1, jas2) => jas1.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdGroupId = g.Key - }); + var _customCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var _customProfits = fsql.Select() .InnerJoin((jad, jr, ocd) => jad.Sku == jr.PopularizeSku) @@ -1115,15 +1106,14 @@ namespace BBWY.Server.Business.Statistics AdGroupId = g.Key }); - var _taotalAdGroupCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value)) - .GroupBy((jas1, jas2) => jas1.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdGroupId = g.Key - }); + var _totalCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku)) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) @@ -1132,16 +1122,19 @@ namespace BBWY.Server.Business.Statistics { LevelId = levelId }; - goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; + + var currentLevelIdSkuIds = adGroupList.Where(adGroup => adGroup.AdGroupId == levelId).Select(adGroup => adGroup.Sku).Distinct().ToList(); + + goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; - goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; + goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; - goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; - goiResponse.TotalCost = _taotalAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; + goiResponse.TotalCost = _totalCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; list.Add(goiResponse); } return list; @@ -1159,22 +1152,26 @@ namespace BBWY.Server.Business.Statistics var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); - var _7dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && - jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) - .GroupBy((jas1, jas2) => jas1.AdId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdId = g.Key - }); + var adList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.AdId.Value)) + .GroupBy(s => new { s.AdId, s.Sku }) + .ToList(g => new { g.Key.AdId, g.Key.Sku }); + + var skuIds = adList.Select(ad => ad.Sku).Distinct().ToList(); + + var _7dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var _7dProfits = fsql.Select() .InnerJoin((jad, jr, ocd) => jad.Sku == jr.PopularizeSku) .InnerJoin((jad, jr, ocd) => jr.OrderId == ocd.OrderId) .Where((jad, jr, ocd) => gOIRequest.LevelIdList.Contains(jad.AdId.Value) && - jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndDate && + jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && ocd.IsEnabled == true) .GroupBy((jad, jr, ocd) => jad.AdId) .ToList(g => new @@ -1183,22 +1180,20 @@ namespace BBWY.Server.Business.Statistics AdId = g.Key }); - var _30dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && - jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) - .GroupBy((jas1, jas2) => jas1.AdId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdId = g.Key - }); + var _30dCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var _30dProfits = fsql.Select() .InnerJoin((jad, jr, ocd) => jad.Sku == jr.PopularizeSku) .InnerJoin((jad, jr, ocd) => jr.OrderId == ocd.OrderId) .Where((jad, jr, ocd) => gOIRequest.LevelIdList.Contains(jad.AdId.Value) && - jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndDate && + jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && ocd.IsEnabled == true) .GroupBy((jad, jr, ocd) => jad.AdId) .ToList(g => new @@ -1207,16 +1202,14 @@ namespace BBWY.Server.Business.Statistics AdId = g.Key }); - var _customCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && - jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) - .GroupBy((jas1, jas2) => jas1.AdId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdId = g.Key - }); + var _customCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var _customProfits = fsql.Select() .InnerJoin((jad, jr, ocd) => jad.Sku == jr.PopularizeSku) @@ -1231,15 +1224,14 @@ namespace BBWY.Server.Business.Statistics AdId = g.Key }); - var _totalAdCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) - .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value)) - .GroupBy((jas1, jas2) => jas1.AdId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Item2.Cost), - AdId = g.Key - }); + var _totalCosts = fsql.Select() + .Where(jas => skuIds.Contains(jas.Sku)) + .GroupBy(jas => jas.Sku) + .ToList(g => new + { + Cost = g.Sum(g.Value.Cost), + Sku = g.Key + }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) @@ -1248,16 +1240,19 @@ namespace BBWY.Server.Business.Statistics { LevelId = levelId }; - goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; + + var currentLevelIdSkuIds = adList.Where(ad => ad.AdId == levelId).Select(ad => ad.Sku).Distinct().ToList(); + + goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => x.AdId == levelId)?.Profit ?? 0M; - goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; + goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => x.AdId == levelId)?.Profit ?? 0M; - goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.AdId == levelId)?.Profit ?? 0M; - goiResponse.TotalCost = _totalAdCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; + goiResponse.TotalCost = _totalCosts.FirstOrDefault(x => currentLevelIdSkuIds.Contains(x.Sku))?.Cost ?? 0M; list.Add(goiResponse); } return list;