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()
{