From 684f961ec5b477d3bb8a202b6043122379ff358f Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 29 Oct 2023 10:13:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=99=9A=E4=B8=8A=E4=BA=A7=E5=93=81360?= =?UTF-8?q?=E5=88=86=E6=9E=90=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SiNan.Business/GOIBusiness.cs | 196 +++++++----------- ...ct360PopularizeAnalysisCampaginRepsonse.cs | 8 +- 2 files changed, 83 insertions(+), 121 deletions(-) diff --git a/SiNan.Business/GOIBusiness.cs b/SiNan.Business/GOIBusiness.cs index 1f71cf2..1dab56c 100644 --- a/SiNan.Business/GOIBusiness.cs +++ b/SiNan.Business/GOIBusiness.cs @@ -95,7 +95,7 @@ namespace SiNan.Business return list; } - public IList CalculationCampaignLevelGOI(IList campaignIdList, DateTime startDate, DateTime endDate) + public IList CalculationCampaignLevelGOI(IList campaignIdList, DateTime startDate, DateTime endDate) { var costs = fsql.Select().Where(x => campaignIdList.Contains(x.CampaignId.Value) && x.Date >= startDate && @@ -130,31 +130,13 @@ namespace SiNan.Business return list; } - public IList CalculationAdGroupLevelGOI(IList adGroupIdList, DateTime startDate, DateTime endDate) + public IList CalculationAdGroupLevelGOI(IList adGroupIdList, DateTime startDate, DateTime endDate) { - var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); - DateTime? _7dEndDate = null; - DateTime? _7dStartDate = null; - DateTime? _7dEndTime = null; - DateTime? _30dEndDate = null; - DateTime? _30dStartDate = null; - DateTime? _30dEndTime = null; - if (!gOIRequest.OnlyCustomDate) - { - _7dEndDate = DateTime.Now.Date.AddDays(-1); - _7dStartDate = _7dEndDate.Value.AddDays(-6); - _7dEndTime = _7dEndDate.Value.AddDays(1).AddSeconds(-1); - _30dEndDate = DateTime.Now.Date.AddDays(-1); - _30dStartDate = _30dEndDate.Value.AddDays(-29); - _30dEndTime = _30dEndDate.Value.AddDays(1).AddSeconds(-1); - } - - - var _7dAdGroupCosts = gOIRequest.OnlyCustomDate ? null : fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdGroupId.Value) && - x.Date >= _7dStartDate && - x.Date <= _7dEndDate) + var costs = fsql.Select().Where(x => adGroupIdList.Contains(x.AdGroupId.Value) && + x.Date >= startDate && + x.Date <= endDate) .GroupBy(x => x.AdGroupId) .ToList(g => new { @@ -162,92 +144,26 @@ namespace SiNan.Business AdGroupId = g.Key }); - var _7dAdGroupProfits = gOIRequest.OnlyCustomDate ? null : fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) - .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) - .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdGroupId.Value) && - jr.CookieTime >= _7dStartDate && - jr.CookieTime <= _7dEndTime && - o.OrderState != Enums.OrderState.已取消) - .GroupBy((jr, oc, o) => jr.AdGroupId) - .ToList(g => new - { - AdGroupId = g.Key, - Profit = g.Sum(g.Value.Item2.Profit) - }); - - var _30dAdGroupCosts = gOIRequest.OnlyCustomDate ? null : fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdGroupId.Value) && - x.Date >= _30dStartDate && - x.Date <= _30dEndDate) - .GroupBy(x => x.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Cost), - AdGroupId = g.Key - }); - - var _30dAdGroupProfits = gOIRequest.OnlyCustomDate ? null : fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) - .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) - .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdGroupId.Value) && - jr.CookieTime >= _30dStartDate && - jr.CookieTime <= _30dEndTime && - o.OrderState != Enums.OrderState.已取消) - .GroupBy((jr, oc, o) => jr.AdGroupId) - .ToList(g => new - { - AdGroupId = g.Key, - Profit = g.Sum(g.Value.Item2.Profit) - }); - - var customDaysAdGroupCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdGroupId.Value) && - x.Date >= gOIRequest.StartDate && - x.Date <= gOIRequest.EndDate) - .GroupBy(x => x.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Cost), - AdGroupId = g.Key - }); - - var customDaysAdGroupProfits = fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) - .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) - .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdGroupId.Value) && - jr.CookieTime >= gOIRequest.StartDate && - jr.CookieTime <= customEndTime && - o.OrderState != Enums.OrderState.已取消) - .GroupBy((jr, oc, o) => jr.AdGroupId) - .ToList(g => new - { - AdGroupId = g.Key, - Profit = g.Sum(g.Value.Item2.Profit) - }); - - var totalAdGroupCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdGroupId.Value)) - .GroupBy(x => x.AdGroupId) - .ToList(g => new - { - Cost = g.Sum(g.Value.Cost), - AdGroupId = g.Key - }); - - var list = new List(); - foreach (var levelId in gOIRequest.LevelIdList) - { - var goiResponse = new JDMultiLevelGOIResponse() - { - LevelId = levelId, - BusinessType = gOIRequest.BusinessType - }; - goiResponse._7GOI.Cost = _7dAdGroupCosts == null ? 0 : (_7dAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M); - goiResponse._7GOI.Profit = _7dAdGroupProfits == null ? 0 : (_7dAdGroupProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M); - - goiResponse._30GOI.Cost = _30dAdGroupCosts == null ? 0 : (_30dAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M); - goiResponse._30GOI.Profit = _30dAdGroupProfits == null ? 0 : (_30dAdGroupProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M); - - goiResponse.CustomDaysGOI.Cost = customDaysAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; - goiResponse.CustomDaysGOI.Profit = customDaysAdGroupProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; + var profits = fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) + .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) + .Where((jr, oc, o) => adGroupIdList.Contains(jr.AdGroupId.Value) && + jr.CookieTime >= startDate && + jr.CookieTime <= endDate && + o.OrderState != Enums.OrderState.已取消) + .GroupBy((jr, oc, o) => jr.AdGroupId) + .ToList(g => new + { + AdGroupId = g.Key, + Profit = g.Sum(g.Value.Item2.Profit) + }); - goiResponse.TotalCost = totalAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; - list.Add(goiResponse); + IList list = new List(); + foreach (var adGroupId in adGroupIdList) + { + var cost = costs.FirstOrDefault(x => x.AdGroupId == adGroupId)?.Cost ?? 0M; + var profit = profits.FirstOrDefault(x => x.AdGroupId == adGroupId)?.Profit ?? 0M; + var skugoi = new GOIByLevel() { LevelId = adGroupId, Cost = cost, Profit = profit }; + list.Add(skugoi); } return list; } @@ -379,6 +295,12 @@ namespace SiNan.Business throw new BusinessException("缺少sku"); List list = new List(); + var startDate_Recent7day = DateTime.Now.Date.AddDays(-7); + var endDate_Recent7day = DateTime.Now.Date.AddSeconds(-1); + + var startDate_Recent30day = DateTime.Now.Date.AddDays(-30); + var endDate_Recent30day = DateTime.Now.Date.AddSeconds(-1); + var popularizeAdSkuSourceList = fsql.Select() .Where(x => x.ShopId == request.ShopId) .Where(x => x.Date >= request.StartDate && x.Date <= request.EndDate) @@ -386,16 +308,40 @@ namespace SiNan.Business .WhereIf(request.SkuIdList.Count() > 1, x => request.SkuIdList.Contains(x.Sku)) .ToList(); - #region 处理所有计划的GOI + var kuaicheCampaignSourceList = popularizeAdSkuSourceList.Where(x => x.BusinessType == 2).ToList(); + var jstCampaignSourceList = popularizeAdSkuSourceList.Where(x => x.BusinessType == 134217728).ToList(); + var allCampaignIdList = popularizeAdSkuSourceList.Select(x => x.CampaignId).Distinct().ToList(); + var kuaicheCampaignIdList = kuaicheCampaignSourceList.Select(x => x.CampaignId).Distinct().ToList(); + var jstCampaignIdList = jstCampaignSourceList.Select(x => x.CampaignId).Distinct().ToList(); + #region 处理所有计划的GOI + var recent7DayCampaignGOIList = CalculationCampaignLevelGOI(allCampaignIdList, startDate_Recent7day, endDate_Recent7day); + var recent30DayCampaignGOIList = CalculationCampaignLevelGOI(allCampaignIdList, startDate_Recent30day, endDate_Recent30day); #endregion - var kuaicheCampaignSourceList = popularizeAdSkuSourceList.Where(x => x.BusinessType == 2).ToList(); - var jstCampaignSourceList = popularizeAdSkuSourceList.Where(x => x.BusinessType == 134217728).ToList(); - #region 处理快车 + #region 处理快车GOI + foreach (var campaignId in kuaicheCampaignIdList) + { + var campaign = new Product360PopularizeAnalysisCampaginRepsonse() + { + CampaignId = campaignId.Value, + BusinessType = 2, + CampaignGOI_Recent7Day = recent7DayCampaignGOIList.FirstOrDefault(x => x.LevelId == campaignId), + CampaignGOI_Recent30Day = recent30DayCampaignGOIList.FirstOrDefault(x => x.LevelId == campaignId) + }; + list.Add(campaign); + } + #endregion + + #region 处理单元GOI + var kuaicheAdGroupIdList = popularizeAdSkuSourceList.Where(x => x.BusinessType == 2).Select(x => x.AdGroupId).Distinct().ToList(); + var recent7DayAdGroupGOIList = CalculationAdGroupLevelGOI(kuaicheAdGroupIdList, startDate_Recent7day, endDate_Recent7day); + var recent30DayAdGroupGOIList = CalculationAdGroupLevelGOI(kuaicheAdGroupIdList, startDate_Recent30day, endDate_Recent30day); + #endregion + #region 处理单元统计 var adGroupStatisticsList = kuaicheCampaignSourceList.GroupBy(x => x.AdGroupId); var adGroupIdList = adGroupStatisticsList.Select(x => x.Key).ToList(); @@ -414,7 +360,9 @@ namespace SiNan.Business Clicks = adGroupStatistics.Sum(x => x.Clicks), Cost = adGroupStatistics.Sum(x => x.Cost), Impressions = adGroupStatistics.Sum(x => x.Impressions), - OrderCnt = adGroupStatistics.Sum(x => x.TotalOrderCnt) + OrderCnt = adGroupStatistics.Sum(x => x.TotalOrderCnt), + AdGroupGOI_Recent7Day = recent7DayAdGroupGOIList.FirstOrDefault(x => x.LevelId == adGroupId), + AdGroupGOI_Recent30Day = recent30DayAdGroupGOIList.FirstOrDefault(x => x.LevelId == adGroupId) }; allAdGroupList.Add(adGroup); var campagin = list.FirstOrDefault(x => x.CampaignId == adGroup.CampaignId); @@ -423,15 +371,29 @@ namespace SiNan.Business } #endregion - #region 处理单元GOI - #endregion + #region 处理京速推 + #region 处理京速推GOI和统计 + var jstCampaignStatisticsList = jstCampaignSourceList.GroupBy(x => x.CampaignId); + foreach (var jstCampaignStatistics in jstCampaignStatisticsList) + { + var campaignId = jstCampaignStatistics.Key; + var jstCampaign = new Product360PopularizeAnalysisCampaginRepsonse() + { + CampaignId = campaignId.Value, + BusinessType = 134217728, + CampaignGOI_Recent7Day = recent7DayCampaignGOIList.FirstOrDefault(x => x.LevelId == campaignId), + CampaignGOI_Recent30Day = recent30DayCampaignGOIList.FirstOrDefault(x => x.LevelId == campaignId), + Clicks = jstCampaignStatistics.Sum(x => x.Clicks), + Cost = jstCampaignStatistics.Sum(x => x.Cost), + Impressions = jstCampaignStatistics.Sum(x => x.Impressions), + OrderCnt = jstCampaignStatistics.Sum(x => x.TotalOrderCnt) + }; + } #endregion - #region 处理京速推 - #endregion return new ListResponse() diff --git a/SiNan.Model/Dto/Response/GOI/Product360PopularizeAnalysisCampaginRepsonse.cs b/SiNan.Model/Dto/Response/GOI/Product360PopularizeAnalysisCampaginRepsonse.cs index 0a91074..f93017f 100644 --- a/SiNan.Model/Dto/Response/GOI/Product360PopularizeAnalysisCampaginRepsonse.cs +++ b/SiNan.Model/Dto/Response/GOI/Product360PopularizeAnalysisCampaginRepsonse.cs @@ -40,22 +40,22 @@ /// /// 花费 /// - public decimal Cost { get; set; } + public decimal? Cost { get; set; } /// /// 订单行 /// - public int OrderCnt { get; set; } + public int? OrderCnt { get; set; } /// /// 展现次数 /// - public int Impressions { get; set; } + public int? Impressions { get; set; } /// /// 点击次数 /// - public int Clicks { get; set; } + public int? Clicks { get; set; } /// /// 单元列表 (仅BusinessType=2时具备该列表)