From 1e8fb1ed65a7ae2dec0f9abcacb5d3305f16d908 Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Mon, 7 Nov 2022 10:09:49 +0800
Subject: [PATCH] 1
---
.../JDReportFormStatisticsController.cs | 97 +-
.../JDReportFormStatisticsBusiness.cs | 835 ++++++++++++++++++
.../JDReportForm/JDMultiLevelGOIResponse.cs | 22 +
3 files changed, 949 insertions(+), 5 deletions(-)
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; }
}
}