From a13e1b3d9b8a4c6e3de61e807cd6f6d7dae960b8 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 24 Sep 2023 22:13:31 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E9=94=80=E9=87=8F=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=202.=E6=96=B0=E5=A2=9E=E5=BE=85=E8=AE=AE=E4=BB=B7?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=203.=E6=96=B0=E5=A2=9E=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 100 +++++++++++++++++- .../Db/Product/Skutotalsaleinfo.cs | 2 +- .../Db/Product/SpuTotalSaleInfo.cs | 4 +- BBWYB.Server.Model/Enums.cs | 4 +- 4 files changed, 100 insertions(+), 10 deletions(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 37bd904..3bf574c 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -17,12 +17,18 @@ namespace BBWYB.Server.Business.Sync private OP_PlatformClientFactory opPlatformClientFactory; private VenderBusiness venderBusiness; private TaskSchedulerManager taskSchedulerManager; + private List timeLimitTaskTypes; public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator) { this.opPlatformClientFactory = opPlatformClientFactory; this.venderBusiness = venderBusiness; this.taskSchedulerManager = taskSchedulerManager; + timeLimitTaskTypes = new List() + { + Enums.TimeLimitTaskType.采购任务, + Enums.TimeLimitTaskType.待议价任务 + }; } public void AutoOrderSync() @@ -94,13 +100,20 @@ namespace BBWYB.Server.Business.Sync var payedQTOrderIdList = qtOrderList.Items.Where(qto => qto.IsPay).Select(qto => qto.OrderId).ToList(); var payedQTSpuIdList = qtOrderList.Items.Where(qto => qto.IsPay).SelectMany(qto => qto.OrderSkuList).Select(qtos => qtos.ProductId).Distinct().ToList(); + var payedQTSkuIdList = qtOrderList.Items.Where(qto => qto.IsPay).SelectMany(qto => qto.OrderSkuList).Select(qtos => qtos.SkuId).Distinct().ToList(); //限时任务列表 - var dbPurchaseTimeLimitTaskList = fsql.Select().Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务 && - payedQTOrderIdList.Contains(t.OrderId)).ToList(); + var dbTimeLimitTaskList = fsql.Select().Where(t => timeLimitTaskTypes.Contains(t.TaskType.Value) && + payedQTOrderIdList.Contains(t.OrderId)).ToList(); + + //限时采购任务列表 + var dbPurchaseTimeLimitTaskList = dbTimeLimitTaskList.Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务).ToList(); + + //限时议价任务列表 + var dbOptimizationLimitTaskList = dbTimeLimitTaskList.Where(t => t.TaskType == Enums.TimeLimitTaskType.待议价任务).ToList(); //现有sku销量 - var dbSkuTotalSaleInfoList = fsql.Select().Where(s => s.ShopId == shopId && s.IsEnabled == true && payedQTSpuIdList.Contains(s.ProductId)) + var dbSkuTotalSaleInfoList = fsql.Select().Where(s => s.ShopId == shopId && s.IsEnabled == true && payedQTSkuIdList.Contains(s.SkuId)) .ToList(); //现有spu销量 @@ -205,7 +218,9 @@ namespace BBWYB.Server.Business.Sync ProductId = qtOrderSku.ProductId, BelongSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == qtOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, InPackAmount = qtOrderSku.PackAmount, - BuyerPayFreight = qtOrderSku.FreightAmount + BuyerPayFreight = qtOrderSku.FreightAmount, + IsNeedOptimization = 0, + IsOptimizationCompleted = 0 }); } //收货人 @@ -341,7 +356,60 @@ namespace BBWYB.Server.Business.Sync #endregion #region 检查待议价任务 - + { + if (waitToCheckSkuSaleOrderList.Count() > 0) + { + var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => + { + if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) + return true; + if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + return true; + return false; + }); + if (optimizationSpuSaleList.Count() > 0) + { + foreach (var spuSale in optimizationSpuSaleList) + { + var orderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuSale.ProductId)).ToList(); + foreach (var o in orderList) + { + foreach (var osku in o.OrderSkuList) + { + if (osku.ProductId != spuSale.ProductId) + continue; + + #region 更新sku优化标记 + var oskuId = long.Parse(osku.Id); + var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); + if (insertOrderSku != null) + insertOrderSku.IsNeedOptimization = 1; + else + updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + #endregion + + #region 创建待议价任务 + if (!dbOptimizationLimitTaskList.Any(t => t.OrderId == o.OrderId && t.SkuId == osku.SkuId)) + { + insertTimeLimitTaskList.Add(new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + ExpirationTime = DateTime.Now.AddDays(1), + OrderId = o.OrderId, + OrderSn = o.OrderSn, + ShopId = shopId, + SkuId = osku.SkuId, + TaskType = Enums.TimeLimitTaskType.待议价任务 + }); + } + #endregion + } + } + } + } + } + } #endregion #region 检查限时采购任务 @@ -369,6 +437,28 @@ namespace BBWYB.Server.Business.Sync if (deleteTimeLimitTaskOrderIdList.Count() > 0) fsql.Delete().Where(t => deleteTimeLimitTaskOrderIdList.Contains(t.OrderId)).ExecuteAffrows(); + if (insertSkuTotalSaleInfoList.Count() > 0) + fsql.Insert(insertSkuTotalSaleInfoList).ExecuteAffrows(); + if (updateSkuTotalSaleInfoList.Count() > 0) + { + foreach (var item in updateSkuTotalSaleInfoList) + fsql.Update(item.SkuId).Set(s => s.ItemCount, item.ItemCount) + .Set(s => s.UpdateTime, DateTime.Now) + .ExecuteAffrows(); + } + + if (insertSpuTotalSaleInfoList.Count() > 0) + fsql.Insert(insertSpuTotalSaleInfoList).ExecuteAffrows(); + if (updateSpuTotalSaleInfoList.Count() > 0) + { + foreach (var item in updateSpuTotalSaleInfoList) + fsql.Update(item.ProductId).Set(s => s.ItemCount, item.ItemCount) + .Set(s => s.UpdateTime, DateTime.Now) + .ExecuteAffrows(); + } + + if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) + fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); }); } diff --git a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs index a880f04..18269d5 100644 --- a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs +++ b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs @@ -29,7 +29,7 @@ namespace BBWYB.Server.Model.Db /// 销量,销售件数 /// [Column(DbType = "bigint")] - public long? ItemCount { get; set; } + public long? ItemCount { get; set; } = 0; /// /// Spu diff --git a/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs b/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs index bc44a14..ca1b63b 100644 --- a/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs +++ b/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs @@ -29,13 +29,13 @@ namespace BBWYB.Server.Model.Db /// 销量,销售件数 /// [Column(DbType = "bigint")] - public long? ItemCount { get; set; } + public long? ItemCount { get; set; } = 0; /// /// 上次优化时的销量 /// [Column(DbType = "bigint")] - public long? LastOptimizationItemCount { get; set; } + public long? LastOptimizationItemCount { get; set; } = 0; /// /// 上次优化时间 diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index 104bf09..e07a061 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -308,11 +308,11 @@ } /// - /// 限时任务类型 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20 + /// 限时任务类型 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20, 待议价任务 = 30 /// public enum TimeLimitTaskType { - 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20 + 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20, 待议价任务 = 30 } ///