From 4c609ca0223de45e6dccb196c8b0b68f31a2f0b9 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Wed, 10 Jan 2024 01:32:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=95=86=E8=81=9A=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AggregationPurchaserController.cs | 25 +++ .../Aggregion/AggregionPurchaserBusiness.cs | 209 ++++++++++++++++++ .../PurchaseScheme/PurchaseSchemeBusiness.cs | 4 +- .../Purchaser/PurchaserBusiness.cs | 166 ++------------ BBWYB.Server.Business/TaskSchedulerManager.cs | 2 + BBWYB.Server.Model/Db/Purchaser/Purchaser.cs | 54 +++++ .../Purchaser/QueryPurchaserRequest.cs | 24 +- .../PurchaseSchemeProductResponse.cs | 18 +- .../Response/Purchaser/PurchaserResponse.cs | 37 +--- 9 files changed, 348 insertions(+), 191 deletions(-) create mode 100644 BBWYB.Server.API/Controllers/AggregationPurchaserController.cs create mode 100644 BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs diff --git a/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs b/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs new file mode 100644 index 0000000..711cafb --- /dev/null +++ b/BBWYB.Server.API/Controllers/AggregationPurchaserController.cs @@ -0,0 +1,25 @@ +using BBWYB.Server.Business; +using Microsoft.AspNetCore.Mvc; + +namespace BBWYB.Server.API.Controllers +{ + + public class AggregationPurchaserController : BaseApiController + { + private AggregionPurchaserBusiness aggregionPurchaserBusiness; + + public AggregationPurchaserController(IHttpContextAccessor httpContextAccessor, AggregionPurchaserBusiness aggregionPurchaserBusiness) : base(httpContextAccessor) + { + this.aggregionPurchaserBusiness = aggregionPurchaserBusiness; + } + + /// + /// 采购商聚合 + /// + [HttpPost] + public void AutoAggregion() + { + aggregionPurchaserBusiness.AutoAggregion(); + } + } +} diff --git a/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs new file mode 100644 index 0000000..07cbdcf --- /dev/null +++ b/BBWYB.Server.Business/Aggregion/AggregionPurchaserBusiness.cs @@ -0,0 +1,209 @@ +using BBWYB.Common.Log; +using BBWYB.Common.Models; +using BBWYB.Server.Model; +using BBWYB.Server.Model.Db; +using FreeSql; +using Yitter.IdGenerator; + +namespace BBWYB.Server.Business +{ + public class AggregionPurchaserBusiness : BaseBusiness, IDenpendency + { + private TaskSchedulerManager taskSchedulerManager; + public AggregionPurchaserBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator) + { + this.taskSchedulerManager = taskSchedulerManager; + } + + public void AutoAggregion() + { + var startTime = DateTime.Now.Date.AddDays(-90); + //查询最近有采购的采购商列表 + var purchaserIdList = fsql.Select() + .InnerJoin((opi, o) => opi.OrderId == o.Id) + .Where((opi, o) => opi.IsEnabled == true && + o.OrderState != Enums.OrderState.已取消 && + o.StartTime >= startTime && + !string.IsNullOrEmpty(opi.PurchaserId)) + .Distinct() + .ToList((opi, o) => opi.PurchaserId); + Task.Factory.StartNew(() => AggregionByGroup(purchaserIdList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.AggregationPurchaserTaskScheduler); + } + + + private void AggregionByGroup(IList purchaserIdList) + { + var tempPurchaserIdList = new List(); + for (var i = 0; i < purchaserIdList.Count(); i++) + { + tempPurchaserIdList.Add(purchaserIdList[i]); + if (i != 0 && i % 30 == 0) + { + Console.WriteLine($"聚合{i + 1}/{purchaserIdList.Count()}"); + Aggregion(tempPurchaserIdList); + tempPurchaserIdList.Clear(); + } + } + if (tempPurchaserIdList.Count() > 0) + { + Console.WriteLine($"最后聚合"); + Aggregion(tempPurchaserIdList); + tempPurchaserIdList.Clear(); + } + } + + private void Aggregion(IList purchaserIdList) + { + Thread.Sleep(2000); + + List> updatePurchaserList = new List>(); + + #region 查询SPU绑定数/SKU绑定数 + var bindList = fsql.Select() + .InnerJoin((psp, psc) => psp.SkuPurchaseSchemeId == psc.Id) + .Where((psp, psc) => purchaserIdList.Contains(psp.PurchaserId)) + .GroupBy((psp, psc) => new { psp.PurchaserId, psp.ProductId, psp.SkuId }) + .ToList(g => new + { + g.Key.PurchaserId, + g.Key.ProductId, + g.Key.SkuId + }); + #endregion + + #region 查询SPU采购数/SKU采购数 + var purchasedList = fsql.Select() + .InnerJoin((ps, ori, opi, o) => ps.Id == ori.BelongSkuId) + .InnerJoin((ps, ori, opi, o) => ori.PurchaseOrderId == opi.PurchaseOrderId && + ori.OrderId == opi.OrderId) + .InnerJoin((ps, ori, opi, o) => opi.OrderId == o.Id) + .Where((ps, ori, opi, o) => o.OrderState != Enums.OrderState.已取消 && + opi.IsEnabled == true && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((ps, ori, opi, o) => new { opi.PurchaserId, ps.Id, ps.ProductId }) + .ToList(g => new + { + g.Key.PurchaserId, + g.Key.ProductId, + SkuId = g.Key.Id + }); + + #endregion + + #region 查询订单数/最近采购时间 + var poList = fsql.Select() + .InnerJoin((opi, o) => opi.OrderId == o.Id) + .Where((opi, o) => opi.IsEnabled == true && + o.OrderState != Enums.OrderState.已取消 && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((opi, o) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + Count = g.Count(), + MaxPurchaseTime = g.Max(g.Value.Item1.CreateTime) + }); + + #endregion + + #region 查询最近90天采购数量 + var recent90d = DateTime.Now.Date.AddDays(-90); + var recent90dPurchasedCountList = fsql.Select() + .InnerJoin((opi, o) => opi.OrderId == o.Id) + .Where((opi, o) => o.OrderState != Enums.OrderState.已取消 && + opi.IsEnabled == true && + opi.CreateTime >= recent90d && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((opi, o) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + Count = g.Count(), + }); + #endregion + + #region 查询采购金额 + var purchasedAmountList = fsql.Select() + .InnerJoin((ocd, o, opi) => ocd.OrderId == o.Id) + .InnerJoin((ocd, o, opi) => o.Id == opi.OrderId) + .Where((ocd, o, opi) => o.OrderState != Enums.OrderState.已取消 && + ocd.IsEnabled == true && + opi.IsEnabled == true && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((ocd, o, opi) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + PurchasedAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) + }); + #endregion + + #region 查询最近90天采购金额 + var recent90dPurchasedAmountList = fsql.Select() + .InnerJoin((ocd, o, opi) => ocd.OrderId == o.Id) + .InnerJoin((ocd, o, opi) => o.Id == opi.OrderId) + .Where((ocd, o, opi) => o.OrderState != Enums.OrderState.已取消 && + ocd.IsEnabled == true && + opi.IsEnabled == true && + opi.CreateTime >= recent90d && + purchaserIdList.Contains(opi.PurchaserId)) + .GroupBy((ocd, o, opi) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + PurchasedAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) + }); + #endregion + + foreach (var purchaserId in purchaserIdList) + { + #region SPU绑定数/SKU绑定数 + var currentBindList = bindList.Where(x => x.PurchaserId == purchaserId).ToList(); + var bindingSpuCount = currentBindList.Select(x => x.ProductId).Distinct().Count(); + var bindingSkuCount = currentBindList.Select(x => x.SkuId).Count(); + #endregion + + #region SPU采购数/SKU采购数 + var currentPurchasedList = purchasedList.Where(x => x.PurchaserId == purchaserId).ToList(); + var purchasedSpuCount = currentPurchasedList.Select(x => x.ProductId).Distinct().Count(); + var purchasedSkuCount = currentPurchasedList.Select(x => x.SkuId).Count(); + #endregion + + #region 订单数/最近采购时间 + var purchasedCountAndTime = poList.FirstOrDefault(x => x.PurchaserId == purchaserId); + var purchasedCount = purchasedCountAndTime?.Count ?? 0; + var lastPurchaseTime = purchasedCountAndTime?.MaxPurchaseTime; + #endregion + + #region 采购金额 + var purchasedAmount = purchasedAmountList.FirstOrDefault(x => x.PurchaserId == purchaserId)?.PurchasedAmount ?? 0; + #endregion + + #region 最近90天采购金额 + var recent90dPurchasedAmount = recent90dPurchasedAmountList.FirstOrDefault(x => x.PurchaserId == purchaserId)?.PurchasedAmount ?? 0; + #endregion + + #region 最近90天采购数量 + var recent90dPurchasedCount = recent90dPurchasedCountList.FirstOrDefault(x => x.PurchaserId == purchaserId)?.Count ?? 0; + #endregion + + var update = fsql.Update(purchaserId) + .Set(p => p.BindingSpuCount, bindingSpuCount) + .Set(p => p.BindingSkuCount, bindingSkuCount) + .Set(p => p.PurchasedSpuCount, purchasedSpuCount) + .Set(p => p.PurchasedSkuCount, purchasedSkuCount) + .Set(p => p.PurchasedCount, purchasedCount) + .Set(p => p.PurchasedAmount, purchasedAmount) + .Set(p => p.Recent90dPurchasedAmount, recent90dPurchasedAmount) + .Set(p => p.Recent90dPurchasedCount, recent90dPurchasedCount); + updatePurchaserList.Add(update); + } + + fsql.Transaction(() => + { + foreach (var update in updatePurchaserList) + update.ExecuteAffrows(); + }); + } + } +} diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index a1f1e99..e8f0bc3 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -826,8 +826,8 @@ namespace BBWYB.Server.Business schemeProduct.PurchaserLocation = purchaser.Location; schemeProduct.PurchaserMemberId = purchaser.MemberId; schemeProduct.PurchaserName = purchaser.Name; - schemeProduct.PurchaserPurchasedCount = purchaser.PurchasedCount; - schemeProduct.PurchaserPurchasedSkuCount = purchaser.PurchasedSkuCount; + //schemeProduct.PurchaserPurchasedCount = purchaser.PurchasedCount; + //schemeProduct.PurchaserPurchasedSkuCount = purchaser.PurchasedSkuCount; schemeProduct.PurchasePlatform = purchaser.Platform; schemeProduct.PurchaserTag = purchaser.Tag; } diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs index 6958777..5d720e2 100644 --- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs +++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs @@ -86,139 +86,41 @@ namespace BBWYB.Server.Business request.RecentDayCondition.PurchasedCount != null && request.RecentDayCondition.PurchasedCount != 0) { - var childSelect = fsql.Select() - .InnerJoin((opi, o) => opi.OrderId == o.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (opi, o) => opi.ShopId == request.ShopId) - .Where((opi, o) => opi.IsEnabled == true && - o.OrderState != Enums.OrderState.已取消 && - opi.CreateTime >= recentStartDay) - .GroupBy((opi, o) => opi.PurchaserId) - .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.等于, g => g.Count() == request.RecentDayCondition.PurchasedCount) - .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.小于, g => g.Count() <= request.RecentDayCondition.PurchasedCount) - .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.大于, g => g.Count() >= request.RecentDayCondition.PurchasedCount) - .HavingIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.介于, g => g.Count() >= request.RecentDayCondition.PurchasedCount && g.Count() <= request.RecentDayCondition.PurchasedCount2) - .WithTempQuery(g => new { g.Value.Item1.PurchaserId, Count = g.Count() }).As("pcc"); - select = select.Where(p => childSelect.Where(pcc => pcc.PurchaserId == p.Id).Any()); + select = select.WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.等于, + p => p.Recent90dPurchasedCount == request.RecentDayCondition.PurchasedCount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.小于, + p => p.Recent90dPurchasedCount <= request.RecentDayCondition.PurchasedCount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.大于, + p => p.Recent90dPurchasedCount >= request.RecentDayCondition.PurchasedCount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.介于, + p => p.Recent90dPurchasedCount >= request.RecentDayCondition.PurchasedCount && + p.Recent90dPurchasedCount <= request.RecentDayCondition.PurchasedCount2); } if (request.RecentDayCondition.PurchasedAmountComparisonOperator != null && request.RecentDayCondition.PurchasedAmountComparisonOperator != 0 && request.RecentDayCondition.PurchasedAmount != null && request.RecentDayCondition.PurchasedAmount != 0) { - var childSelect = fsql.Select() - .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == o.Id) - .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == ori.OrderId && ocd.SkuId == ori.BelongSkuId) - .InnerJoin((ocd, o, ori, opi) => ori.OrderId == opi.OrderId) - .WhereIf(request.ShopId != null && request.ShopId > 0, (ocd, o, ori, opi) => o.ShopId == request.ShopId) - .Where((ocd, o, ori, opi) => o.OrderState != Enums.OrderState.已取消 && - ocd.IsEnabled == true && - opi.IsEnabled == true && - opi.CreateTime >= recentStartDay) - .GroupBy((ocd, o, ori, opi) => opi.PurchaserId) - .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.等于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) == request.RecentDayCondition.PurchasedAmount) - .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.小于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) <= request.RecentDayCondition.PurchasedAmount) - .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.大于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) >= request.RecentDayCondition.PurchasedAmount) - .HavingIf(request.RecentDayCondition.PurchasedAmountComparisonOperator == Enums.ComparisonOperator.介于, g => g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) >= request.RecentDayCondition.PurchasedAmount && g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) <= request.RecentDayCondition.PurchasedAmount2) - .WithTempQuery(g => new { g.Value.Item4.PurchaserId, PurchasedAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) }).As("pca"); - select = select.Where(p => childSelect.Where(pca => pca.PurchaserId == p.Id).Any()); + select = select.WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.等于, + p => p.Recent90dPurchasedAmount == request.RecentDayCondition.PurchasedAmount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.小于, + p => p.Recent90dPurchasedAmount <= request.RecentDayCondition.PurchasedAmount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.大于, + p => p.Recent90dPurchasedAmount >= request.RecentDayCondition.PurchasedAmount) + .WhereIf(request.RecentDayCondition.PurchasedCountComparisonOperator == Enums.ComparisonOperator.介于, + p => p.Recent90dPurchasedAmount >= request.RecentDayCondition.PurchasedAmount && + p.Recent90dPurchasedAmount <= request.RecentDayCondition.PurchasedAmount2); } } - var pageSelect = select.Page(request.PageIndex, request.PageSize); - var sql = pageSelect.ToSql(); - var purchaserList = select.Page(request.PageIndex, request.PageSize) - .Count(out var count) - .ToList(); + select = select.Page(request.PageIndex, request.PageSize) + .OrderByPropertyNameIf(!string.IsNullOrEmpty(request.SortColumn), request.SortColumn, request.SortType == 0); + //var sql = pageSelect.ToSql(); + var purchaserList = select.Count(out var count).ToList(); if (purchaserList.Count() > 0) { var purchaserIdList = purchaserList.Select(p => p.Id).ToList(); - #region 查询SPU绑定数/SKU绑定数 - var bindList = fsql.Select() - .InnerJoin((psp, psc) => psp.SkuPurchaseSchemeId == psc.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (psp, psc) => psc.ShopId == request.ShopId) - .Where((psp, psc) => purchaserIdList.Contains(psp.PurchaserId)) - .GroupBy((psp, psc) => new { psp.PurchaserId, psp.ProductId, psp.SkuId }) - .ToList(g => new - { - g.Key.PurchaserId, - g.Key.ProductId, - g.Key.SkuId - }); - #endregion - - #region 查询SPU采购数/SKU采购数 - var purchasedList = fsql.Select() - .InnerJoin((ps, ori, opi, o) => ps.Id == ori.BelongSkuId) - .InnerJoin((ps, ori, opi, o) => ori.PurchaseOrderId == opi.PurchaseOrderId && - ori.OrderId == opi.OrderId) - .InnerJoin((ps, ori, opi, o) => opi.OrderId == o.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (ps, ori, opi, o) => o.ShopId == request.ShopId) - .Where((ps, ori, opi, o) => o.OrderState != Enums.OrderState.已取消 && - opi.IsEnabled == true && - purchaserIdList.Contains(opi.PurchaserId)) - .GroupBy((ps, ori, opi, o) => new { opi.PurchaserId, ps.Id, ps.ProductId }) - .ToList(g => new - { - g.Key.PurchaserId, - g.Key.ProductId, - SkuId = g.Key.Id - }); - - #endregion - - #region 查询订单数 - var poList = fsql.Select() - .InnerJoin((opi, o) => opi.OrderId == o.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (opi, o) => opi.ShopId == request.ShopId) - .Where((opi, o) => opi.IsEnabled == true && - o.OrderState != Enums.OrderState.已取消 && - purchaserIdList.Contains(opi.PurchaserId)) - .GroupBy((opi, o) => opi.PurchaserId) - .ToList(g => new - { - PurchaserId = g.Key, - Count = g.Count() - }); - - #endregion - - #region 查询采购金额 - var purchaseAmountList = fsql.Select() - .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == o.Id) - .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == ori.OrderId && ocd.SkuId == ori.BelongSkuId) - .InnerJoin((ocd, o, ori, opi) => ori.OrderId == opi.OrderId) - .WhereIf(request.ShopId != null && request.ShopId > 0, (ocd, o, ori, opi) => o.ShopId == request.ShopId) - .Where((ocd, o, ori, opi) => o.OrderState != Enums.OrderState.已取消 && - ocd.IsEnabled == true && - opi.IsEnabled == true && - purchaserIdList.Contains(opi.PurchaserId)) - .GroupBy((ocd, o, ori, opi) => opi.PurchaserId) - .ToList(g => new - { - PurchaserId = g.Key, - PurchaseAmount = g.Sum(g.Value.Item1.SkuAmount + g.Value.Item1.PurchaseFreight) - }); - #endregion - - #region 查询最近采购时间 - var recentPurchaseTimeList = fsql.Select() - .InnerJoin((opi1, o) => opi1.OrderId == o.Id) - .WhereIf(request.ShopId != null && request.ShopId > 0, (opi1, o) => o.ShopId == request.ShopId) - .Where((opi1, o) => o.OrderState != Enums.OrderState.已取消 && - purchaserIdList.Contains(opi1.PurchaserId) && - opi1.IsEnabled == true) - .GroupBy((opi1, o) => opi1.PurchaserId) - .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id) }) - .From() - .InnerJoin((opi1, opi2) => opi1.MaxId == opi2.Id) - .ToList((opi1, opi2) => new - { - opi2.PurchaserId, - opi2.CreateTime - }); - #endregion - #region 查询标签/主营类目 var purchaserExtendInfoList = fsql.Select() .InnerJoin((pei, per) => pei.Id == per.ExtendedInfoId) @@ -268,30 +170,6 @@ namespace BBWYB.Server.Business foreach (var purchaser in purchaserList) { - #region SPU绑定数/SKU绑定数 - var currentBindList = bindList.Where(x => x.PurchaserId == purchaser.Id).ToList(); - purchaser.BindingSpuCount = currentBindList.Select(x => x.ProductId).Distinct().Count(); - purchaser.BindingSkuCount = currentBindList.Select(x => x.SkuId).Count(); - #endregion - - #region SPU采购数/SKU采购数 - var currentPurchasedList = purchasedList.Where(x => x.PurchaserId == purchaser.Id).ToList(); - purchaser.PurchasedSpuCount = currentPurchasedList.Select(x => x.ProductId).Distinct().Count(); - purchaser.PurchasedSkuCount = currentPurchasedList.Select(x => x.SkuId).Count(); - #endregion - - #region 订单数 - purchaser.PurchasedCount = poList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0; - #endregion - - #region 采购金额 - purchaser.PurchaseAmount = purchaseAmountList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.PurchaseAmount ?? 0; - #endregion - - #region 最近采购时间 - purchaser.LastPurchaseTime = recentPurchaseTimeList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.CreateTime; - #endregion - #region 主营类目/标签 var currentExtendInfoList = purchaserExtendInfoList.Where(x => x.PurchaserId == purchaser.Id).ToList(); purchaser.CategoryList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.主营类目) diff --git a/BBWYB.Server.Business/TaskSchedulerManager.cs b/BBWYB.Server.Business/TaskSchedulerManager.cs index 6bab173..fa58a83 100644 --- a/BBWYB.Server.Business/TaskSchedulerManager.cs +++ b/BBWYB.Server.Business/TaskSchedulerManager.cs @@ -9,12 +9,14 @@ namespace BBWYB.Server.Business public LimitedConcurrencyLevelTaskScheduler PurchaseOrderCallbackTaskScheduler { get; private set; } + public LimitedConcurrencyLevelTaskScheduler AggregationPurchaserTaskScheduler { get; private set; } public TaskSchedulerManager() { SyncOrderTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); PurchaseOrderCallbackTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); SyncProductTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); + AggregationPurchaserTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(1); } } } diff --git a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs index a37fc77..f3c94bc 100644 --- a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs +++ b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs @@ -54,6 +54,60 @@ namespace BBWYB.Server.Model.Db /// [Column(StringLength = 20)] public string Tag { get; set; } + + /// + /// 绑定SPU数 + /// + [Column(DbType = "bigint")] + public long? BindingSpuCount { get; set; } = 0; + + /// + /// 采购SPU数 + /// + [Column(DbType = "bigint")] + public long? PurchasedSpuCount { get; set; } = 0; + + /// + /// 绑定SKU数 + /// + [Column(DbType = "bigint")] + public long? BindingSkuCount { get; set; } = 0; + + /// + /// 采购SKU数 + /// + [Column(DbType = "bigint")] + public long? PurchasedSkuCount { get; set; } = 0; + + /// + /// 采购次数/采购订单数 + /// + [Column(DbType = "bigint")] + public long? PurchasedCount { get; set; } = 0; + + /// + /// 采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PurchasedAmount { get; set; } = 0.00M; + + /// + /// 上次采购时间 + /// + [Column(DbType = "datetime")] + public DateTime? LastPurchaseTime { get; set; } + + /// + /// 最近90天采购金额 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Recent90dPurchasedAmount { get; set; } = 0.00M; + + /// + /// 最近90天采购次数 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Recent90dPurchasedCount { get; set; } = 0.00M; } } diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs index 038c03e..5bf75bf 100644 --- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs @@ -43,13 +43,31 @@ namespace BBWYB.Server.Model.Dto /// [Required] public int PageSize { get; set; } + + /// + /// 排序字段 + /// 取值范围 + /// BindingSpuCount 绑定SPU数 + /// PurchasedSpuCount 采购SPU数 + /// BindingSkuCount 绑定SKU数 + /// PurchasedSkuCount 采购SKU数 + /// PurchasedCount 采购次数/订单数 + /// PurchasedAmount 采购金额 + /// LastPurchaseTime 最近采购时间 + /// + public string SortColumn { get; set; } + + /// + /// 排序类型 0升序 1降序 + /// + public int SortType { get; set; } } public class QueryPurchaserConditionByDayRequest { - /// - /// 最近天数 - /// + ///// + ///// 最近天数 暂时只有支持90 + ///// public int? RecentDay { get; set; } public Enums.ComparisonOperator? PurchasedCountComparisonOperator { get; set; } diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs index ec9a041..44761a3 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs @@ -15,15 +15,15 @@ namespace BBWYB.Server.Model.Dto public string PurchaserMemberId { get; set; } - /// - /// 采购商的采购次数 - /// - public int? PurchaserPurchasedCount { get; set; } - - /// - /// 采购商的采购SKU数 - /// - public int? PurchaserPurchasedSkuCount { get; set; } + ///// + ///// 采购商的采购次数 + ///// + //public long? PurchaserPurchasedCount { get; set; } + + ///// + ///// 采购商的采购SKU数 + ///// + //public long? PurchaserPurchasedSkuCount { get; set; } /// /// 采购商标签 diff --git a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs index 1a573f9..3435497 100644 --- a/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Purchaser/PurchaserResponse.cs @@ -14,45 +14,16 @@ namespace BBWYB.Server.Model.Dto /// public IList TagList { get; set; } - /// - /// 绑定SPU数 - /// - public int? BindingSpuCount { get; set; } - - /// - /// 采购SPU数 - /// - public int? PurchasedSpuCount { get; set; } - - /// - /// 绑定SKU数 - /// - public int? BindingSkuCount { get; set; } - - /// - /// 采购SKU数 - /// - public int? PurchasedSkuCount { get; set; } = 0; /// - /// 采购次数/采购订单数 - /// - public int? PurchasedCount { get; set; } = 0; - - /// - /// 采购金额 - /// - public decimal? PurchaseAmount { get; set; } - - /// - /// 上次采购时间 + /// 最近30天具有采购行为的店铺SKU /// - public DateTime? LastPurchaseTime { get; set; } + public IList Recent30dProductSku { get; set; } /// - /// 最近30天具有采购行为的店铺SKU + /// 采购金额容错字段 /// - public IList Recent30dProductSku { get; set; } + public decimal? PurchaseAmount { get { return PurchasedAmount; } } public PurchaserResponse() {