Browse Source

修复司南SKU层面聚合的bug

master
shanji 1 year ago
parent
commit
af35308029
  1. 17
      SiNan.Business/AggregationBusiness.cs
  2. 48
      SiNan.Business/GOIBusiness.cs
  3. 2
      SiNan.Model/Core/ActualAmountBySpu.cs
  4. 2
      SiNan.Model/Core/GOI/GOIByAdSku.cs

17
SiNan.Business/AggregationBusiness.cs

@ -73,16 +73,17 @@ namespace SiNan.Business
.InnerJoin((jr, o, osku) => o.Id == osku.OrderId) .InnerJoin((jr, o, osku) => o.Id == osku.OrderId)
.Where((jr, o, osku) => o.OrderState != Enums.OrderState. && .Where((jr, o, osku) => o.OrderState != Enums.OrderState. &&
o.IsGift == false && o.IsGift == false &&
o.StartTime >= startDate && jr.CookieTime >= startDate &&
o.StartTime <= endDate && jr.CookieTime <= endDate &&
osku.Price > 0 && osku.Price > 0 &&
skuList.Contains(osku.SkuId)) skuList.Contains(osku.SkuId))
.GroupBy((jr, o, osku) => new { osku.SkuId, jr.BusinessType }) .GroupBy((jr, o, osku) => new { osku.SkuId, jr.BusinessType, jr.CampaignId })
.ToList(g => new PopularizeAmountBySku .ToList(g => new PopularizeAmountBySku
{ {
ActualAmount = g.Sum(g.Value.Item3.ActualAmount), ActualAmount = g.Sum(g.Value.Item3.ActualAmount),
BusinessType = g.Value.Item1.BusinessType, BusinessType = g.Value.Item1.BusinessType,
Sku = g.Key.SkuId Sku = g.Key.SkuId,
CampaignId = g.Key.CampaignId
}); });
return list; return list;
} }
@ -831,10 +832,14 @@ namespace SiNan.Business
Console.WriteLine($"{DateTime.Now} {shopName} SKU聚合 {adSkuIndex}/{adSkuIdList.Count()}"); Console.WriteLine($"{DateTime.Now} {shopName} SKU聚合 {adSkuIndex}/{adSkuIdList.Count()}");
#region 处理SKU每日聚合 #region 处理SKU每日聚合
var adSkuGoi_AggregationDate_PopularizeLevel = aggregationDate_PopularizeLevelList.FirstOrDefault(x => x.Sku == adSku.Sku && x.BusinessType == adSku.BusinessType); var adSkuGoi_AggregationDate_PopularizeLevel = aggregationDate_PopularizeLevelList.FirstOrDefault(x => x.Sku == adSku.Sku &&
x.BusinessType == adSku.BusinessType &&
x.CampaignId == adSku.CampaignId);
var adSkuGoi_AggregationDate_ProductLevel = aggregationDate_ProductLevelList.FirstOrDefault(x => x.Sku == adSku.Sku && x.BusinessType == adSku.BusinessType); var adSkuGoi_AggregationDate_ProductLevel = aggregationDate_ProductLevelList.FirstOrDefault(x => x.Sku == adSku.Sku && x.BusinessType == adSku.BusinessType);
var adSkuPoplarizeAmount = aggregationDate_SkuPopularizeAmountList.FirstOrDefault(x => x.Sku == adSku.Sku && x.BusinessType == adSku.BusinessType); var adSkuPoplarizeAmount = aggregationDate_SkuPopularizeAmountList.FirstOrDefault(x => x.Sku == adSku.Sku &&
x.BusinessType == adSku.BusinessType &&
x.CampaignId == adSku.CampaignId);
var adSkuDailyAggregation = new AggregationJDPopularizeAdSkuDaily() var adSkuDailyAggregation = new AggregationJDPopularizeAdSkuDaily()
{ {

48
SiNan.Business/GOIBusiness.cs

@ -201,13 +201,14 @@ namespace SiNan.Business
{ {
var costs = fsql.Select<JDPopularizeAdSku>() var costs = fsql.Select<JDPopularizeAdSku>()
.Where(jas => skuIdList.Contains(jas.Sku) && jas.Date >= startDate && jas.Date <= endDate) .Where(jas => skuIdList.Contains(jas.Sku) && jas.Date >= startDate && jas.Date <= endDate)
.GroupBy(jas => new { jas.Sku, jas.BusinessType }) .GroupBy(jas => new { jas.Sku, jas.BusinessType, jas.CampaignId })
.ToList(g => new .ToList(g => new
{ {
Cost = g.Sum(g.Value.Cost), Cost = g.Sum(g.Value.Cost),
Clicks = g.Sum(g.Value.Clicks), Clicks = g.Sum(g.Value.Clicks),
g.Key.Sku, g.Key.Sku,
g.Key.BusinessType g.Key.BusinessType,
g.Key.CampaignId
}); });
var profits = fsql.Select<JDOrderPopularizeRelation, OrderCostDetail, Order>() var profits = fsql.Select<JDOrderPopularizeRelation, OrderCostDetail, Order>()
@ -217,43 +218,36 @@ namespace SiNan.Business
jr.CookieTime >= startDate && jr.CookieTime <= endDate && jr.CookieTime >= startDate && jr.CookieTime <= endDate &&
ocd.IsEnabled == true && ocd.IsEnabled == true &&
o.OrderState != Enums.OrderState.) o.OrderState != Enums.OrderState.)
.GroupBy((jr, ocd, o) => new { jr.PopularizeSku, jr.BusinessType }) .GroupBy((jr, ocd, o) => new { jr.PopularizeSku, jr.BusinessType, jr.CampaignId })
.ToList(g => new .ToList(g => new
{ {
Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Profit = g.Sum(g.Value.Item2.SkuGrossProfit),
Sku = g.Key.PopularizeSku, Sku = g.Key.PopularizeSku,
g.Key.BusinessType g.Key.BusinessType,
g.Key.CampaignId
}); });
IList<GOIByAdSku> list = new List<GOIByAdSku>(); IList<GOIByAdSku> list = new List<GOIByAdSku>();
foreach (var skuId in skuIdList) foreach (var skuId in skuIdList)
{ {
var currentCosts = costs.Where(c => c.Sku == skuId).ToList();
foreach (var cost in currentCosts)
{ {
var kuaicheCost = costs.FirstOrDefault(x => x.Sku == skuId && x.BusinessType == 2); var profit = profits.FirstOrDefault(x => x.Sku == skuId &&
var kuaicheProfit = profits.FirstOrDefault(x => x.Sku == skuId && x.BusinessType == 2); x.BusinessType == cost.BusinessType &&
if (kuaicheCost != null || kuaicheProfit != null) x.CampaignId == cost.CampaignId);
var adskuGoi = new GOIByAdSku()
{ {
var cost = kuaicheCost?.Cost ?? 0M; Sku = skuId,
var clicks = kuaicheCost?.Clicks ?? 0; Cost = cost.Cost,
var profit = kuaicheProfit?.Profit ?? 0M; Profit = profit?.Profit ?? 0M,
var adskuGoi = new GOIByAdSku() { Sku = skuId, Cost = cost, Profit = profit, BusinessType = 2, Clicks = Convert.ToInt32(clicks) }; BusinessType = cost.BusinessType.Value,
list.Add(adskuGoi); CampaignId = cost.CampaignId.Value,
} Clicks = Convert.ToInt32(cost.Clicks)
} };
{
var zntfCost = costs.FirstOrDefault(x => x.Sku == skuId && x.BusinessType == 134217728);
var zntfProfit = profits.FirstOrDefault(x => x.Sku == skuId && x.BusinessType == 134217728);
if (zntfCost != null || zntfProfit != null)
{
var cost = zntfCost?.Cost ?? 0M;
var clicks = zntfCost?.Clicks ?? 0;
var profit = zntfProfit?.Profit ?? 0M;
var adskuGoi = new GOIByAdSku() { Sku = skuId, Cost = cost, Profit = profit, BusinessType = 134217728, Clicks = Convert.ToInt32(clicks) };
list.Add(adskuGoi); list.Add(adskuGoi);
} }
} }
}
return list; return list;
} }
@ -265,8 +259,8 @@ namespace SiNan.Business
.ToList(g => new .ToList(g => new
{ {
Cost = g.Sum(g.Value.Cost), Cost = g.Sum(g.Value.Cost),
Sku = g.Key.Sku, g.Key.Sku,
BusinessType = g.Key.BusinessType g.Key.BusinessType
}); });
var profits = fsql.Select<OrderCostDetail, Order>() var profits = fsql.Select<OrderCostDetail, Order>()

2
SiNan.Model/Core/ActualAmountBySpu.cs

@ -29,5 +29,7 @@
/// 业务线(快车:2 京速推:134217728) /// 业务线(快车:2 京速推:134217728)
/// </summary> /// </summary>
public int? BusinessType { get; set; } public int? BusinessType { get; set; }
public long? CampaignId { get; set; }
} }
} }

2
SiNan.Model/Core/GOI/GOIByAdSku.cs

@ -5,5 +5,7 @@
public int BusinessType { get; set; } public int BusinessType { get; set; }
public int Clicks { get; set; } public int Clicks { get; set; }
public long CampaignId { get; set; }
} }
} }

Loading…
Cancel
Save