Browse Source

晚上产品360分析接口

GOIAggregation
shanji 2 years ago
parent
commit
684f961ec5
  1. 196
      SiNan.Business/GOIBusiness.cs
  2. 8
      SiNan.Model/Dto/Response/GOI/Product360PopularizeAnalysisCampaginRepsonse.cs

196
SiNan.Business/GOIBusiness.cs

@ -95,7 +95,7 @@ namespace SiNan.Business
return list; return list;
} }
public IList<GOIByLevel> CalculationCampaignLevelGOI(IList<long> campaignIdList, DateTime startDate, DateTime endDate) public IList<GOIByLevel> CalculationCampaignLevelGOI(IList<long?> campaignIdList, DateTime startDate, DateTime endDate)
{ {
var costs = fsql.Select<JDPopularizeCampaign>().Where(x => campaignIdList.Contains(x.CampaignId.Value) && var costs = fsql.Select<JDPopularizeCampaign>().Where(x => campaignIdList.Contains(x.CampaignId.Value) &&
x.Date >= startDate && x.Date >= startDate &&
@ -130,31 +130,13 @@ namespace SiNan.Business
return list; return list;
} }
public IList<GOIByLevel> CalculationAdGroupLevelGOI(IList<long> adGroupIdList, DateTime startDate, DateTime endDate) public IList<GOIByLevel> CalculationAdGroupLevelGOI(IList<long?> 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) var costs = fsql.Select<JDPopularizeAdGroup>().Where(x => adGroupIdList.Contains(x.AdGroupId.Value) &&
{ x.Date >= startDate &&
_7dEndDate = DateTime.Now.Date.AddDays(-1); x.Date <= endDate)
_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<JDPopularizeAdGroup>().Where(x => gOIRequest.LevelIdList.Contains(x.AdGroupId.Value) &&
x.Date >= _7dStartDate &&
x.Date <= _7dEndDate)
.GroupBy(x => x.AdGroupId) .GroupBy(x => x.AdGroupId)
.ToList(g => new .ToList(g => new
{ {
@ -162,92 +144,26 @@ namespace SiNan.Business
AdGroupId = g.Key AdGroupId = g.Key
}); });
var _7dAdGroupProfits = gOIRequest.OnlyCustomDate ? null : fsql.Select<JDOrderPopularizeRelation, OrderCost, Order>().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) var profits = fsql.Select<JDOrderPopularizeRelation, OrderCost, Order>().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId)
.InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id)
.Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdGroupId.Value) && .Where((jr, oc, o) => adGroupIdList.Contains(jr.AdGroupId.Value) &&
jr.CookieTime >= _7dStartDate && jr.CookieTime >= startDate &&
jr.CookieTime <= _7dEndTime && jr.CookieTime <= endDate &&
o.OrderState != Enums.OrderState.) o.OrderState != Enums.OrderState.)
.GroupBy((jr, oc, o) => jr.AdGroupId) .GroupBy((jr, oc, o) => jr.AdGroupId)
.ToList(g => new .ToList(g => new
{ {
AdGroupId = g.Key, AdGroupId = g.Key,
Profit = g.Sum(g.Value.Item2.Profit) Profit = g.Sum(g.Value.Item2.Profit)
}); });
var _30dAdGroupCosts = gOIRequest.OnlyCustomDate ? null : fsql.Select<JDPopularizeAdGroup>().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<JDOrderPopularizeRelation, OrderCost, Order>().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<JDPopularizeAdGroup>().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<JDOrderPopularizeRelation, OrderCost, Order>().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<JDPopularizeAdGroup>().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<JDMultiLevelGOIResponse>();
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;
goiResponse.TotalCost = totalAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; IList<GOIByLevel> list = new List<GOIByLevel>();
list.Add(goiResponse); 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; return list;
} }
@ -379,6 +295,12 @@ namespace SiNan.Business
throw new BusinessException("缺少sku"); throw new BusinessException("缺少sku");
List<Product360PopularizeAnalysisCampaginRepsonse> list = new List<Product360PopularizeAnalysisCampaginRepsonse>(); List<Product360PopularizeAnalysisCampaginRepsonse> list = new List<Product360PopularizeAnalysisCampaginRepsonse>();
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<JDPopularizeAdSku>() var popularizeAdSkuSourceList = fsql.Select<JDPopularizeAdSku>()
.Where(x => x.ShopId == request.ShopId) .Where(x => x.ShopId == request.ShopId)
.Where(x => x.Date >= request.StartDate && x.Date <= request.EndDate) .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)) .WhereIf(request.SkuIdList.Count() > 1, x => request.SkuIdList.Contains(x.Sku))
.ToList(); .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 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 #endregion
var kuaicheCampaignSourceList = popularizeAdSkuSourceList.Where(x => x.BusinessType == 2).ToList();
var jstCampaignSourceList = popularizeAdSkuSourceList.Where(x => x.BusinessType == 134217728).ToList();
#region 处理快车 #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 处理单元统计 #region 处理单元统计
var adGroupStatisticsList = kuaicheCampaignSourceList.GroupBy(x => x.AdGroupId); var adGroupStatisticsList = kuaicheCampaignSourceList.GroupBy(x => x.AdGroupId);
var adGroupIdList = adGroupStatisticsList.Select(x => x.Key).ToList(); var adGroupIdList = adGroupStatisticsList.Select(x => x.Key).ToList();
@ -414,7 +360,9 @@ namespace SiNan.Business
Clicks = adGroupStatistics.Sum(x => x.Clicks), Clicks = adGroupStatistics.Sum(x => x.Clicks),
Cost = adGroupStatistics.Sum(x => x.Cost), Cost = adGroupStatistics.Sum(x => x.Cost),
Impressions = adGroupStatistics.Sum(x => x.Impressions), 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); allAdGroupList.Add(adGroup);
var campagin = list.FirstOrDefault(x => x.CampaignId == adGroup.CampaignId); var campagin = list.FirstOrDefault(x => x.CampaignId == adGroup.CampaignId);
@ -423,15 +371,29 @@ namespace SiNan.Business
} }
#endregion #endregion
#region 处理单元GOI
#endregion #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 #endregion
#region 处理京速推
#endregion #endregion
return new ListResponse<Product360PopularizeAnalysisCampaginRepsonse>() return new ListResponse<Product360PopularizeAnalysisCampaginRepsonse>()

8
SiNan.Model/Dto/Response/GOI/Product360PopularizeAnalysisCampaginRepsonse.cs

@ -40,22 +40,22 @@
/// <summary> /// <summary>
/// 花费 /// 花费
/// </summary> /// </summary>
public decimal Cost { get; set; } public decimal? Cost { get; set; }
/// <summary> /// <summary>
/// 订单行 /// 订单行
/// </summary> /// </summary>
public int OrderCnt { get; set; } public int? OrderCnt { get; set; }
/// <summary> /// <summary>
/// 展现次数 /// 展现次数
/// </summary> /// </summary>
public int Impressions { get; set; } public int? Impressions { get; set; }
/// <summary> /// <summary>
/// 点击次数 /// 点击次数
/// </summary> /// </summary>
public int Clicks { get; set; } public int? Clicks { get; set; }
/// <summary> /// <summary>
/// 单元列表 (仅BusinessType=2时具备该列表) /// 单元列表 (仅BusinessType=2时具备该列表)

Loading…
Cancel
Save