diff --git a/BBWY.Server.API/Controllers/JDReportFormStatisticsController.cs b/BBWY.Server.API/Controllers/JDReportFormStatisticsController.cs index 50c18170..d7040c20 100644 --- a/BBWY.Server.API/Controllers/JDReportFormStatisticsController.cs +++ b/BBWY.Server.API/Controllers/JDReportFormStatisticsController.cs @@ -17,7 +17,7 @@ namespace BBWY.Server.API.Controllers } /// - /// 计划维度GOI计算,支持快车和京速推 + /// 计划维度GOI,支持快车和京速推 /// /// /// @@ -28,7 +28,29 @@ namespace BBWY.Server.API.Controllers } /// - /// 单元维度GOI计算,仅支持快车 + /// 计划维度商品GOI + /// + /// + /// + [HttpPost] + public IList CalculationCampaignLevelProductGOI([FromBody] GOIRequest gOIRequest) + { + return jDReportFormStatisticsBusiness.CalculationCampaignLevelProductGOI(gOIRequest); + } + + /// + /// 计划维度推广GOI + /// + /// + /// + [HttpPost] + public IList CalculationCampaignLevelPopularizeGOI([FromBody] GOIRequest gOIRequest) + { + return jDReportFormStatisticsBusiness.CalculationCampaignLevelPopularizeGOI(gOIRequest); + } + + /// + /// 单元维度GOI,仅支持快车 /// /// /// @@ -39,7 +61,29 @@ namespace BBWY.Server.API.Controllers } /// - /// 创意维度GOI计算,仅支持快车 + /// 单元维度商品GOI + /// + /// + /// + [HttpPost] + public IList CalculationAdGroupLevelProductGOI([FromBody] GOIRequest gOIRequest) + { + return jDReportFormStatisticsBusiness.CalculationAdGroupLevelProductGOI(gOIRequest); + } + + /// + /// 单元维度推广GOI + /// + /// + /// + [HttpPost] + public IList CalculationAdGroupLevelPopularizeGOI([FromBody] GOIRequest gOIRequest) + { + return jDReportFormStatisticsBusiness.CalculationAdGroupLevelPopularizeGOI(gOIRequest); + } + + /// + /// 创意维度GOI,仅支持快车 /// /// /// @@ -50,14 +94,57 @@ namespace BBWY.Server.API.Controllers } /// - /// SKU维度GOI计算,仅支持京速推 + /// 创意维度商品GOI /// /// /// [HttpPost] - public IList CalculationSkuLevelGOI(SkuGOIRequest gOIRequest) + public IList CalculationAdLevelProductGOI([FromBody] GOIRequest gOIRequest) + { + return jDReportFormStatisticsBusiness.CalculationAdLevelProductGOI(gOIRequest); + } + + /// + /// 创意维度推广GOI + /// + /// + /// + [HttpPost] + public IList CalculationAdLevelPopularizeGOI([FromBody] GOIRequest gOIRequest) + { + return jDReportFormStatisticsBusiness.CalculationAdLevelPopularizeGOI(gOIRequest); + } + + /// + /// SKU维度GOI,仅支持京速推 + /// + /// + /// + [HttpPost] + public IList CalculationSkuLevelGOI([FromBody] SkuGOIRequest gOIRequest) { return jDReportFormStatisticsBusiness.CalculationSkuLevelGOI(gOIRequest); } + + /// + /// SKU维度商品GOI + /// + /// + /// + [HttpPost] + public IList CalculationSkuLevelProductGOI([FromBody] SkuGOIRequest gOIRequest) + { + return jDReportFormStatisticsBusiness.CalculationSkuLevelProductGOI(gOIRequest); + } + + /// + /// SKU维度推广GOI + /// + /// + /// + public IList CalculationSkuLevelPopularizeGOI([FromBody] SkuGOIRequest gOIRequest) + { + return jDReportFormStatisticsBusiness.CalculationSkuLevelPopularizeGOI(gOIRequest); + } } } diff --git a/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs b/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs index 2da20eab..20389d8f 100644 --- a/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs +++ b/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs @@ -405,5 +405,840 @@ namespace BBWY.Server.Business.Statistics } return list; } + + public IList CalculationCampaignLevelProductGOI(GOIRequest gOIRequest) + { + var _7dEndDate = DateTime.Now.Date.AddDays(-1); + var _7dStartDate = _7dEndDate.AddDays(-6); + var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); + + var _30dEndDate = DateTime.Now.Date.AddDays(-1); + var _30dStartDate = _30dEndDate.AddDays(-29); + var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); + + var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + + + var _7dCampaignCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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 _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) + .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) + .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 list = new List(); + foreach (var levelId in gOIRequest.LevelIdList) + { + var goiResponse = new JDProductAndPopularizeLevelGOIResponse() + { + 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; + + goiResponse.CustomDaysGOI.Cost = _customCampaignCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customCampaignProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; + list.Add(goiResponse); + } + return list; + } + + public IList CalculationAdGroupLevelProductGOI(GOIRequest gOIRequest) + { + var _7dEndDate = DateTime.Now.Date.AddDays(-1); + var _7dStartDate = _7dEndDate.AddDays(-6); + var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); + + var _30dEndDate = DateTime.Now.Date.AddDays(-1); + var _30dStartDate = _30dEndDate.AddDays(-29); + var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); + + var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + + + var _7dCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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 _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 _30dCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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 _customCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item2.SkuGrossProfit), + AdGroupId = g.Key + }); + + var list = new List(); + foreach (var levelId in gOIRequest.LevelIdList) + { + var goiResponse = new JDProductAndPopularizeLevelGOIResponse() + { + 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; + + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; + list.Add(goiResponse); + } + return list; + } + + public IList CalculationAdLevelProductGOI(GOIRequest gOIRequest) + { + var _7dEndDate = DateTime.Now.Date.AddDays(-1); + var _7dStartDate = _7dEndDate.AddDays(-6); + var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); + + var _30dEndDate = DateTime.Now.Date.AddDays(-1); + var _30dStartDate = _30dEndDate.AddDays(-29); + var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); + + var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + + + var _7dCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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 _30dCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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 _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) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item2.SkuGrossProfit), + AdId = g.Key + }); + + var _customCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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 _customProfits = fsql.Select() + .InnerJoin((jas, ocd) => jas.Sku == ocd.SkuId) + .Where((jas, ocd) => gOIRequest.LevelIdList.Contains(jas.AdId.Value) && + ocd.IsEnabled && + ocd.CreateTime >= gOIRequest.StartDate && + ocd.CreateTime <= customEndTime) + .GroupBy((jas, ocd) => jas.AdId) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item2.SkuGrossProfit), + AdId = g.Key + }); + + var list = new List(); + foreach (var levelId in gOIRequest.LevelIdList) + { + var goiResponse = new JDProductAndPopularizeLevelGOIResponse() + { + 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; + + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.AdId == levelId)?.Profit ?? 0M; + list.Add(goiResponse); + } + return list; + } + + public IList CalculationSkuLevelProductGOI(SkuGOIRequest gOIRequest) + { + var _7dEndDate = DateTime.Now.Date.AddDays(-1); + var _7dStartDate = _7dEndDate.AddDays(-6); + var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); + + var _30dEndDate = DateTime.Now.Date.AddDays(-1); + var _30dStartDate = _30dEndDate.AddDays(-29); + var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); + + var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + + + var _7dCosts = fsql.Select() + .Where(jas => gOIRequest.LevelIdList.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((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 _30dCosts = fsql.Select() + .Where(jas => gOIRequest.LevelIdList.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((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 _customCosts = fsql.Select() + .Where(jas => gOIRequest.LevelIdList.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((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) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item2.SkuGrossProfit), + Sku = g.Key + }); + + var list = new List(); + foreach (var levelId in gOIRequest.LevelIdList) + { + var goiResponse = new JDSkuLevelProductAndPopularizeGOIResponse() + { + LevelId = levelId + }; + goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; + goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; + + goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; + goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; + + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; + list.Add(goiResponse); + } + return list; + } + + + public IList CalculationCampaignLevelPopularizeGOI(GOIRequest gOIRequest) + { + var _7dEndDate = DateTime.Now.Date.AddDays(-1); + var _7dStartDate = _7dEndDate.AddDays(-6); + var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); + + var _30dEndDate = DateTime.Now.Date.AddDays(-1); + var _30dStartDate = _30dEndDate.AddDays(-29); + var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); + + var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + + + var _7dCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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 _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 && + ocd.IsEnabled == true) + .GroupBy((jad, jr, ocd) => jad.CampaignId) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item3.SkuGrossProfit), + CampaignId = g.Key + }); + + var _30dCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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 _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 && + ocd.IsEnabled == true) + .GroupBy((jad, jr, ocd) => jad.CampaignId) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item3.SkuGrossProfit), + CampaignId = g.Key + }); + + var _customCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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 _customProfits = 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 >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && + ocd.IsEnabled == true) + .GroupBy((jad, jr, ocd) => jad.CampaignId) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item3.SkuGrossProfit), + CampaignId = g.Key + }); + + var list = new List(); + foreach (var levelId in gOIRequest.LevelIdList) + { + var goiResponse = new JDProductAndPopularizeLevelGOIResponse() + { + LevelId = levelId + }; + goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => x.CampaignId == levelId)?.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.Profit = _30dProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; + + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; + list.Add(goiResponse); + } + return list; + } + + public IList CalculationAdGroupLevelPopularizeGOI(GOIRequest gOIRequest) + { + var _7dEndDate = DateTime.Now.Date.AddDays(-1); + var _7dStartDate = _7dEndDate.AddDays(-6); + var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); + + var _30dEndDate = DateTime.Now.Date.AddDays(-1); + var _30dStartDate = _30dEndDate.AddDays(-29); + var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); + + var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + + + var _7dCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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 _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 && + ocd.IsEnabled == true) + .GroupBy((jad, jr, ocd) => jad.AdGroupId) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item3.SkuGrossProfit), + AdGroupId = g.Key + }); + + var _30dCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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((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 && + ocd.IsEnabled == true) + .GroupBy((jad, jr, ocd) => jad.AdGroupId) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item3.SkuGrossProfit), + AdGroupId = g.Key + }); + + var _customCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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((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 >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && + ocd.IsEnabled == true) + .GroupBy((jad, jr, ocd) => jad.AdGroupId) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item3.SkuGrossProfit), + AdGroupId = g.Key + }); + + var list = new List(); + foreach (var levelId in gOIRequest.LevelIdList) + { + var goiResponse = new JDProductAndPopularizeLevelGOIResponse() + { + 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; + + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; + list.Add(goiResponse); + } + return list; + } + + public IList CalculationAdLevelPopularizeGOI(GOIRequest gOIRequest) + { + var _7dEndDate = DateTime.Now.Date.AddDays(-1); + var _7dStartDate = _7dEndDate.AddDays(-6); + var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); + + var _30dEndDate = DateTime.Now.Date.AddDays(-1); + var _30dStartDate = _30dEndDate.AddDays(-29); + var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); + + var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + + + var _7dCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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), + AdGroupId = 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 && + ocd.IsEnabled == true) + .GroupBy((jad, jr, ocd) => jad.AdGroupId) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item3.SkuGrossProfit), + AdGroupId = g.Key + }); + + var _30dCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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((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 && + ocd.IsEnabled == true) + .GroupBy((jad, jr, ocd) => jad.AdGroupId) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item3.SkuGrossProfit), + AdGroupId = g.Key + }); + + var _customCosts = fsql.Select() + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .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((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 >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && + ocd.IsEnabled == true) + .GroupBy((jad, jr, ocd) => jad.AdGroupId) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item3.SkuGrossProfit), + AdGroupId = g.Key + }); + + var list = new List(); + foreach (var levelId in gOIRequest.LevelIdList) + { + var goiResponse = new JDProductAndPopularizeLevelGOIResponse() + { + 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; + + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; + list.Add(goiResponse); + } + return list; + } + + public IList CalculationSkuLevelPopularizeGOI(SkuGOIRequest gOIRequest) + { + var _7dEndDate = DateTime.Now.Date.AddDays(-1); + var _7dStartDate = _7dEndDate.AddDays(-6); + var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); + + var _30dEndDate = DateTime.Now.Date.AddDays(-1); + var _30dStartDate = _30dEndDate.AddDays(-29); + var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); + + var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); + + + var _7dCosts = fsql.Select() + .Where(jas => gOIRequest.LevelIdList.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((jr, ocd) => jr.OrderId == ocd.OrderId) + .Where((jr, ocd) => gOIRequest.LevelIdList.Contains(jr.PopularizeSku) && + ocd.IsEnabled && + jr.CookieTime >= _7dStartDate && + jr.CookieTime <= _7dEndTime) + .GroupBy((jr, ocd) => jr.PopularizeSku) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item2.SkuGrossProfit), + Sku = g.Key + }); + + var _30dCosts = fsql.Select() + .Where(jas => gOIRequest.LevelIdList.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((jr, ocd) => jr.OrderId == ocd.OrderId) + .Where((jr, ocd) => gOIRequest.LevelIdList.Contains(jr.PopularizeSku) && + ocd.IsEnabled && + jr.CookieTime >= _30dStartDate && + jr.CookieTime <= _30dEndTime) + .GroupBy((jr, ocd) => jr.PopularizeSku) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item2.SkuGrossProfit), + Sku = g.Key + }); + + var _customCosts = fsql.Select() + .Where(jas => gOIRequest.LevelIdList.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((jr, ocd) => jr.OrderId == ocd.OrderId) + .Where((jr, ocd) => gOIRequest.LevelIdList.Contains(jr.PopularizeSku) && + ocd.IsEnabled && + jr.CookieTime >= gOIRequest.StartDate && + jr.CookieTime <= customEndTime) + .GroupBy((jr, ocd) => jr.PopularizeSku) + .ToList(g => new + { + Profit = g.Sum(g.Value.Item2.SkuGrossProfit), + Sku = g.Key + }); + + var list = new List(); + foreach (var levelId in gOIRequest.LevelIdList) + { + var goiResponse = new JDSkuLevelProductAndPopularizeGOIResponse() + { + LevelId = levelId + }; + goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; + goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; + + goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; + goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; + + goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; + goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; + list.Add(goiResponse); + } + return list; + } } } diff --git a/BBWY.Server.Model/Dto/Response/Statistics/JDReportForm/JDMultiLevelGOIResponse.cs b/BBWY.Server.Model/Dto/Response/Statistics/JDReportForm/JDMultiLevelGOIResponse.cs index a315f6e2..39669611 100644 --- a/BBWY.Server.Model/Dto/Response/Statistics/JDReportForm/JDMultiLevelGOIResponse.cs +++ b/BBWY.Server.Model/Dto/Response/Statistics/JDReportForm/JDMultiLevelGOIResponse.cs @@ -25,7 +25,29 @@ public class JDSkuLevelGOIResponse : JDMultiLevelGOIResponse { + public new string LevelId { get; set; } + } + + public class JDProductAndPopularizeLevelGOIResponse + { + public JDProductAndPopularizeLevelGOIResponse() + { + _7GOI = new GOIResponse(); + _30GOI = new GOIResponse(); + CustomDaysGOI = new GOIResponse(); + } + public long LevelId { get; set; } + + public GOIResponse _7GOI { get; set; } + + public GOIResponse _30GOI { get; set; } + + public GOIResponse CustomDaysGOI { get; set; } + } + + public class JDSkuLevelProductAndPopularizeGOIResponse : JDProductAndPopularizeLevelGOIResponse + { public new string LevelId { get; set; } } }