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
}
}
}
}
*/
}
}