diff --git a/BBWYB.Server.API/Controllers/BaseApiController.cs b/BBWYB.Server.API/Controllers/BaseApiController.cs index 283c4fe..d851464 100644 --- a/BBWYB.Server.API/Controllers/BaseApiController.cs +++ b/BBWYB.Server.API/Controllers/BaseApiController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Cors; +using BBWYB.Common.Models; +using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; @@ -18,7 +19,10 @@ namespace BBWYB.Server.API.Controllers protected string GetUserId() { - return httpContextAccessor?.HttpContext?.User.Claims.Where(x => x.Type == "userId")?.FirstOrDefault()?.Value; + var userId = httpContextAccessor?.HttpContext?.User.Claims.Where(x => x.Type == "userId")?.FirstOrDefault()?.Value; + if (string.IsNullOrEmpty(userId)) + throw new BusinessException("未从token中获取到userId"); + return userId; } protected string GetToken() diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs index 61d2086..a480db1 100644 --- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs +++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs @@ -33,9 +33,19 @@ namespace BBWYB.Server.API.Controllers public void CompleteOptimization([FromRoute] long taskId) { var userId = GetUserId(); - if (string.IsNullOrEmpty(userId)) - throw new BusinessException("未从token中获取到userId"); skuOptimizationBusiness.CompleteOptimization(taskId, userId); } + + /// + /// 查询待议价任务列表 + /// + /// + /// + [HttpPost] + public ListResponse GetNoCompletionSkuOptimizationTask([FromBody] PageRequest request) + { + var userId = GetUserId(); + return skuOptimizationBusiness.GetNoCompletionSkuOptimizationTask(request, userId); + } } } diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 545e42a..7f242ad 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -1,4 +1,5 @@ -using BBWYB.Common.Log; +using BBWYB.Common.Extensions; +using BBWYB.Common.Log; using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; @@ -23,6 +24,21 @@ namespace BBWYB.Server.Business this.timeLimitRules = timeLimitRules; } + private (User user, Userdepartment department) GetYiJiaDepartmentByUserId(string userId) + { + 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("该用户所在部门不属于议价组"); + return (user, department); + } + public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s) { if (s.IsFirstPurchaseCompleted == false) @@ -36,6 +52,11 @@ namespace BBWYB.Server.Business return null; } + /// + /// 良库预警 + /// + /// + /// public void LKInventoryAlertNotification(BatchLKInventoryAlertRequest request) { nLogManager.Default().Info($"LKInventoryAlertNotification {JsonConvert.SerializeObject(request)}"); @@ -203,27 +224,18 @@ namespace BBWYB.Server.Business #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("该用户所在部门不属于议价组"); + var uInfo = GetYiJiaDepartmentByUserId(userId); #endregion #region 验证待议价子任务 var optimazaionChildTaskList = fsql.Select() .Where(sc => sc.OptimizationTaskId == optimazaionTask.Id) .ToList(); - var currentOptimazaionChildTaskList = optimazaionChildTaskList.FirstOrDefault(sc => sc.BelongTeamId == department.Id); + var currentOptimazaionChildTaskList = optimazaionChildTaskList.FirstOrDefault(sc => sc.BelongTeamId == uInfo.department.Id); if (currentOptimazaionChildTaskList == null) - throw new BusinessException($"未找到议价组{department.DepartmentName}的议价子任务"); + throw new BusinessException($"未找到议价组{uInfo.department.DepartmentName}的议价子任务"); if (currentOptimazaionChildTaskList.IsOptimizationCompleted == true) - throw new BusinessException($"{department.DepartmentName}的议价子任务已完成"); + throw new BusinessException($"{uInfo.department.DepartmentName}的议价子任务已完成"); currentOptimazaionChildTaskList.IsOptimizationCompleted = true; #endregion @@ -284,5 +296,66 @@ namespace BBWYB.Server.Business updateTimeLimitTask?.ExecuteAffrows(); }); } + + public ListResponse GetNoCompletionSkuOptimizationTask(PageRequest request, string userId) + { + var uInfo = GetYiJiaDepartmentByUserId(userId); + var taskList = fsql.Select() + .InnerJoin((t, tt) => t.Id == tt.TaskId) + .Where((t, tt) => t.IsOptimizationCompleted == false) + .OrderByDescending((t, tt) => t.CreateTime) + .Count(out var total) + .Page(request.PageIndex, request.PageSize) + .ToList((t, tt) => new SkuOptimizationTask + { + Id = t.Id, + ShopId = t.ShopId, + BelongShopName = t.BelongShopName, + JDSkuId = t.JDSkuId, + ProductId = t.ProductId, + SkuId = t.SkuId, + PreItemCount = t.PreItemCount, + PrePurchasedAmount = t.PrePurchasedAmount, + SafeWarningRemainingDay = t.SafeWarningRemainingDay, + IsOptimizationCompleted = t.IsOptimizationCompleted, + IsPurchasementCompleted = t.IsPurchasementCompleted, + CreateTime = t.CreateTime, + CompletionTime = t.CompletionTime, + TriggerOptimizationReason = t.TriggerOptimizationReason, + LastOptimizationRatio = t.LastOptimizationRatio, + LastPurchasePrice = t.LastPurchasePrice, + LastOptimizationTime = t.LastOptimizationTime, + + TimeLimitTaskId = tt.Id, + TimeLimitTaskBelongTaskId = tt.TaskId, + TimeLimitTaskCompletionTime = tt.CompletionTime, + TimeLimitTaskCreateTme = tt.CreateTme, + TimeLimitTaskExpirationTime = tt.ExpirationTime, + TimeLimitTaskIsTimely = tt.IsTimely, + TimeLimitTaskOrderId = tt.OrderId, + TimeLimitTaskOrderSn = tt.OrderSn, + TimeLimitTaskPayTime = tt.PayTime, + TimeLimitTaskRemark = tt.Remark, + TimeLimitTaskShopId = tt.ShopId, + TimeLimitTaskSkuId = tt.SkuId, + TimeLimitTaskTaskType = tt.TaskType + }).Map>(); + + List taskIdList = taskList.Select(t => t.Id).ToList(); + var childTaskList = fsql.Select().Where(ct => taskIdList.Contains(ct.OptimizationTaskId)).ToList(); + + foreach (var task in taskList) + { + task.ChildTaskList = childTaskList.Where(ct => ct.OptimizationTaskId == task.Id).ToList(); + var currentChildTask = task.ChildTaskList.FirstOrDefault(ct => ct.BelongTeamId == uInfo.user.DepartmentId); + task.IsOptimizationCompletedByCurrentTeam = currentChildTask?.IsOptimizationCompleted ?? false; + } + + return new ListResponse() + { + Items = taskList, + TotalCount = total + }; + } } } diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs index f596f33..9e141c6 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs @@ -37,7 +37,7 @@ namespace BBWYB.Server.Model.Db /// 优化任务Id /// [Column(DbType = "bigint")] - public long? OptimizationTaskId { get; set; } + public long OptimizationTaskId { get; set; } } diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs index 9b5d94e..01259a1 100644 --- a/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/Product/Skuoptimizationtask.cs @@ -88,6 +88,53 @@ namespace BBWYB.Server.Model.Db /// [Column(DbType = "decimal(18,2)")] public decimal? LastPurchasePrice { get; set; } = 0.00M; + + + + #region Extension + + #region TimeLimitTask + [Column(IsIgnore = true)] + public long TimeLimitTaskId { get; set; } + + [Column(IsIgnore = true)] + public DateTime? TimeLimitTaskCompletionTime { get; set; } + + [Column(IsIgnore = true)] + public DateTime? TimeLimitTaskCreateTme { get; set; } + + [Column(IsIgnore = true)] + public DateTime? TimeLimitTaskPayTime { get; set; } + + [Column(IsIgnore = true)] + public DateTime? TimeLimitTaskExpirationTime { get; set; } + + [Column(IsIgnore = true)] + public bool? TimeLimitTaskIsTimely { get; set; } + + [Column(IsIgnore = true)] + public string TimeLimitTaskOrderId { get; set; } + + [Column(IsIgnore = true)] + public string TimeLimitTaskOrderSn { get; set; } + + [Column(IsIgnore = true)] + public long? TimeLimitTaskShopId { get; set; } + + [Column(IsIgnore = true)] + public string TimeLimitTaskSkuId { get; set; } + + [Column(IsIgnore = true)] + public Enums.TimeLimitTaskType? TimeLimitTaskTaskType { get; set; } + + [Column(IsIgnore = true)] + public string TimeLimitTaskRemark { get; set; } + + [Column(IsIgnore = true)] + public long TimeLimitTaskBelongTaskId { get; set; } + #endregion + + #endregion } } diff --git a/BBWYB.Server.Model/Dto/Request/PageRequest.cs b/BBWYB.Server.Model/Dto/Request/PageRequest.cs new file mode 100644 index 0000000..669c0d6 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PageRequest.cs @@ -0,0 +1,9 @@ +namespace BBWYB.Server.Model.Dto +{ + public class PageRequest + { + public int PageIndex { get; set; } + + public int PageSize { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs new file mode 100644 index 0000000..fb19868 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationChildTaskResponse.cs @@ -0,0 +1,8 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class SkuOptimizationChildTaskResponse: SkuOptimizationChildTask + { + } +} diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs new file mode 100644 index 0000000..7241c03 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/Optimization/SkuOptimizationTaskResponse.cs @@ -0,0 +1,20 @@ +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Model.Dto +{ + public class SkuOptimizationTaskResponse : SkuOptimizationTask + { + public IList ChildTaskList { get; set; } + + /// + /// 当前用户所属团队是否完成议价子任务 + /// + public bool IsOptimizationCompletedByCurrentTeam { get; set; } + + /// + /// 限时任务 + /// + public TimeLimitTask TimeLimitTask { get; set;; } + + } +} diff --git a/BBWYB.Server.Model/MappingProfiles.cs b/BBWYB.Server.Model/MappingProfiles.cs index f3a6555..94fd5a2 100644 --- a/BBWYB.Server.Model/MappingProfiles.cs +++ b/BBWYB.Server.Model/MappingProfiles.cs @@ -59,6 +59,20 @@ namespace BBWYB.Server.Model CreateMap(); CreateMap(); CreateMap(); + + CreateMap().ForPath(t => t.TimeLimitTask.Id, opt => opt.MapFrom(f => f.TimeLimitTaskId)) + .ForPath(t => t.TimeLimitTask.CompletionTime, opt => opt.MapFrom(f => f.TimeLimitTaskCompletionTime)) + .ForPath(t => t.TimeLimitTask.ExpirationTime, opt => opt.MapFrom(f => f.TimeLimitTaskExpirationTime)) + .ForPath(t => t.TimeLimitTask.PayTime, opt => opt.MapFrom(f => f.TimeLimitTaskPayTime)) + .ForPath(t => t.TimeLimitTask.IsTimely, opt => opt.MapFrom(f => f.TimeLimitTaskIsTimely)) + .ForPath(t => t.TimeLimitTask.CreateTme, opt => opt.MapFrom(f => f.TimeLimitTaskCreateTme)) + .ForPath(t => t.TimeLimitTask.OrderId, opt => opt.MapFrom(f => f.TimeLimitTaskOrderId)) + .ForPath(t => t.TimeLimitTask.OrderSn, opt => opt.MapFrom(f => f.TimeLimitTaskOrderSn)) + .ForPath(t => t.TimeLimitTask.Remark, opt => opt.MapFrom(f => f.TimeLimitTaskRemark)) + .ForPath(t => t.TimeLimitTask.ShopId, opt => opt.MapFrom(f => f.TimeLimitTaskShopId)) + .ForPath(t => t.TimeLimitTask.SkuId, opt => opt.MapFrom(f => f.TimeLimitTaskSkuId)) + .ForPath(t => t.TimeLimitTask.TaskId, opt => opt.MapFrom(f => f.TimeLimitTaskBelongTaskId)); + } } }