From 03205b39a7c62b893aae0c2a943a9c6399dcf525 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 7 Oct 2023 10:26:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A6=E5=8F=91=E5=BE=85=E8=AE=AE=E4=BB=B7?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E5=A2=9E=E5=8A=A0=E9=A6=96=E6=AC=A1=E9=87=87?= =?UTF-8?q?=E8=B4=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 60 ++++++++++++++++--- BBWYB.Server.Model/Db/Order/OrderSku.cs | 8 ++- BBWYB.Server.Model/Enums.cs | 8 +++ 3 files changed, 66 insertions(+), 10 deletions(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 55ddaa1..2c979da 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -123,7 +123,8 @@ namespace BBWYB.Server.Business.Sync #region DB Operation List insertOrderList = new List(); List insertOrderSkuList = new List(); - List updateOrderSkuIdList_OptimizationFlag = new List(); + //List updateOrderSkuIdList_OptimizationFlag = new List(); + Dictionary> updateOSkuOptimizationFlagByReasonGroups = new Dictionary>(); List insertOrderConsigneeList = new List(); List insertTimeLimitTaskList = new List(); List deleteTimeLimitTaskOrderIdList = new List(); @@ -375,11 +376,14 @@ namespace BBWYB.Server.Business.Sync { 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 (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId)) + // return true; //首次触发 + //if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) + // return true; //销量大于20 + //if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + // return true; + //return false; + return GetOptimizationReason(s, insertSpuTotalSaleInfoList) != null; }); if (optimizationSpuSaleList.Count() > 0) { @@ -393,13 +397,27 @@ namespace BBWYB.Server.Business.Sync if (osku.ProductId != spuSale.ProductId) continue; + var triggerOptimizationReason = GetOptimizationReason(spuSale, insertSpuTotalSaleInfoList); + #region 更新sku优化标记 var oskuId = long.Parse(osku.Id); var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); if (insertOrderSku != null) + { insertOrderSku.IsNeedOptimization = 1; + insertOrderSku.TriggerOptimizationReason = triggerOptimizationReason; + } else - updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + { + //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(triggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) + { + updateOSkuOptimizationFlagByReasonList = new List(); + updateOSkuOptimizationFlagByReasonGroups.Add(triggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); + } + updateOSkuOptimizationFlagByReasonList.Add(oskuId); + } + #endregion #region 创建待议价任务 @@ -474,8 +492,21 @@ namespace BBWYB.Server.Business.Sync .ExecuteAffrows(); } - if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) - fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); + //if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) + // fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); + if (updateOSkuOptimizationFlagByReasonGroups.Keys.Count() > 0) + { + foreach (var triggerOptimizationReason in updateOSkuOptimizationFlagByReasonGroups.Keys) + { + var updateOSkuListOptimizationFlagList = updateOSkuOptimizationFlagByReasonGroups[triggerOptimizationReason]; + if (updateOSkuListOptimizationFlagList != null && updateOSkuListOptimizationFlagList.Count > 0) + { + fsql.Update(updateOSkuListOptimizationFlagList).Set(osku => osku.IsNeedOptimization, 1) + .Set(osku => osku.TriggerOptimizationReason, triggerOptimizationReason) + .ExecuteAffrows(); + } + } + } foreach (var key in deductionSkuCountDictionary.Keys) fsql.Update(key).Set(s => s.ItemCount - deductionSkuCountDictionary[key]).ExecuteAffrows(); @@ -576,5 +607,16 @@ namespace BBWYB.Server.Business.Sync return Enums.OrderState.已完成; return null; } + + public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s, List insertSpuTotalSaleInfoList) + { + if (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId)) + return Enums.TriggerOptimizationReason.首次采购; //首次触发 + if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) + return Enums.TriggerOptimizationReason.首次优化; //销量大于20 + if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + return Enums.TriggerOptimizationReason.再次优化; + return null; + } } } diff --git a/BBWYB.Server.Model/Db/Order/OrderSku.cs b/BBWYB.Server.Model/Db/Order/OrderSku.cs index f80eaa9..fda8c84 100644 --- a/BBWYB.Server.Model/Db/Order/OrderSku.cs +++ b/BBWYB.Server.Model/Db/Order/OrderSku.cs @@ -106,7 +106,7 @@ namespace BBWYB.Server.Model.Db /// /// 是否需要优化 是=1 否=0 /// - [Column(DbType = "int(1)", IsNullable = true)] + [Column(DbType = "int(1)", IsNullable = true)] public int? IsNeedOptimization { get; set; } = 0; /// @@ -114,6 +114,12 @@ namespace BBWYB.Server.Model.Db /// [Column(DbType = "int(1)", IsNullable = true)] public int? IsOptimizationCompleted { get; set; } = 0; + + /// + /// 触发优化原因 + /// + [Column(DbType = "int(1)", MapType = typeof(int?), IsNullable = true)] + public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; } } } diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index e07a061..dc80d1e 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -322,5 +322,13 @@ { 未平价 = 0, 已平价 = 1, 部分平价 = 2 } + + /// + /// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 + /// + public enum TriggerOptimizationReason + { + 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 + } } }