Browse Source

SKU推广维度聚合表新增聚合字段

GOIAggregation
shanji 1 year ago
parent
commit
9b8dd7b640
  1. 103
      SiNan.Business/AggregationBusiness.cs
  2. 9
      SiNan.Business/TodayGOIBusiness.cs
  3. 15
      SiNan.Model/Core/ActualAmountBySpu.cs
  4. 5
      SiNan.Model/Db/Aggregation/AggregationJDPopularizeAdSkuDaily.cs

103
SiNan.Business/AggregationBusiness.cs

@ -27,6 +27,66 @@ namespace SiNan.Business
this.taskSchedulerManager = taskSchedulerManager;
}
private IList<ActualAmountBySpu> StatisticsActualAmountBySpu(IList<string> spuList, DateTime startDate, DateTime endDate)
{
var list = fsql.Select<OrderSku, Order>().InnerJoin((osku, o) => osku.OrderId == o.Id)
.Where((osku, o) => o.OrderState != Enums.OrderState. &&
o.IsGift == false &&
o.StartTime >= startDate &&
o.StartTime <= endDate &&
osku.Price > 0 &&
spuList.Contains(osku.ProductId))
.GroupBy((osku, o) => osku.ProductId)
.ToList(g => new ActualAmountBySpu
{
ActualAmount = g.Sum(g.Value.Item1.ActualAmount),
Spu = g.Key
});
return list;
}
private IList<ActualAmountBySku> StatisticsActualAmountBySku(IList<string> skuList, DateTime startDate, DateTime endDate)
{
var list = fsql.Select<OrderSku, Order>().InnerJoin((osku, o) => osku.OrderId == o.Id)
.Where((osku, o) => o.OrderState != Enums.OrderState. &&
o.IsGift == false &&
o.StartTime >= startDate &&
o.StartTime <= endDate &&
osku.Price > 0 &&
skuList.Contains(osku.SkuId))
.GroupBy((osku, o) => new { osku.SkuId, osku.ProductId })
.ToList(g => new ActualAmountBySku
{
ActualAmount = g.Sum(g.Value.Item1.ActualAmount),
Sku = g.Key.SkuId,
Spu = g.Key.ProductId
});
return list;
}
private IList<PopularizeAmountBySku> StatisticsPopularizeAmountBySku(IList<string> skuList, DateTime startDate, DateTime endDate)
{
var list = fsql.Select<JDOrderPopularizeRelation, Order, OrderSku>()
.InnerJoin((jr, o, osku) => jr.OrderId == o.Id)
.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 &&
osku.Price > 0 &&
skuList.Contains(osku.SkuId))
.GroupBy((jr, o, osku) => new { osku.SkuId, jr.BusinessType })
.ToList(g => new PopularizeAmountBySku
{
ActualAmount = g.Sum(g.Value.Item3.ActualAmount),
BusinessType = g.Value.Item1.BusinessType,
Sku = g.Key.SkuId
});
return list;
}
#region SPU/SKU聚合任务
public void StartSpuAggregationTask()
{
@ -373,43 +433,6 @@ namespace SiNan.Business
});
}
}
private IList<ActualAmountBySpu> StatisticsActualAmountBySpu(IList<string> spuList, DateTime startDate, DateTime endDate)
{
var list = fsql.Select<OrderSku, Order>().InnerJoin((osku, o) => osku.OrderId == o.Id)
.Where((osku, o) => o.OrderState != Enums.OrderState. &&
o.IsGift == false &&
o.StartTime >= startDate &&
o.StartTime <= endDate &&
osku.Price > 0 &&
spuList.Contains(osku.ProductId))
.GroupBy((osku, o) => osku.ProductId)
.ToList(g => new ActualAmountBySpu
{
ActualAmount = g.Sum(g.Value.Item1.ActualAmount),
Spu = g.Key
});
return list;
}
private IList<ActualAmountBySku> StatisticsActualAmountBySku(IList<string> skuList, DateTime startDate, DateTime endDate)
{
var list = fsql.Select<OrderSku, Order>().InnerJoin((osku, o) => osku.OrderId == o.Id)
.Where((osku, o) => o.OrderState != Enums.OrderState. &&
o.IsGift == false &&
o.StartTime >= startDate &&
o.StartTime <= endDate &&
osku.Price > 0 &&
skuList.Contains(osku.SkuId))
.GroupBy((osku, o) => new { osku.SkuId, osku.ProductId })
.ToList(g => new ActualAmountBySku
{
ActualAmount = g.Sum(g.Value.Item1.ActualAmount),
Sku = g.Key.SkuId,
Spu = g.Key.ProductId
});
return list;
}
#endregion
#region 计划聚合任务
@ -799,6 +822,7 @@ namespace SiNan.Business
List<AggregationJDPopularizeAdSkuDaily> insertAggregationAdSkuDailyList = new List<AggregationJDPopularizeAdSkuDaily>();
var aggregationDate_PopularizeLevelList = goiBusiness.CalculationAdSkuLevelGOI(adSkuIdList, startDate_aggregationDate, endDate_aggregationDate);
var aggregationDate_ProductLevelList = goiBusiness.CalculationAdSkuProductLevelGOI(adSkuIdList, startDate_aggregationDate, endDate_aggregationDate);
var aggregationDate_SkuPopularizeAmountList = StatisticsPopularizeAmountBySku(adSkuIdList, startDate_aggregationDate, endDate_aggregationDate);
var adSkuIndex = 0;
foreach (var adSku in adSkuList)
@ -810,6 +834,8 @@ namespace SiNan.Business
var adSkuGoi_AggregationDate_PopularizeLevel = aggregationDate_PopularizeLevelList.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 adSkuDailyAggregation = new AggregationJDPopularizeAdSkuDaily()
{
Id = idGenerator.NewLong(),
@ -825,7 +851,8 @@ namespace SiNan.Business
CampaignId = adSku.CampaignId,
BusinessType = adSku.BusinessType,
SkuId = adSku.Sku,
AdId = adSku.AdId
AdId = adSku.AdId,
PopularizeAmount = adSkuPoplarizeAmount?.ActualAmount ?? 0M
};
insertAggregationAdSkuDailyList.Add(adSkuDailyAggregation);

9
SiNan.Business/TodayGOIBusiness.cs

@ -1,4 +1,5 @@
using SiNan.Common.Log;
using SiNan.Common.Http;
using SiNan.Common.Log;
using SiNan.Common.Models;
using Yitter.IdGenerator;
@ -6,9 +7,11 @@ namespace SiNan.Business
{
public class TodayGOIBusiness : BaseBusiness, IDenpendency
{
public TodayGOIBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator)
{
private RestApiService restApiService;
public TodayGOIBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, RestApiService restApiService) : base(fsql, nLogManager, idGenerator)
{
this.restApiService = restApiService;
}

15
SiNan.Model/Core/ActualAmountBySpu.cs

@ -15,4 +15,19 @@
public string Sku { get; set; }
}
public class PopularizeAmountBySku
{
/// <summary>
/// 实收金额
/// </summary>
public decimal ActualAmount { get; set; }
public string Sku { get; set; }
/// <summary>
/// 业务线(快车:2 京速推:134217728)
/// </summary>
public int? BusinessType { get; set; }
}
}

5
SiNan.Model/Db/Aggregation/AggregationJDPopularizeAdSkuDaily.cs

@ -79,6 +79,11 @@ namespace SiNan.Model.Db
[Column(StringLength = 50)]
public string SkuId { get; set; }
/// <summary>
/// 推广营业额(SKU实收)
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? PopularizeAmount { get; set; }=0.00M;
}
}

Loading…
Cancel
Save