diff --git a/BBWYB.Common/Extensions/ConverterExtensions.cs b/BBWYB.Common/Extensions/ConverterExtensions.cs new file mode 100644 index 0000000..2bc884e --- /dev/null +++ b/BBWYB.Common/Extensions/ConverterExtensions.cs @@ -0,0 +1,17 @@ +namespace BBWYB.Common.Extensions +{ + public static class ConverterExtensions + { + public static long? ToInt64(this object? o) + { + try + { + return Convert.ToInt64(o); + } + catch + { + return null; + } + } + } +} diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index a51173d..045eaa4 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -16,6 +16,8 @@ namespace BBWYB.Server.Business private PurchaseProductAPIService purchaseProductAPIService; private RestApiService restApiService; + private IList invalidOrderStateList; + public PurchaseSchemeBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, @@ -24,6 +26,7 @@ namespace BBWYB.Server.Business { this.purchaseProductAPIService = purchaseProductAPIService; this.restApiService = restApiService; + this.invalidOrderStateList = new List() { Enums.OrderState.待付款, Enums.OrderState.已取消 }; } private void ExtractNewPurchaser(IList purchaserSchemeList, IList addPurchaserList) where T : InputPurchaseSchemeRequest @@ -645,6 +648,9 @@ namespace BBWYB.Server.Business if (purchaseSchemeList.Count > 0) { var purchaseSchemeIdList = purchaseSchemeList.Select(p => p.Id).ToList(); + var spuIdList = purchaseSchemeList.Select(ps => ps.ProductId).Distinct().ToList(); + var skuIdList = purchaseSchemeList.Select(ps => ps.SkuId).Distinct().ToList(); + var recentDate = DateTime.Now.Date.AddDays(-30); var purchaseSchemeProductList = fsql.Select() .InnerJoin((psp, p) => psp.PurchaserId == p.Id) @@ -671,6 +677,30 @@ namespace BBWYB.Server.Business var purchaseSchemeProductSkuList = fsql.Select().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)) .ToList().Map>(); + var recent30daySpuItemCountGroups = fsql.Select() + .LeftJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => spuIdList.Contains(osku.ProductId) && + !invalidOrderStateList.Contains(o.OrderState) && + o.StartTime >= recentDate) + .GroupBy((osku, o) => osku.ProductId) + .ToList(g => new + { + ProductId = g.Key, + ItemTotal = g.Sum(g.Value.Item1.ItemTotal) + }); + + var recent30daySkuItemCountGroups = fsql.Select() + .LeftJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => skuIdList.Contains(osku.SkuId) && + !invalidOrderStateList.Contains(o.OrderState) && + o.StartTime >= recentDate) + .GroupBy((osku, o) => osku.SkuId) + .ToList(g => new + { + SkuId = g.Key, + ItemTotal = g.Sum(g.Value.Item1.ItemTotal) + }); + foreach (var scheme in purchaseSchemeList) { var schemeProductList = purchaseSchemeProductList.Where(ps => ps.SkuPurchaseSchemeId == scheme.Id); @@ -747,6 +777,11 @@ namespace BBWYB.Server.Business } } #endregion + + #region 近30天spu/sku销量 + scheme.Recent30DaySpuItemCount = Convert.ToInt64(recent30daySpuItemCountGroups.FirstOrDefault(x => x.ProductId == scheme.ProductId)?.ItemTotal ?? 0); + scheme.Recent30DaySkuItemCount = Convert.ToInt64(recent30daySkuItemCountGroups.FirstOrDefault(x => x.SkuId == scheme.SkuId)?.ItemTotal ?? 0); + #endregion } } return purchaseSchemeList;