|
|
@ -95,7 +95,7 @@ namespace SiNan.Business |
|
|
|
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) && |
|
|
|
x.Date >= startDate && |
|
|
@ -130,77 +130,13 @@ namespace SiNan.Business |
|
|
|
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) |
|
|
|
{ |
|
|
|
_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<JDPopularizeAdGroup>().Where(x => gOIRequest.LevelIdList.Contains(x.AdGroupId.Value) && |
|
|
|
x.Date >= _7dStartDate && |
|
|
|
x.Date <= _7dEndDate) |
|
|
|
.GroupBy(x => x.AdGroupId) |
|
|
|
.ToList(g => new |
|
|
|
{ |
|
|
|
Cost = g.Sum(g.Value.Cost), |
|
|
|
AdGroupId = g.Key |
|
|
|
}); |
|
|
|
|
|
|
|
var _7dAdGroupProfits = 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 >= _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<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) |
|
|
|
var costs = fsql.Select<JDPopularizeAdGroup>().Where(x => adGroupIdList.Contains(x.AdGroupId.Value) && |
|
|
|
x.Date >= startDate && |
|
|
|
x.Date <= endDate) |
|
|
|
.GroupBy(x => x.AdGroupId) |
|
|
|
.ToList(g => new |
|
|
|
{ |
|
|
@ -208,11 +144,11 @@ namespace SiNan.Business |
|
|
|
AdGroupId = g.Key |
|
|
|
}); |
|
|
|
|
|
|
|
var customDaysAdGroupProfits = 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) |
|
|
|
.Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdGroupId.Value) && |
|
|
|
jr.CookieTime >= gOIRequest.StartDate && |
|
|
|
jr.CookieTime <= customEndTime && |
|
|
|
.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 |
|
|
@ -221,33 +157,13 @@ namespace SiNan.Business |
|
|
|
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() |
|
|
|
IList<GOIByLevel> list = new List<GOIByLevel>(); |
|
|
|
foreach (var adGroupId in adGroupIdList) |
|
|
|
{ |
|
|
|
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; |
|
|
|
list.Add(goiResponse); |
|
|
|
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<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>() |
|
|
|
.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<Product360PopularizeAnalysisCampaginRepsonse>() |
|
|
|