|
|
@ -3,14 +3,17 @@ using BBWYB.Common.Models; |
|
|
|
using BBWYB.Server.Model; |
|
|
|
using BBWYB.Server.Model.Db; |
|
|
|
using BBWYB.Server.Model.Dto; |
|
|
|
using FreeSql; |
|
|
|
using Yitter.IdGenerator; |
|
|
|
|
|
|
|
namespace BBWYB.Server.Business |
|
|
|
{ |
|
|
|
public class SkuOptimizationBusiness : BaseBusiness, IDenpendency |
|
|
|
{ |
|
|
|
public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) |
|
|
|
private FreeSqlMultiDBManager fsqlManager; |
|
|
|
public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager) : base(fsql, nLogManager, idGenerator) |
|
|
|
{ |
|
|
|
this.fsqlManager = fsqlManager; |
|
|
|
} |
|
|
|
|
|
|
|
public void LKInventoryAlertNotification(BatchLKInventoryAlertRequest request) |
|
|
@ -22,25 +25,61 @@ namespace BBWYB.Server.Business |
|
|
|
/// 完成优化
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="taskId"></param>
|
|
|
|
public void CompleteOptimization(long taskId) |
|
|
|
/// <param name="userId"></param>
|
|
|
|
/// <exception cref="BusinessException"></exception>
|
|
|
|
public void CompleteOptimization(long taskId, string userId) |
|
|
|
{ |
|
|
|
#region 验证待议价任务
|
|
|
|
var optimazaionTask = fsql.Select<SkuOptimizationTask>(taskId).ToOne(); |
|
|
|
if (optimazaionTask == null) |
|
|
|
throw new BusinessException("优化任务不存在"); |
|
|
|
if (optimazaionTask.IsOptimizationCompleted == true) |
|
|
|
throw new BusinessException("优化任务已完成"); |
|
|
|
|
|
|
|
var optimazationTaskIdList = fsql.Select<SkuOptimizationTask>() |
|
|
|
.Where(t => t.ProductId == optimazaionTask.ProductId && t.IsOptimizationCompleted == false) |
|
|
|
.ToList(t => t.Id); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 获取用户和部门信息
|
|
|
|
var user = fsqlManager.MDSfsql.Select<User>(userId).ToOne(); |
|
|
|
if (user == null) |
|
|
|
throw new BusinessException("用户不存在"); |
|
|
|
if (string.IsNullOrEmpty(user.DepartmentId)) |
|
|
|
throw new BusinessException("该用户没有归属部门"); |
|
|
|
var department = fsqlManager.MDSfsql.Select<Userdepartment>(user.DepartmentId).ToOne(); |
|
|
|
if (department == null) |
|
|
|
throw new BusinessException("部门不存在"); |
|
|
|
if (department.ParentDepartmentId != "1760971468360912896") |
|
|
|
throw new BusinessException("该用户所在部门不属于议价组"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 验证待议价子任务
|
|
|
|
var optimazaionChildTaskList = fsql.Select<SkuOptimizationChildTask>() |
|
|
|
.Where(sc => sc.OptimizationTaskId == optimazaionTask.Id) |
|
|
|
.ToList(); |
|
|
|
var currentOptimazaionChildTaskList = optimazaionChildTaskList.FirstOrDefault(sc => sc.BelongTeamId == department.Id); |
|
|
|
if (currentOptimazaionChildTaskList == null) |
|
|
|
throw new BusinessException($"未找到议价组{department.DepartmentName}的议价子任务"); |
|
|
|
if (currentOptimazaionChildTaskList.IsOptimizationCompleted == true) |
|
|
|
throw new BusinessException($"{department.DepartmentName}的议价子任务已完成"); |
|
|
|
|
|
|
|
currentOptimazaionChildTaskList.IsOptimizationCompleted = true; |
|
|
|
#endregion
|
|
|
|
|
|
|
|
IUpdate<SkuOptimizationChildTask> updateChildTask = null; |
|
|
|
IUpdate<SkuOptimizationTask> updateTask = null; |
|
|
|
IUpdate<SpuTotalSaleInfo> updateSpuSaleInfo = null; |
|
|
|
IUpdate<TimeLimitTask> updateTimeLimitTask = null; |
|
|
|
|
|
|
|
if (!optimazaionChildTaskList.Any(sc => sc.IsOptimizationCompleted == false)) |
|
|
|
{ |
|
|
|
//全部完成
|
|
|
|
|
|
|
|
var spuSaleInfo = fsql.Select<SpuTotalSaleInfo>(optimazaionTask.ProductId).ToOne(); |
|
|
|
if (spuSaleInfo == null) |
|
|
|
#region 更新spu销量表
|
|
|
|
var spuSaleInfo = fsql.Select<SpuTotalSaleInfo>(optimazaionTask.ProductId).ToOne(); |
|
|
|
if (spuSaleInfo == null) |
|
|
|
|
|
|
|
throw new BusinessException($"未找到spu{optimazaionTask.ProductId}销量"); |
|
|
|
throw new BusinessException($"未找到spu{optimazaionTask.ProductId}销量"); |
|
|
|
|
|
|
|
var updateSpuSaleInfo = fsql.Update<SpuTotalSaleInfo>(optimazaionTask.ProductId) |
|
|
|
updateSpuSaleInfo = fsql.Update<SpuTotalSaleInfo>(optimazaionTask.ProductId) |
|
|
|
.SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.IsFirstPurchaseCompleted, true) |
|
|
|
.SetIf(spuSaleInfo.IsFirstPurchaseCompleted == false, s => s.FirstPurchaseCompletedItemCount == s.ItemCount) |
|
|
|
.SetIf(spuSaleInfo.IsFirstPurchaseCompleted == true && |
|
|
@ -50,88 +89,36 @@ namespace BBWYB.Server.Business |
|
|
|
.Set(s => s.LastOptimizationItemCount == s.ItemCount) |
|
|
|
.Set(s => s.LastOptimizationTime, DateTime.Now) |
|
|
|
.Set(s => s.UpdateTime, DateTime.Now); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 更新待议价任务
|
|
|
|
updateTask = fsql.Update<SkuOptimizationTask>(optimazaionTask.Id) |
|
|
|
.Set(t => t.IsOptimizationCompleted, true) |
|
|
|
.Set(t => t.CompletionTime, DateTime.Now); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 更新待议价限时任务
|
|
|
|
updateTimeLimitTask = fsql.Update<TimeLimitTask>().Set(t => t.CompletionTime, DateTime.Now) |
|
|
|
.Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false)) |
|
|
|
.Where(t => t.TaskId == optimazaionTask.Id && |
|
|
|
t.CompletionTime == null && |
|
|
|
t.TaskType == Enums.TimeLimitTaskType.待议价任务); |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
|
|
|
|
#region 更新待议价子任务
|
|
|
|
updateChildTask = fsql.Update<SkuOptimizationChildTask>(currentOptimazaionChildTaskList.Id) |
|
|
|
.Set(sc => sc.IsOptimizationCompleted, true) |
|
|
|
.Set(sc => sc.CompletionTime, DateTime.Now); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
fsql.Update<SkuOptimizationTask>().Set(t => t.IsOptimizationCompleted, true) |
|
|
|
.Set(t => t.CompletionTime, DateTime.Now) |
|
|
|
.Where(t => optimazationTaskIdList.Contains(t.Id) && t.IsOptimizationCompleted == false) |
|
|
|
.ExecuteAffrows(); |
|
|
|
|
|
|
|
fsql.Update<TimeLimitTask>().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(); |
|
|
|
updateChildTask?.ExecuteAffrows(); |
|
|
|
updateTask?.ExecuteAffrows(); |
|
|
|
updateSpuSaleInfo?.ExecuteAffrows(); |
|
|
|
updateTimeLimitTask?.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<long>(); |
|
|
|
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
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
*/ |
|
|
|
} |
|
|
|
} |
|
|
|