Browse Source

修复司南SKU层面聚合的bug

master
shanji 1 year ago
parent
commit
af35308029
  1. 17
      SiNan.Business/AggregationBusiness.cs
  2. 50
      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)
.Where((jr, o, osku) => o.OrderState != Enums.OrderState. &&
o.IsGift == false &&
o.StartTime >= startDate &&
o.StartTime <= endDate &&
jr.CookieTime >= startDate &&
jr.CookieTime <= endDate &&
osku.Price > 0 &&
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
{
ActualAmount = g.Sum(g.Value.Item3.ActualAmount),
BusinessType = g.Value.Item1.BusinessType,
Sku = g.Key.SkuId
Sku = g.Key.SkuId,
CampaignId = g.Key.CampaignId
});
return list;
}
@ -831,10 +832,14 @@ namespace SiNan.Business
Console.WriteLine($"{DateTime.Now} {shopName} SKU聚合 {adSkuIndex}/{adSkuIdList.Count()}");
#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 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()
{

50
SiNan.Business/GOIBusiness.cs

@ -201,13 +201,14 @@ namespace SiNan.Business
{
var costs = fsql.Select<JDPopularizeAdSku>()
.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
{
Cost = g.Sum(g.Value.Cost),
Clicks = g.Sum(g.Value.Clicks),
g.Key.Sku,
g.Key.BusinessType
g.Key.BusinessType,
g.Key.CampaignId
});
var profits = fsql.Select<JDOrderPopularizeRelation, OrderCostDetail, Order>()
@ -217,41 +218,34 @@ namespace SiNan.Business
jr.CookieTime >= startDate && jr.CookieTime <= endDate &&
ocd.IsEnabled == true &&
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
{
Profit = g.Sum(g.Value.Item2.SkuGrossProfit),
Sku = g.Key.PopularizeSku,
g.Key.BusinessType
g.Key.BusinessType,
g.Key.CampaignId
});
IList<GOIByAdSku> list = new List<GOIByAdSku>();
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 kuaicheProfit = profits.FirstOrDefault(x => x.Sku == skuId && x.BusinessType == 2);
if (kuaicheCost != null || kuaicheProfit != null)
var profit = profits.FirstOrDefault(x => x.Sku == skuId &&
x.BusinessType == cost.BusinessType &&
x.CampaignId == cost.CampaignId);
var adskuGoi = new GOIByAdSku()
{
var cost = kuaicheCost?.Cost ?? 0M;
var clicks = kuaicheCost?.Clicks ?? 0;
var profit = kuaicheProfit?.Profit ?? 0M;
var adskuGoi = new GOIByAdSku() { Sku = skuId, Cost = cost, Profit = profit, BusinessType = 2, Clicks = Convert.ToInt32(clicks) };
list.Add(adskuGoi);
}
}
{
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);
}
Sku = skuId,
Cost = cost.Cost,
Profit = profit?.Profit ?? 0M,
BusinessType = cost.BusinessType.Value,
CampaignId = cost.CampaignId.Value,
Clicks = Convert.ToInt32(cost.Clicks)
};
list.Add(adskuGoi);
}
}
return list;
@ -265,8 +259,8 @@ namespace SiNan.Business
.ToList(g => new
{
Cost = g.Sum(g.Value.Cost),
Sku = g.Key.Sku,
BusinessType = g.Key.BusinessType
g.Key.Sku,
g.Key.BusinessType
});
var profits = fsql.Select<OrderCostDetail, Order>()

2
SiNan.Model/Core/ActualAmountBySpu.cs

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

Loading…
Cancel
Save