From 34e781770768e8880316432c646806faf5fb4e4a Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Thu, 7 Mar 2024 03:38:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=90=8C=E6=AD=A5=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5SPU=E7=BA=A7=E5=88=AB=E4=BC=98=E5=8C=96=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 178 +++++++++++------- BBWYB.Server.Model/Db/BBWY/SkuRecentCost.cs | 99 ++++++++++ .../Db/SpuOptimization/Skuoptimizationtask.cs | 12 +- .../Spuoptimizationbargainteamtask.cs | 8 +- .../Spuoptimizationcompetitivetendertask.cs | 14 +- .../Db/SpuOptimization/Spuoptimizationtask.cs | 26 +-- 6 files changed, 240 insertions(+), 97 deletions(-) create mode 100644 BBWYB.Server.Model/Db/BBWY/SkuRecentCost.cs diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 35f0749..3725276 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -2,6 +2,7 @@ using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Db.BBWY; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json.Linq; @@ -19,6 +20,7 @@ namespace BBWYB.Server.Business.Sync private TaskSchedulerManager taskSchedulerManager; private List timeLimitTaskTypes; private TimeLimitRules timeLimitRules; + private FreeSqlMultiDBManager fsqlManager; public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, @@ -26,7 +28,8 @@ namespace BBWYB.Server.Business.Sync OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager, - TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) + TimeLimitRules timeLimitRules, + FreeSqlMultiDBManager fsqlManager) : base(fsql, nLogManager, idGenerator) { this.opPlatformClientFactory = opPlatformClientFactory; this.venderBusiness = venderBusiness; @@ -37,6 +40,7 @@ namespace BBWYB.Server.Business.Sync Enums.TimeLimitTaskType.待议价任务 }; this.timeLimitRules = timeLimitRules; + this.fsqlManager = fsqlManager; } public void AutoOrderSync() @@ -145,8 +149,8 @@ namespace BBWYB.Server.Business.Sync List insertSpuOptimizationTaskList = new List(); List insertSkuOptimizationTaskList = new List(); - List insertSkuOptimizationBargainTeamTaskList = new List(); - List insertSkuOptimizationCompetitiveTenderTaskList = new List(); + List insertSpuOptimizationBargainTeamTaskList = new List(); + List insertSpuOptimizationCompetitiveTenderTaskList = new List(); #endregion @@ -424,7 +428,7 @@ namespace BBWYB.Server.Business.Sync var includeSpuOrderList = waitToCheckSkuSaleOrderList.Where(o => o.OrderSkuList.Any(osku => osku.ProductId == spuGroup.Key)); var sourceShopName = string.Empty; - //京东sku-拳探sku下单关系映射表 + //拳探sku-京东sku下单关系映射表 var mappingQT_JDSKUDictionary = new Dictionary(); #region 解析来源店铺数据 @@ -456,72 +460,118 @@ namespace BBWYB.Server.Business.Sync } } #endregion - } - } - foreach (var waitCheckOrder in waitToCheckSkuSaleOrderList) - { + #region 读取JDSKU预估金额 + var jdskus = mappingQT_JDSKUDictionary.Values.ToList(); + var jdskuRecentCostList = fsqlManager.BBWYCfsql.Select(jdskus).ToList(); + #endregion - foreach (var waitCheckOrderSku in waitCheckOrder.OrderSkuList) - { - if (noFisrstPurchasedSpuList.Contains(waitCheckOrderSku.ProductId) && - !dbSpuOptimizationTaskList.Any(t => t.ProductId == waitCheckOrderSku.ProductId) && - !insertSpuOptimizationTaskList.Any(t => t.SkuId == waitCheckOrderSku.SkuId)) + #region 处理SKU分组 + var skuGroups = spuGroup.GroupBy(osku => osku.SkuId).ToList(); + var skuIdList = skuGroups.Select(g => g.Key).ToList(); + #endregion + + #region 创建SPU优化任务 + var spuOptimizationTask = new SpuOptimizationTask() + { + Id = idGenerator.NewLong(), + BelongShopName = sourceShopName, + CompletionTime = null, + CreateTime = DateTime.Now, + IsOptimizationCompleted = false, + LastOptimizationTime = null, + ProductId = spuGroup.Key, + ShopId = shopId, + ProductTitle = spuGroup.FirstOrDefault()?.ProductTitle, + TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, + PreSkuCount = skuGroups.Count(), + PreItemCount = 0, + PrePurchaseAmount = 0M + }; + #endregion + + #region 创建SKU优化任务 + foreach (var skuGroup in skuGroups) { - #region 创建待优化任务 + mappingQT_JDSKUDictionary.TryGetValue(skuGroup.Key, out string jdSkuId); + var preItemCount = skuGroup.Sum(osku => osku.Quantity); + var prePurchaseAmount = 0M; + if (!string.IsNullOrEmpty(jdSkuId)) + { + var jdSkuRecentCost = jdskuRecentCostList.FirstOrDefault(x => x.SkuId == jdSkuId); + if (jdSkuRecentCost != null) + { + prePurchaseAmount = (jdSkuRecentCost.SingleSkuAmount ?? 0M + + jdSkuRecentCost.SingleFirstFreight ?? 0M + + jdSkuRecentCost.SingleFreight ?? 0M + + jdSkuRecentCost.SingleDeliveryFreight ?? 0M + + jdSkuRecentCost.SingleConsumableAmount ?? 0M + + jdSkuRecentCost.SingleInStorageAmount ?? 0M + + jdSkuRecentCost.SingleOutStorageAmount ?? 0M + + jdSkuRecentCost.SinglePackagingLaborAmount ?? 0M + + jdSkuRecentCost.SingleOperationAmount ?? 0M) * preItemCount; + } + } var skuOptimizationTask = new SkuOptimizationTask() { Id = idGenerator.NewLong(), - PreItemCount = 0, - PrePurchasedAmount = 0, - IsOptimizationCompleted = false, - IsPurchasementCompleted = false, CreateTime = DateTime.Now, - SafeWarningRemainingDay = 0, - TriggerOptimizationReason = Enums.TriggerOptimizationReason.首次采购, - SkuId = waitCheckOrderSku.SkuId, - ShopId = shopId, - ProductId = waitCheckOrderSku.ProductId, - BelongShopName = sourceShopName, - CompletionTime = null, - JDSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == waitCheckOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, - LastOptimizationRatio = 0, - LastPurchasePrice = 0, - LastOptimizationTime = null + JDSkuId = jdSkuId, + PreItemCount = preItemCount, + SkuId = skuGroup.Key, + SpuOptimizationTaskId = spuOptimizationTask.Id, + PrePurchaseAmount = prePurchaseAmount }; - insertSkuOptimizationTaskList.Add(skuOptimizationTask); - #endregion - #region 创建待优化子任务 + //累计spu优化任务信息 + spuOptimizationTask.PreItemCount += preItemCount; + spuOptimizationTask.PrePurchaseAmount += prePurchaseAmount; + } + #endregion + + #region 创建SPU优化议价组任务 + foreach (var department in bargainTeamList) + { + var spuOptimizationBargainTeamTask = new SpuOptimizationBargainTeamTask() { - foreach (var department in bargainTeamList) - { - var skuOptimizationChildTask = new SkuOptimizationChildTask() - { - Id = idGenerator.NewLong(), - BelongTeamId = department.Id, - BelongTeamName = department.DepartmentName, - CompletionTime = null, - IsOptimizationCompleted = false, - OptimizationTaskId = skuOptimizationTask.Id - }; - insertSkuOptimizationChildTaskList.Add(skuOptimizationChildTask); - - #region 创建竞标任务 - var schemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.SkuId == waitCheckOrderSku.SkuId && - ps.BelongBargainTeamId == department.Id) - .ToList(); + Id = idGenerator.NewLong(), + BelongTeamId = department.Id, + BelongTeamName = department.DepartmentName, + CompletionTime = null, + IsOptimizationCompleted = false, + SpuOptimizationTaskId = spuOptimizationTask.Id + }; + insertSpuOptimizationBargainTeamTaskList.Add(spuOptimizationBargainTeamTask); - #endregion - } + #region 创建采购方案竞标任务 + var waitJoinSchemeList = waitToCompetitiveTenderSchemeList.Where(ps => ps.BelongBargainTeamId == department.Id && + skuIdList.Contains(ps.SkuId)) + .ToList(); + if (waitJoinSchemeList.Count() > 0) + { + insertSpuOptimizationCompetitiveTenderTaskList.AddRange(waitJoinSchemeList.Select(ps => new SpuOptimizationCompetitiveTenderTask() + { + Id = idGenerator.NewLong(), + BargainTeamId = ps.BelongBargainTeamId, + CreateTime = DateTime.Now, + IsUpdateQuotedPrice = false, + SchemeGroupId = ps.SchemeGroupId, + SchemeId = ps.Id, + SkuId = ps.SkuId, + SpuOptimizationBargainTeamTaskId = spuOptimizationBargainTeamTask.Id, + SpuOptimizationTaskId = spuOptimizationTask.Id + })); } #endregion + } + #endregion - #region 创建待优化限时任务 + #region 创建优化限时任务 + { //判断sku是否首次采购 - var isFirst = !dbSkuTotalSaleInfoList.Any(s => s.SkuId == waitCheckOrderSku.SkuId); + var isFirst = !dbSpuTotalSaleInfoList.Any(s => s.ProductId == spuGroup.Key); insertTimeLimitTaskList.Add(new TimeLimitTask() { @@ -532,13 +582,13 @@ namespace BBWYB.Server.Business.Sync //OrderId = o.OrderId, //OrderSn = o.OrderSn, ShopId = shopId, - SkuId = waitCheckOrderSku.SkuId, + //SkuId = waitCheckOrderSku.SkuId, TaskType = Enums.TimeLimitTaskType.待议价任务, - TaskId = skuOptimizationTask.Id, + TaskId = spuOptimizationTask.Id, Remark = "首次采购限时任务" }); - #endregion } + #endregion } } } @@ -564,14 +614,14 @@ namespace BBWYB.Server.Business.Sync if (insertTimeLimitTaskList.Count() > 0) fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows(); - //if (insertSkuOptimizationTaskList.Count() > 0) - // fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); - - //if (insertSkuOptimizationChildTaskList.Count() > 0) - // fsql.Insert(insertSkuOptimizationChildTaskList).ExecuteAffrows(); - - //if (insertCompetitiveTenderList.Count() > 0) - // fsql.Insert(insertCompetitiveTenderList).ExecuteAffrows(); + if (insertSpuOptimizationTaskList.Count() > 0) + fsql.Insert(insertSpuOptimizationTaskList).ExecuteAffrows(); + if (insertSkuOptimizationTaskList.Count() > 0) + fsql.Insert(insertSkuOptimizationTaskList).ExecuteAffrows(); + if (insertSpuOptimizationBargainTeamTaskList.Count() > 0) + fsql.Insert(insertSpuOptimizationBargainTeamTaskList).ExecuteAffrows(); + if (insertSpuOptimizationCompetitiveTenderTaskList.Count() > 0) + fsql.Insert(insertSpuOptimizationCompetitiveTenderTaskList).ExecuteAffrows(); if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) diff --git a/BBWYB.Server.Model/Db/BBWY/SkuRecentCost.cs b/BBWYB.Server.Model/Db/BBWY/SkuRecentCost.cs new file mode 100644 index 0000000..8ffcaa6 --- /dev/null +++ b/BBWYB.Server.Model/Db/BBWY/SkuRecentCost.cs @@ -0,0 +1,99 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db.BBWY +{ + + [Table(Name = "skurecentcost", DisableSyncStructure = true)] + public partial class SkuRecentCost + { + + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string SkuId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + [Column(StringLength = 50)] + public string ProductId { get; set; } + + /// + /// 最近一笔订单来源 + /// + [Column(StringLength = 50)] + public string RecentOrderId { get; set; } + + [Column(DbType = "bigint")] + public long? ShopId { get; set; } + + /// + /// 耗材费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleConsumableAmount { get; set; } = 0.00M; + + /// + /// 发货运费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleDeliveryFreight { get; set; } = 0.00M; + + /// + /// 头程运费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleFirstFreight { get; set; } + + /// + /// 采购运费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleFreight { get; set; } = 0.00M; + + /// + /// 入仓操作费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleInStorageAmount { get; set; } = 0.00M; + + /// + /// 操作费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleOperationAmount { get; set; } = 0.00M; + + /// + /// 出仓操作费(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleOutStorageAmount { get; set; } = 0.00M; + + ///// + ///// 退货入仓操作费(单件) + ///// + //[Column(DbType = "decimal(20,2)")] + //public decimal? SingleRefundInStorageAmount { get; set; } = 0.00M; + + /// + /// SKU成本(单件) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SingleSkuAmount { get; set; } + + ///// + ///// 仓储费(单件) + ///// + //[Column(DbType = "decimal(20,2)")] + //public decimal? SingleStorageAmount { get; set; } = 0.00M; + + [Column(DbType = "datetime")] + public DateTime? UpdateTime { get; set; } + + /// + /// 包装人工单价 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SinglePackagingLaborAmount { get; set; } = 0.00M; + + } + +} diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs index cd940c4..2c5c53e 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Skuoptimizationtask.cs @@ -20,28 +20,22 @@ namespace BBWYB.Server.Model.Db public string JDSkuId { get; set; } /// - /// 预估件数;预估件数 + /// 预估件数 /// [Column(DbType = "int")] public int? PreItemCount { get; set; } /// - /// 预估采购金额;预估采购金额 + /// 预估采购金额 /// [Column(DbType = "decimal(18,2)")] public decimal? PrePurchaseAmount { get; set; } - /// - /// 预估Sku数;预估Sku数 - /// - [Column(DbType = "int")] - public int? PreSkuCount { get; set; } - [Column(StringLength = 50)] public string SkuId { get; set; } /// - /// Spu优化任务Id;Spu优化任务Id + /// Spu优化任务Id /// [Column(DbType = "bigint")] public long? SpuOptimizationTaskId { get; set; } diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs index 810e234..19825bd 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationbargainteamtask.cs @@ -14,25 +14,25 @@ namespace BBWYB.Server.Model.Db public long Id { get; set; } /// - /// 团队Id (议价组Id);团队Id (议价组Id) + /// 团队Id (议价组Id) /// [Column(StringLength = 50)] public string BelongTeamId { get; set; } /// - /// 议价组名称;议价组名称 + /// 议价组名称 /// [Column(StringLength = 50)] public string BelongTeamName { get; set; } /// - /// 完成时间;完成时间 + /// 完成时间 /// [Column(DbType = "datetime")] public DateTime? CompletionTime { get; set; } /// - /// 是否优化完成;是否优化完成 + /// 是否优化完成 /// public bool? IsOptimizationCompleted { get; set; } diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs index 6c0c73a..17148f8 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationcompetitivetendertask.cs @@ -11,10 +11,10 @@ namespace BBWYB.Server.Model.Db { [Column(IsPrimary = true, IsNullable = false)] - public string Id { get; set; } + public long Id { get; set; } /// - /// 议价组Id;议价组Id + /// 议价组Id /// [Column(StringLength = 50)] public string BargainTeamId { get; set; } @@ -23,18 +23,18 @@ namespace BBWYB.Server.Model.Db public DateTime? CreateTime { get; set; } /// - /// 是否更新报价;是否更新报价 + /// 是否更新报价 /// public bool? IsUpdateQuotedPrice { get; set; } = false; /// - /// 采购方案分组Id;采购方案分组Id + /// 采购方案分组Id /// [Column(DbType = "bigint")] public long? SchemeGroupId { get; set; } /// - /// 采购方案Id;采购方案Id + /// 采购方案Id /// [Column(DbType = "bigint")] public long? SchemeId { get; set; } @@ -43,13 +43,13 @@ namespace BBWYB.Server.Model.Db public string SkuId { get; set; } /// - /// Spu优化议价组任务Id;Spu优化议价组任务Id + /// Spu优化议价组任务Id /// [Column(DbType = "bigint")] public long? SpuOptimizationBargainTeamTaskId { get; set; } /// - /// Spu优化任务Id;Spu优化任务Id + /// Spu优化任务Id /// [Column(DbType = "bigint")] public long? SpuOptimizationTaskId { get; set; } diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs index 162a0b3..97c0020 100644 --- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs +++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs @@ -11,37 +11,37 @@ namespace BBWYB.Server.Model.Db { /// - /// 待优化任务Id;待优化任务Id + /// 待优化任务Id /// [Column(DbType = "bigint", IsPrimary = true)] public long Id { get; set; } /// - /// 需求方店铺Id;需求方店铺Id + /// 需求方店铺Id /// [Column(DbType = "bigint")] public long? BelongShopId { get; set; } /// - /// 需求方店铺名称;需求方店铺名称 + /// 需求方店铺名称 /// [Column(StringLength = 50)] public string BelongShopName { get; set; } /// - /// 完成优化时间;完成优化时间 + /// 完成优化时间 /// [Column(DbType = "datetime")] public DateTime? CompletionTime { get; set; } /// - /// 创建时间;创建时间 + /// 创建时间 /// [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } /// - /// 是否优化完成;是否优化完成 + /// 是否优化完成 /// public bool? IsOptimizationCompleted { get; set; } @@ -52,31 +52,31 @@ namespace BBWYB.Server.Model.Db public string ProductTitle { get; set; } /// - /// 上次优化时间;上次优化时间 + /// 上次优化时间 /// [Column(DbType = "datetime")] public DateTime? LastOptimizationTime { get; set; } /// - /// 预估件数;预估件数 + /// 预估件数 /// [Column(DbType = "int")] public int? PreItemCount { get; set; } /// - /// 预估采购金额;预估采购金额 + /// 预估采购金额 /// [Column(DbType = "decimal(18,2)")] public decimal? PrePurchaseAmount { get; set; } /// - /// 预估Sku数;预估Sku数 + /// 预估Sku数 /// [Column(DbType = "int")] public int? PreSkuCount { get; set; } /// - /// 店铺Id;店铺Id + /// 店铺Id /// [Column(DbType = "bigint")] public long? ShopId { get; set; } @@ -84,8 +84,8 @@ namespace BBWYB.Server.Model.Db /// /// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2;触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 /// - [Column(DbType = "int")] - public int? TriggerOptimizationReason { get; set; } + [Column(DbType = "int", MapType = typeof(int?))] + public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; } }