From a08268ffd76458553ae0f44991e8b30c7a497bc7 Mon Sep 17 00:00:00 2001
From: shanji <18996038927@163.com>
Date: Wed, 28 Feb 2024 03:33:03 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Controllers/SkuOptimizationController.cs | 12 +-
.../SkuOptimizationBusiness.cs | 165 ++++++++----------
.../Sync/OrderSyncBusiness.cs | 31 +++-
.../Vender/VenderBusiness.cs | 6 +
BBWYB.Server.Model/Db/MDS/User.cs | 132 ++++++++++++++
BBWYB.Server.Model/Db/MDS/Userdepartment.cs | 56 ++++++
.../Db/Product/Skuoptimizationchildtask.cs | 44 +++++
.../Response/MDS/UserDepartmentResponse.cs | 8 +
8 files changed, 360 insertions(+), 94 deletions(-)
create mode 100644 BBWYB.Server.Model/Db/MDS/User.cs
create mode 100644 BBWYB.Server.Model/Db/MDS/Userdepartment.cs
create mode 100644 BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs
create mode 100644 BBWYB.Server.Model/Dto/Response/MDS/UserDepartmentResponse.cs
diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs
index 8c0b93e..61d2086 100644
--- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs
+++ b/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
}
///
- /// 完成待优化任务 (相同spu的优化任务会一起完成)
+ /// 完成待优化任务(当所有议价组的子任务优化完成, 所属待优化任务才会完成)
///
/// 待优化任务Id
[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);
}
}
}
diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs
index 160fabf..9e34ac6 100644
--- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs
+++ b/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
/// 完成优化
///
///
- public void CompleteOptimization(long taskId)
+ ///
+ ///
+ 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("优化任务已完成");
- var optimazationTaskIdList = fsql.Select()
- .Where(t => t.ProductId == optimazaionTask.ProductId && t.IsOptimizationCompleted == false)
- .ToList(t => t.Id);
-
+ #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))
+ {
+ //全部完成
- var spuSaleInfo = fsql.Select(optimazaionTask.ProductId).ToOne();
- if (spuSaleInfo == null)
+ #region 更新spu销量表
+ var spuSaleInfo = fsql.Select(optimazaionTask.ProductId).ToOne();
+ if (spuSaleInfo == null)
- throw new BusinessException($"未找到spu{optimazaionTask.ProductId}销量");
+ throw new BusinessException($"未找到spu{optimazaionTask.ProductId}销量");
- var updateSpuSaleInfo = fsql.Update(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 &&
@@ -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(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(() =>
{
- fsql.Update().Set(t => t.IsOptimizationCompleted, true)
- .Set(t => t.CompletionTime, DateTime.Now)
- .Where(t => optimazationTaskIdList.Contains(t.Id) && t.IsOptimizationCompleted == false)
- .ExecuteAffrows();
-
- fsql.Update().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();
- 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
- }
- }
- }
- }
- */
}
}
diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
index 3640fb7..4a86044 100644
--- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
+++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
@@ -20,7 +20,13 @@ namespace BBWYB.Server.Business.Sync
private List 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 updateSpuTotalSaleInfoList = new List();
List insertSkuOptimizationTaskList = new List();
+ List insertSkuOptimizationChildTaskList = new List();
#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();
diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs
index e2ff359..9c54440 100644
--- a/BBWYB.Server.Business/Vender/VenderBusiness.cs
+++ b/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();
}
+ public IList GetYiJiaGroup()
+ {
+ return fsqlManager.MDSfsql.Select().Where(d => d.ParentDepartmentId == "1760971468360912896").ToList();
+ }
+
public string SaveShopSetting(ShopSettingRequest shopSettingRequest)
{
diff --git a/BBWYB.Server.Model/Db/MDS/User.cs b/BBWYB.Server.Model/Db/MDS/User.cs
new file mode 100644
index 0000000..5de246a
--- /dev/null
+++ b/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
+ {
+
+ ///
+ /// 主键
+ ///
+ [Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
+ public string Id { get; set; }
+
+ ///
+ /// 业务ID列表
+ ///
+ [Column(StringLength = -2)]
+ public string BusinessIds { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ [Column(DbType = "datetime")]
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 创建人Id
+ ///
+ [Column(StringLength = 50)]
+ public string CreatorId { get; set; }
+
+ ///
+ /// 否已删除
+ ///
+ [Column(DbType = "tinyint(4)")]
+ public sbyte Deleted { get; set; }
+
+ ///
+ /// 主部门ID
+ ///
+ [Column(StringLength = 50)]
+ public string DepartmentId { get; set; }
+
+ ///
+ /// 即将过期积分
+ ///
+
+ public int? FailureIntegral { get; set; }
+
+ ///
+ /// 当日冻结积分
+ ///
+
+ public int? FreezeIntegral { get; set; }
+
+ ///
+ /// 是否冻结
+ ///
+ [Column(DbType = "tinyint(4)")]
+ public sbyte? IsFreeze { get; set; }
+
+ ///
+ /// 最后积分检测日期
+ ///
+ [Column(DbType = "datetime")]
+ public DateTime? LastIntegralDate { get; set; }
+
+ ///
+ /// 登录IP
+ ///
+
+ public string LoginIp { get; set; }
+
+ ///
+ /// 最大任务数量
+ ///
+
+ public int? MaxPriceTaskCount { get; set; }
+
+ ///
+ /// 角色ID
+ ///
+ [Column(StringLength = 50)]
+ public string RoleId { get; set; }
+
+ ///
+ /// 子部门列表
+ ///
+ [Column(StringLength = -1)]
+ public string SonDepartmentIds { get; set; }
+
+ ///
+ /// 任务重复检测更新
+ ///
+ [Column(DbType = "datetime")]
+ public DateTime? UpdateRepeatDate { get; set; }
+
+ ///
+ /// 用户经验值
+ ///
+
+ public int? UserExp { get; set; }
+
+ ///
+ /// 用户积分
+ ///
+
+ public int? UserIntegral { get; set; }
+
+ ///
+ /// 用户名
+ ///
+
+ public string UserName { get; set; }
+
+ ///
+ /// 花名
+ ///
+
+ public string UserNick { get; set; }
+
+ ///
+ /// 用户密码
+ ///
+
+ public string UserPwd { get; set; }
+
+ }
+
+}
diff --git a/BBWYB.Server.Model/Db/MDS/Userdepartment.cs b/BBWYB.Server.Model/Db/MDS/Userdepartment.cs
new file mode 100644
index 0000000..6f5ad8d
--- /dev/null
+++ b/BBWYB.Server.Model/Db/MDS/Userdepartment.cs
@@ -0,0 +1,56 @@
+using FreeSql.DataAnnotations;
+
+namespace BBWYB.Server.Model.Db
+{
+
+ ///
+ /// 团队
+ ///
+ [Table(Name = "userdepartment", DisableSyncStructure = true)]
+ public partial class Userdepartment
+ {
+
+ ///
+ /// 主键
+ ///
+ [Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
+ public string Id { get; set; }
+
+ ///
+ /// 管理ID集合
+ ///
+ [Column(StringLength = -1)]
+ public string AdminUserIds { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ [Column(DbType = "datetime")]
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 创建人Id
+ ///
+ [Column(StringLength = 50)]
+ public string CreatorId { get; set; }
+
+ ///
+ /// 否已删除
+ ///
+ [Column(DbType = "tinyint(4)")]
+ public sbyte Deleted { get; set; }
+
+ ///
+ /// 部门名称
+ ///
+ public string DepartmentName { get; set; }
+
+ ///
+ /// 上级部门
+ ///
+ [Column(StringLength = 50)]
+ public string ParentDepartmentId { get; set; }
+
+ }
+
+}
diff --git a/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs b/BBWYB.Server.Model/Db/Product/Skuoptimizationchildtask.cs
new file mode 100644
index 0000000..f596f33
--- /dev/null
+++ b/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; }
+
+ ///
+ /// 团队Id (议价组Id)
+ ///
+ [Column(StringLength = 50)]
+ public string BelongTeamId { get; set; }
+
+ ///
+ /// 团队Name (议价组Name)
+ ///
+ [Column(StringLength = 50)]
+ public string BelongTeamName { get; set; }
+
+ ///
+ /// 完成时间
+ ///
+ [Column(DbType = "datetime")]
+ public DateTime? CompletionTime { get; set; }
+
+ ///
+ /// 是否优化完成
+ ///
+ public bool? IsOptimizationCompleted { get; set; } = false;
+
+ ///
+ /// 优化任务Id
+ ///
+ [Column(DbType = "bigint")]
+ public long? OptimizationTaskId { get; set; }
+
+ }
+
+}
diff --git a/BBWYB.Server.Model/Dto/Response/MDS/UserDepartmentResponse.cs b/BBWYB.Server.Model/Dto/Response/MDS/UserDepartmentResponse.cs
new file mode 100644
index 0000000..1f4c667
--- /dev/null
+++ b/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
+ {
+ }
+}