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; namespace BBWYB.Server.Business { public class SkuOptimizationBusiness : BaseBusiness, IDenpendency { public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) { } public void LKInventoryAlertNotification(BatchLKInventoryAlertRequest request) { } /// /// 完成优化 /// /// 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 => { return GetOptimizationReason(s) != null; }); 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; var triggerOptimizationReason = GetOptimizationReason(spuSale); #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); if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(triggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList)) { updateOSkuOptimizationFlagByReasonList = new List(); updateOSkuOptimizationFlagByReasonGroups.Add(triggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList); } updateOSkuOptimizationFlagByReasonList.Add(oskuId); } #endregion #region 创建待议价任务 if (!dbOptimizationLimitTaskList.Any(t => t.OrderId == o.OrderId && t.SkuId == osku.SkuId)) { //判断sku是否首次采购 var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == osku.SkuId); insertTimeLimitTaskList.Add(new TimeLimitTask() { Id = idGenerator.NewLong(), CreateTme = DateTime.Now, //ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1), ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now.AddDays(isFirst ? 1 : 0)), OrderId = o.OrderId, OrderSn = o.OrderSn, ShopId = shopId, SkuId = osku.SkuId, TaskType = Enums.TimeLimitTaskType.待议价任务 }); } #endregion } } } } */ } }