Browse Source

根据spu查询推广维度GOI

根据shopId查询推广维度GOI
GOIAggregation
shanji 2 years ago
parent
commit
d5a67fe401
  1. 23
      SiNan.API/Controllers/GOIController.cs
  2. 56
      SiNan.Business/GOIBusiness.cs
  3. 9
      SiNan.Model/Core/GOI/GOIByShop.cs
  4. 9
      SiNan.Model/Core/GOI/GOIBySpu.cs
  5. 11
      SiNan.Model/Dto/Request/GOI/QueryPopularizeLevelGOIByShopIdRequest.cs
  6. 11
      SiNan.Model/Dto/Request/GOI/QueryPopularizeLevelGOIBySpuIdRequest.cs

23
SiNan.API/Controllers/GOIController.cs

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SiNan.Business;
using SiNan.Model.Core;
using SiNan.Model.Dto;
namespace SiNan.API.Controllers
@ -56,5 +57,27 @@ namespace SiNan.API.Controllers
{
return goiBusiness.QueryProduct360TopStatistics(request);
}
/// <summary>
/// 根据spu查询推广维度GOI
/// </summary>
/// <param name="request"></param>
/// <returns>SPU GOI</returns>
[HttpPost]
public ListResponse<GOIBySpu> QueryPopularizeLevelGOIBySpuId([FromBody] QueryPopularizeLevelGOIBySpuIdRequest request)
{
return goiBusiness.QueryPopularizeLevelGOIBySpuId(request);
}
/// <summary>
/// 根据shopId查询推广维度GOI
/// </summary>
/// <param name="request"></param>
/// <returns>店铺GOI</returns>
[HttpPost]
public GOIByShop QueryPopularizeLevelGOIByShopId([FromBody] QueryPopularizeLevelGOIByShopIdRequest request)
{
return goiBusiness.QueryPopularizeLevelGOIByShopId(request);
}
}
}

56
SiNan.Business/GOIBusiness.cs

@ -95,6 +95,31 @@ namespace SiNan.Business
return list;
}
private GOIByShop StatisticsPopularizeLevelGOI(long shopId, DateTime? startDate, DateTime? endDate)
{
var cost = fsql.Select<JDPopularizeAdSku>()
.Where(jas => jas.ShopId == shopId) // &&jas.Date >= startDate && jas.Date <= endDate
.WhereIf(startDate != null, jas => jas.Date >= startDate)
.WhereIf(endDate != null, jas => jas.Date <= endDate)
.Sum(jas => jas.Cost);
var profit = fsql.Select<JDOrderPopularizeRelation, OrderCostDetail, Order>()
.InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId)
.InnerJoin((jr, ocd, o) => jr.OrderId == o.Id)
.Where((jr, ocd, o) => jr.ShopId == shopId)
.WhereIf(startDate != null, (jr, ocd, o) => jr.CookieTime >= startDate)
.WhereIf(endDate != null, (jr, ocd, o) => jr.CookieTime <= endDate)
.Where((jr, ocd, o) => ocd.IsEnabled == true && o.OrderState != Enums.OrderState.)
.Sum((jr, ocd, o) => ocd.SkuGrossProfit);
return new GOIByShop()
{
ShopId = shopId,
Cost = cost,
Profit = profit,
};
}
public IList<GOIByLevel> CalculationCampaignLevelGOI(IList<long?> campaignIdList, DateTime startDate, DateTime endDate)
{
var costs = fsql.Select<JDPopularizeCampaign>().Where(x => campaignIdList.Contains(x.CampaignId.Value) &&
@ -520,5 +545,36 @@ namespace SiNan.Business
TotalDeficit = totalDeficit
};
}
public ListResponse<GOIBySpu> QueryPopularizeLevelGOIBySpuId(QueryPopularizeLevelGOIBySpuIdRequest request)
{
var list = new List<GOIBySpu>();
request.EndTime = request.EndTime.Date.AddDays(1).AddSeconds(-1);
var productSkuList = fsql.Select<ProductSku>().Where(ps => request.SpuIdList.Contains(ps.ProductId)).ToList();
var skuIdList = productSkuList.Select(ps => ps.ProductId).Distinct().ToList();
var goiList = StatisticsPopularizeLevelGOI(skuIdList, request.StartTime, request.EndTime);
foreach (var spu in request.SpuIdList)
{
var currentSpuSkuIdList = productSkuList.Where(ps => ps.ProductId == spu).Select(ps => ps.Id).ToList();
var currentGoiList = goiList.Where(g => currentSpuSkuIdList.Contains(g.Sku));
var goi = new GOIBySpu()
{
Spu = spu,
Cost = currentGoiList.Sum(g => g.Cost),
Profit = currentGoiList.Sum(g => g.Profit),
};
}
return new ListResponse<GOIBySpu>()
{
Count = list.Count,
ItemList = list
};
}
public GOIByShop QueryPopularizeLevelGOIByShopId(QueryPopularizeLevelGOIByShopIdRequest request)
{
request.EndTime = request.EndTime.Date.AddDays(1).AddSeconds(-1);
return StatisticsPopularizeLevelGOI(request.ShopId, request.StartTime, request.EndTime);
}
}
}

9
SiNan.Model/Core/GOI/GOIByShop.cs

@ -0,0 +1,9 @@
using SiNan.Model.Dto;
namespace SiNan.Model.Core
{
public class GOIByShop : GOIResponse
{
public long ShopId { get; set; }
}
}

9
SiNan.Model/Core/GOI/GOIBySpu.cs

@ -0,0 +1,9 @@
using SiNan.Model.Dto;
namespace SiNan.Model.Core
{
public class GOIBySpu : GOIResponse
{
public string Spu { get; set; }
}
}

11
SiNan.Model/Dto/Request/GOI/QueryPopularizeLevelGOIByShopIdRequest.cs

@ -0,0 +1,11 @@
namespace SiNan.Model.Dto
{
public class QueryPopularizeLevelGOIByShopIdRequest
{
public long ShopId { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
}
}

11
SiNan.Model/Dto/Request/GOI/QueryPopularizeLevelGOIBySpuIdRequest.cs

@ -0,0 +1,11 @@
namespace SiNan.Model.Dto
{
public class QueryPopularizeLevelGOIBySpuIdRequest
{
public List<string> SpuIdList { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
}
}
Loading…
Cancel
Save