using BBWYB.Common.Log;
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
{
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)
{
}
///
/// 完成优化
///
///
///
///
public void CompleteOptimization(long taskId, string userId)
{
#region 验证待议价任务
var optimazaionTask = fsql.Select(taskId).ToOne();
if (optimazaionTask == null)
throw new BusinessException("优化任务不存在");
if (optimazaionTask.IsOptimizationCompleted == true)
throw new BusinessException("优化任务已完成");
#endregion
#region 获取用户和部门信息
var user = fsqlManager.MDSfsql.Select(userId).ToOne();
if (user == null)
throw new BusinessException("用户不存在");
if (string.IsNullOrEmpty(user.DepartmentId))
throw new BusinessException("该用户没有归属部门");
var department = fsqlManager.MDSfsql.Select(user.DepartmentId).ToOne();
if (department == null)
throw new BusinessException("部门不存在");
if (department.ParentDepartmentId != "1760971468360912896")
throw new BusinessException("该用户所在部门不属于议价组");
#endregion
#region 验证待议价子任务
var optimazaionChildTaskList = fsql.Select()
.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 updateChildTask = null;
IUpdate updateTask = null;
IUpdate updateSpuSaleInfo = null;
IUpdate updateTimeLimitTask = null;
if (!optimazaionChildTaskList.Any(sc => sc.IsOptimizationCompleted == false))
{
//全部完成
#region 更新spu销量表
var spuSaleInfo = fsql.Select(optimazaionTask.ProductId).ToOne();
if (spuSaleInfo == null)
throw new BusinessException($"未找到spu{optimazaionTask.ProductId}销量");
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);
#endregion
#region 更新待议价任务
updateTask = fsql.Update(optimazaionTask.Id)
.Set(t => t.IsOptimizationCompleted, true)
.Set(t => t.CompletionTime, DateTime.Now);
#endregion
#region 更新待议价限时任务
updateTimeLimitTask = fsql.Update().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(currentOptimazaionChildTaskList.Id)
.Set(sc => sc.IsOptimizationCompleted, true)
.Set(sc => sc.CompletionTime, DateTime.Now);
#endregion
fsql.Transaction(() =>
{
updateChildTask?.ExecuteAffrows();
updateTask?.ExecuteAffrows();
updateSpuSaleInfo?.ExecuteAffrows();
updateTimeLimitTask?.ExecuteAffrows();
});
}
}
}