Browse Source

完成优化

liangku_skuoptimazation
shanji 1 year ago
parent
commit
a08268ffd7
  1. 12
      BBWYB.Server.API/Controllers/SkuOptimizationController.cs
  2. 143
      BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs
  3. 31
      BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
  4. 6
      BBWYB.Server.Business/Vender/VenderBusiness.cs
  5. 132
      BBWYB.Server.Model/Db/MDS/User.cs
  6. 56
      BBWYB.Server.Model/Db/MDS/Userdepartment.cs
  7. 44
      BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs
  8. 8
      BBWYB.Server.Model/Dto/Response/MDS/UserDepartmentResponse.cs

12
BBWYB.Server.API/Controllers/SkuOptimizationController.cs

@ -1,4 +1,5 @@
using BBWYB.Server.Business;
using BBWYB.Common.Models;
using BBWYB.Server.Business;
using BBWYB.Server.Model.Dto;
using Microsoft.AspNetCore.Mvc;
@ -25,13 +26,16 @@ namespace BBWYB.Server.API.Controllers
}
/// <summary>
/// 完成待优化任务 (相同spu的优化任务会一起完成)
/// 完成待优化任务(当所有议价组的子任务优化完成, 所属待优化任务才会完成)
/// </summary>
/// <param name="taskId">待优化任务Id</param>
[HttpPost("{taskId}")]
public void CompleteOptimization([FromRoute]long taskId)
public void CompleteOptimization([FromRoute] long taskId)
{
skuOptimizationBusiness.CompleteOptimization(taskId);
var userId = GetUserId();
if (string.IsNullOrEmpty(userId))
throw new BusinessException("未从token中获取到userId");
skuOptimizationBusiness.CompleteOptimization(taskId, userId);
}
}
}

143
BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs

@ -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))
{
//全部完成
#region 更新spu销量表
var spuSaleInfo = fsql.Select<SpuTotalSaleInfo>(optimazaionTask.ProductId).ToOne();
if (spuSaleInfo == null)
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
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();
#region 更新待议价任务
updateTask = fsql.Update<SkuOptimizationTask>(optimazaionTask.Id)
.Set(t => t.IsOptimizationCompleted, true)
.Set(t => t.CompletionTime, DateTime.Now);
#endregion
fsql.Update<TimeLimitTask>().Set(t => t.CompletionTime, DateTime.Now)
#region 更新待议价限时任务
updateTimeLimitTask = 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) &&
.Where(t => t.TaskId == optimazaionTask.Id &&
t.CompletionTime == null &&
t.TaskType == Enums.TimeLimitTaskType.)
.ExecuteAffrows();
updateSpuSaleInfo.ExecuteAffrows();
});
t.TaskType == Enums.TimeLimitTaskType.);
#endregion
}
/*
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);
}
#region 更新待议价子任务
updateChildTask = fsql.Update<SkuOptimizationChildTask>(currentOptimazaionChildTaskList.Id)
.Set(sc => sc.IsOptimizationCompleted, true)
.Set(sc => sc.CompletionTime, DateTime.Now);
#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()
fsql.Transaction(() =>
{
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.
updateChildTask?.ExecuteAffrows();
updateTask?.ExecuteAffrows();
updateSpuSaleInfo?.ExecuteAffrows();
updateTimeLimitTask?.ExecuteAffrows();
});
}
#endregion
}
}
}
}
*/
}
}

31
BBWYB.Server.Business/Sync/OrderSyncBusiness.cs

@ -20,7 +20,13 @@ namespace BBWYB.Server.Business.Sync
private List<Enums.TimeLimitTaskType> timeLimitTaskTypes;
private TimeLimitRules timeLimitRules;
public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator)
public OrderSyncBusiness(IFreeSql fsql,
NLogManager nLogManager,
IIdGenerator idGenerator,
OP_PlatformClientFactory opPlatformClientFactory,
VenderBusiness venderBusiness,
TaskSchedulerManager taskSchedulerManager,
TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator)
{
this.opPlatformClientFactory = opPlatformClientFactory;
this.venderBusiness = venderBusiness;
@ -138,6 +144,7 @@ namespace BBWYB.Server.Business.Sync
IList<SpuTotalSaleInfo> updateSpuTotalSaleInfoList = new List<SpuTotalSaleInfo>();
List<SkuOptimizationTask> insertSkuOptimizationTaskList = new List<SkuOptimizationTask>();
List<SkuOptimizationChildTask> insertSkuOptimizationChildTaskList = new List<SkuOptimizationChildTask>();
#endregion
//等待检查sku销量的订单集合
@ -448,6 +455,25 @@ namespace BBWYB.Server.Business.Sync
insertSkuOptimizationTaskList.Add(skuOptimizationTask);
#endregion
#region 创建待优化子任务
{
var yijiagroups = venderBusiness.GetYiJiaGroup();
foreach (var department in yijiagroups)
{
var skuOptimizationChildTask = new SkuOptimizationChildTask()
{
Id = idGenerator.NewLong(),
BelongTeamId = department.Id,
BelongTeamName = department.DepartmentName,
CompletionTime = null,
IsOptimizationCompleted = false,
OptimizationTaskId = skuOptimizationTask.Id
};
insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask);
}
}
#endregion
#region 创建待优化限时任务
//判断sku是否首次采购
@ -530,6 +556,9 @@ namespace BBWYB.Server.Business.Sync
if (insertSkuOptimizationTaskList.Count() > 0)
fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows();
if (insertSkuOptimizationChildTaskList.Count() > 0)
fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows();
if (updateOrderList.Count() > 0)
foreach (var update in updateOrderList)
update.ExecuteAffrows();

6
BBWYB.Server.Business/Vender/VenderBusiness.cs

@ -1,6 +1,7 @@
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Db.Mds;
using BBWYB.Server.Model.Db.MDS;
using BBWYB.Server.Model.Dto;
@ -40,6 +41,11 @@ namespace BBWYB.Server.Business
.ToList<ShopResponse>();
}
public IList<UserDepartmentResponse> GetYiJiaGroup()
{
return fsqlManager.MDSfsql.Select<Userdepartment>().Where(d => d.ParentDepartmentId == "1760971468360912896").ToList<UserDepartmentResponse>();
}
public string SaveShopSetting(ShopSettingRequest shopSettingRequest)
{

132
BBWYB.Server.Model/Db/MDS/User.cs

@ -0,0 +1,132 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
[Table(Name = "user", DisableSyncStructure = true)]
public partial class User
{
/// <summary>
/// 主键
/// </summary>
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public string Id { get; set; }
/// <summary>
/// 业务ID列表
/// </summary>
[Column(StringLength = -2)]
public string BusinessIds { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 创建人Id
/// </summary>
[Column(StringLength = 50)]
public string CreatorId { get; set; }
/// <summary>
/// 否已删除
/// </summary>
[Column(DbType = "tinyint(4)")]
public sbyte Deleted { get; set; }
/// <summary>
/// 主部门ID
/// </summary>
[Column(StringLength = 50)]
public string DepartmentId { get; set; }
/// <summary>
/// 即将过期积分
/// </summary>
public int? FailureIntegral { get; set; }
/// <summary>
/// 当日冻结积分
/// </summary>
public int? FreezeIntegral { get; set; }
/// <summary>
/// 是否冻结
/// </summary>
[Column(DbType = "tinyint(4)")]
public sbyte? IsFreeze { get; set; }
/// <summary>
/// 最后积分检测日期
/// </summary>
[Column(DbType = "datetime")]
public DateTime? LastIntegralDate { get; set; }
/// <summary>
/// 登录IP
/// </summary>
public string LoginIp { get; set; }
/// <summary>
/// 最大任务数量
/// </summary>
public int? MaxPriceTaskCount { get; set; }
/// <summary>
/// 角色ID
/// </summary>
[Column(StringLength = 50)]
public string RoleId { get; set; }
/// <summary>
/// 子部门列表
/// </summary>
[Column(StringLength = -1)]
public string SonDepartmentIds { get; set; }
/// <summary>
/// 任务重复检测更新
/// </summary>
[Column(DbType = "datetime")]
public DateTime? UpdateRepeatDate { get; set; }
/// <summary>
/// 用户经验值
/// </summary>
public int? UserExp { get; set; }
/// <summary>
/// 用户积分
/// </summary>
public int? UserIntegral { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 花名
/// </summary>
public string UserNick { get; set; }
/// <summary>
/// 用户密码
/// </summary>
public string UserPwd { get; set; }
}
}

56
BBWYB.Server.Model/Db/MDS/Userdepartment.cs

@ -0,0 +1,56 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 团队
/// </summary>
[Table(Name = "userdepartment", DisableSyncStructure = true)]
public partial class Userdepartment
{
/// <summary>
/// 主键
/// </summary>
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public string Id { get; set; }
/// <summary>
/// 管理ID集合
/// </summary>
[Column(StringLength = -1)]
public string AdminUserIds { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 创建人Id
/// </summary>
[Column(StringLength = 50)]
public string CreatorId { get; set; }
/// <summary>
/// 否已删除
/// </summary>
[Column(DbType = "tinyint(4)")]
public sbyte Deleted { get; set; }
/// <summary>
/// 部门名称
/// </summary>
public string DepartmentName { get; set; }
/// <summary>
/// 上级部门
/// </summary>
[Column(StringLength = 50)]
public string ParentDepartmentId { get; set; }
}
}

44
BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs

@ -0,0 +1,44 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
[Table(Name = "skuoptimizationchildtask", DisableSyncStructure = true)]
public partial class SkuOptimizationChildTask
{
[Column(DbType = "bigint", IsPrimary = true)]
public long Id { get; set; }
/// <summary>
/// 团队Id (议价组Id)
/// </summary>
[Column(StringLength = 50)]
public string BelongTeamId { get; set; }
/// <summary>
/// 团队Name (议价组Name)
/// </summary>
[Column(StringLength = 50)]
public string BelongTeamName { get; set; }
/// <summary>
/// 完成时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? CompletionTime { get; set; }
/// <summary>
/// 是否优化完成
/// </summary>
public bool? IsOptimizationCompleted { get; set; } = false;
/// <summary>
/// 优化任务Id
/// </summary>
[Column(DbType = "bigint")]
public long? OptimizationTaskId { get; set; }
}
}

8
BBWYB.Server.Model/Dto/Response/MDS/UserDepartmentResponse.cs

@ -0,0 +1,8 @@
using BBWYB.Server.Model.Db;
namespace BBWYB.Server.Model.Dto
{
public class UserDepartmentResponse : Userdepartment
{
}
}
Loading…
Cancel
Save