diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index 13dd1cd..9ee7c19 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -938,6 +938,23 @@ namespace BBWYB.Server.Business { if (!string.IsNullOrEmpty(request.ProductId) || string.IsNullOrEmpty(request.SkuId) || request.ShopId == 0) throw new BusinessException("参数无效"); + + var spuSaleInfo = fsql.Select(request.ProductId).ToOne(); + if (spuSaleInfo == null) + throw new BusinessException($"未找到spu{request.ProductId}销量"); + + var updateSpuSaleInfo = fsql.Update(request.ProductId) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.IsFirstPurchaseCompleted, true) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.FirstPurchaseCompletedItemCount == s.ItemCount) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && + spuSaleInfo.IsFirstOptimizationCompleted == false, s => s.IsFirstOptimizationCompleted, true) + .SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && + spuSaleInfo.IsFirstOptimizationCompleted == false, s => s.FirstOptimizationCompletedItemCount == s.ItemCount) + .Set(s => s.LastOptimizationItemCount == s.ItemCount) + .Set(s => s.LastOptimizationTime, DateTime.Now) + .Set(s => s.UpdateTime, DateTime.Now); + + fsql.Transaction(() => { fsql.Update().Set(osku => osku.IsOptimizationCompleted, 1) @@ -956,10 +973,11 @@ namespace BBWYB.Server.Business t.TaskType == Enums.TimeLimitTaskType.待议价任务) .ExecuteAffrows(); - fsql.Update(request.ProductId).Set(s => s.LastOptimizationItemCount == s.ItemCount) - .Set(s => s.LastOptimizationTime, DateTime.Now) - .Set(s => s.UpdateTime, DateTime.Now) - .ExecuteAffrows(); + //fsql.Update(request.ProductId).Set(s => s.LastOptimizationItemCount == s.ItemCount) + // .Set(s => s.LastOptimizationTime, DateTime.Now) + // .Set(s => s.UpdateTime, DateTime.Now) + // .ExecuteAffrows(); + updateSpuSaleInfo?.ExecuteAffrows(); }); } diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 2c979da..f85dd4d 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -383,7 +383,7 @@ namespace BBWYB.Server.Business.Sync //if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) // return true; //return false; - return GetOptimizationReason(s, insertSpuTotalSaleInfoList) != null; + return GetOptimizationReason(s) != null; }); if (optimizationSpuSaleList.Count() > 0) { @@ -397,7 +397,7 @@ namespace BBWYB.Server.Business.Sync if (osku.ProductId != spuSale.ProductId) continue; - var triggerOptimizationReason = GetOptimizationReason(spuSale, insertSpuTotalSaleInfoList); + var triggerOptimizationReason = GetOptimizationReason(spuSale); #region 更新sku优化标记 var oskuId = long.Parse(osku.Id); @@ -608,13 +608,15 @@ namespace BBWYB.Server.Business.Sync return null; } - public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s, List insertSpuTotalSaleInfoList) + public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s) { - 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) + if (s.IsFirstPurchaseCompleted == false) + return Enums.TriggerOptimizationReason.首次采购; + if (s.IsFirstPurchaseCompleted == true && + s.IsFirstOptimizationCompleted == false && + s.ItemCount - s.FirstPurchaseCompletedItemCount >= 20) + return Enums.TriggerOptimizationReason.首次优化; + if (s.IsFirstOptimizationCompleted == true && s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) return Enums.TriggerOptimizationReason.再次优化; return null; } diff --git a/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs b/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs index ca1b63b..92dd93e 100644 --- a/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs +++ b/BBWYB.Server.Model/Db/Product/SpuTotalSaleInfo.cs @@ -10,21 +10,42 @@ namespace BBWYB.Server.Model.Db public partial class SpuTotalSaleInfo { - /// - /// Spu - /// [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] public string ProductId { get; set; } [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } + /// + /// 完成首次优化时的销量 + /// + [Column(DbType = "bigint")] + public long? FirstOptimizationCompletedItemCount { get; set; } = 0; + + /// + /// 完成首次采购时的销量 + /// + [Column(DbType = "bigint")] + public long? FirstPurchaseCompletedItemCount { get; set; } = 0; + /// /// 是否有效 /// public bool? IsEnabled { get; set; } = false; + /// + /// 是否完成首次优化 + /// + + public bool? IsFirstOptimizationCompleted { get; set; } = false; + + /// + /// 是否完成首次采购 + /// + + public bool? IsFirstPurchaseCompleted { get; set; } = false; + /// /// 销量,销售件数 ///