diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index 74757b8..8c0b93e 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -23,5 +23,15 @@ namespace BBWYB.Server.API.Controllers { skuOptimizationBusiness.LKInventoryAlertNotification(request); } + + /// + /// 完成待优化任务 (相同spu的优化任务会一起完成) + /// + /// 待优化任务Id + [HttpPost("{taskId}")] + public void CompleteOptimization([FromRoute]long taskId) + { + skuOptimizationBusiness.CompleteOptimization(taskId); + } } } diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 2c6e095..1554790 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -682,7 +682,7 @@ namespace BBWYB.Server.Business } #endregion - #region 创建优化历史 + #region 创建优化历史 { //本批次在线采购的订单sku集合 var allBelongSkuIdList = request.CargoParamGroupList.SelectMany(cg => cg.CargoParamList.Select(c => c.BelongSkuId)).Distinct().ToList(); diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 86fb724..160fabf 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -1,5 +1,7 @@ using BBWYB.Common.Log; using BBWYB.Common.Models; +using BBWYB.Server.Model; +using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using Yitter.IdGenerator; @@ -16,6 +18,57 @@ namespace BBWYB.Server.Business } + /// + /// 完成优化 + /// + /// + public void CompleteOptimization(long taskId) + { + var optimazaionTask = fsql.Select(taskId).ToOne(); + if (optimazaionTask == null) + throw new BusinessException("优化任务不存在"); + if (optimazaionTask.IsOptimizationCompleted == true) + throw new BusinessException("优化任务已完成"); + + var optimazationTaskIdList = fsql.Select() + .Where(t => t.ProductId == optimazaionTask.ProductId && t.IsOptimizationCompleted == false) + .ToList(t => t.Id); + + + var spuSaleInfo = fsql.Select(optimazaionTask.ProductId).ToOne(); + if (spuSaleInfo == null) + + throw new BusinessException($"未找到spu{optimazaionTask.ProductId}销量"); + + var updateSpuSaleInfo = fsql.Update(optimazaionTask.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(t => t.IsOptimizationCompleted, true) + .Set(t => t.CompletionTime, DateTime.Now) + .Where(t => optimazationTaskIdList.Contains(t.Id) && t.IsOptimizationCompleted == false) + .ExecuteAffrows(); + + fsql.Update().Set(t => t.CompletionTime, DateTime.Now) + .Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false)) + .Where(t => optimazationTaskIdList.Contains(t.TaskId) && + t.CompletionTime == null && + t.TaskType == Enums.TimeLimitTaskType.待议价任务) + .ExecuteAffrows(); + + updateSpuSaleInfo.ExecuteAffrows(); + }); + } + /* var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => { diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index ec0e545..3640fb7 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -378,21 +378,24 @@ namespace BBWYB.Server.Business.Sync { if (waitToCheckSkuSaleOrderList.Count() > 0) { + var skuIdList = waitToCheckSkuSaleOrderList.SelectMany(o => o.OrderSkuList.Select(osku => osku.SkuId)).Distinct().ToList(); + //没有完成首次采购的spu var noFisrstPurchasedSpuList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList) .Where(s => s.IsFirstPurchaseCompleted == false) .Select(s => s.ProductId) .ToList(); + + //查询已存在未结束的优化任务 + var dbSkuOptimizationTaskList = fsql.Select() + .Where(t => t.ShopId == shopId && + t.IsOptimizationCompleted == false && + skuIdList.Contains(t.SkuId)) + .ToList(); + + if (noFisrstPurchasedSpuList.Count() > 0) { - //查询已存在未结束的优化任务 - var dbSkuOptimizationTaskList = fsql.Select() - .Where(t => t.ShopId == shopId && - t.IsOptimizationCompleted == false && - t.TriggerOptimizationReason == Enums.TriggerOptimizationReason.首次采购 && - noFisrstPurchasedSpuList.Contains(t.ProductId)) - .ToList(); - foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) { foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) @@ -469,6 +472,39 @@ namespace BBWYB.Server.Business.Sync } } } + + #region 更新订单sku优化标记 + var allSkuOptimizationTaskList = dbSkuOptimizationTaskList.Union(insertSkuOptimizationTaskList); + foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) + { + foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) + { + var task = allSkuOptimizationTaskList.FirstOrDefault(t => t.SkuId == waitCheckOrderSku.SkuId); + if (task != null) + { + #region 更新sku优化标记 + var oskuId = long.Parse(waitCheckOrderSku.SkuId); + var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); + if (insertOrderSku != null) + { + insertOrderSku.IsNeedOptimization = 1; + insertOrderSku.TriggerOptimizationReason = task.TriggerOptimizationReason; + } + else + { + //updateOrderSkuIdList_OptimizationFlag.Add(oskuId); + if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(task.TriggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) + { + updateOSkuOptimizationFlagByReasonList = new List(); + updateOSkuOptimizationFlagByReasonGroups.Add(task.TriggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); + } + updateOSkuOptimizationFlagByReasonList.Add(oskuId); + } + #endregion + } + } + } + #endregion } } #endregion