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));
+
}
}
}