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