From d5d1dc9ab9680152e9d670ef4424fc8c45e83205 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 28 Feb 2024 17:39:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=89=AF=E5=BA=93=E9=80=9A=E7=9F=A5=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SkuOptimizationBusiness.cs | 68 ++++++++- .../Db/BBWY/PurchaseOrderSku.cs | 130 ++++++++++++++++++ 2 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 BBWYB.Server.Model/Db/BBWY/PurchaseOrderSku.cs diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index 9e34ac6..3308f91 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.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 Yitter.IdGenerator; @@ -16,11 +17,76 @@ namespace BBWYB.Server.Business this.fsqlManager = fsqlManager; } + public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s) + { + if (s.IsFirstPurchaseCompleted == false) + return Enums.TriggerOptimizationReason.首次采购; + if (s.IsFirstPurchaseCompleted == true && + s.IsFirstOptimizationCompleted == false && + s.ItemCount - s.FirstPurchaseCompletedItemCount >= 20) + return Enums.TriggerOptimizationReason.首次优化; + if (s.IsFirstOptimizationCompleted == true && s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + return Enums.TriggerOptimizationReason.再次优化; + return null; + } + public void LKInventoryAlertNotification(BatchLKInventoryAlertRequest request) { + #region 确定JDSKU对应的拳探SKU和拳探SPU + var jdSkuIdList = request.Items.Select(x => x.Sku).Distinct().ToList(); + + var jdqtskuList = fsqlManager.BBWYCfsql.Select() + .Where(ps1 => ps1.ShopId == request.ShopId && jdSkuIdList.Contains(ps1.SkuId)) + .GroupBy(ps1 => ps1.SkuId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) }) + .From() + .InnerJoin((ps1, ps2) => ps1.MaxId == ps2.Id) + .ToList((ps1, ps2) => ps2); + + var qtSkuIdList = jdqtskuList.Select(x => x.PurchaseSkuIds).Distinct().ToList(); + + var productSkuList = fsql.Select(qtSkuIdList).ToList(); + var productIdList = productSkuList.Select(ps => ps.ProductId).Distinct().ToList(); + var spuTotalInfoList = fsql.Select().Where(spi => productIdList.Contains(spi.ProductId)).ToList(); + #endregion + + + //查询已存在未结束的优化任务 + var dbSkuOptimizationTaskList = fsql.Select() + .Where(t => t.ShopId == request.ShopId && + t.IsOptimizationCompleted == false && + qtSkuIdList.Contains(t.SkuId)) + .ToList(); + + foreach (var reqItem in request.Items) + { + var qtsku = jdqtskuList.FirstOrDefault(x => x.SkuId == reqItem.Sku); + if (qtsku == null) + continue; + var qtskuId = qtsku.PurchaseSkuIds; //拳探skuId + + if (dbSkuOptimizationTaskList.Any(s => s.SkuId == qtskuId)) //过滤未结束的sku + continue; + + var productSku = productSkuList.FirstOrDefault(ps => ps.Id == qtskuId); + if (productSku == null) + continue; + + var spuTotalInfo = spuTotalInfoList.FirstOrDefault(psi=>psi.ProductId == productSku.ProductId); //spu销量 + if (spuTotalInfo == null) + continue; + + var reason = GetOptimizationReason(spuTotalInfo); //过滤不需要优化的spu + if (reason == null) + continue; + + + } } + + /// /// 完成优化 /// @@ -111,7 +177,7 @@ namespace BBWYB.Server.Business .Set(sc => sc.IsOptimizationCompleted, true) .Set(sc => sc.CompletionTime, DateTime.Now); #endregion - + fsql.Transaction(() => { updateChildTask?.ExecuteAffrows(); diff --git a/BBWYB.Server.Model/Db/BBWY/PurchaseOrderSku.cs b/BBWYB.Server.Model/Db/BBWY/PurchaseOrderSku.cs new file mode 100644 index 0000000..4dd7ad3 --- /dev/null +++ b/BBWYB.Server.Model/Db/BBWY/PurchaseOrderSku.cs @@ -0,0 +1,130 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System; + +namespace BBWYB.Server.Model.Db.BBWY +{ + + /// + /// 采购商品表 + /// + [Table(Name = "purchaseordersku", DisableSyncStructure = true)] + public partial class PurchaseOrderSku + { + [Column(IsPrimary = true)] + public long Id { get; set; } + + /// + /// 打包耗材费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? ConsumableAmount { get; set; } = 0.00M; + + /// + /// 创建时间 + /// + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 头程运费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? FirstFreight { get; set; } = 0.00M; + + + /// + /// 入仓费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? InStorageAmount { get; set; } = 0.00M; + + /// + /// Sku Logo + /// + + public string Logo { get; set; } + + /// + /// 单价 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Price { get; set; } = 0.00M; + + /// + /// 采购货款 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? ProductAmount { get; set; } + + [Column(StringLength = 100)] + public string ProductId { get; set; } + + /// + /// 采购金额(采购货款+采购运费) + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PurchaseAmount { get; set; } + + /// + /// 采购运费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PurchaseFreight { get; set; } + + /// + /// 采购单Id + /// + [Column(StringLength = 100)] + public string PurchaseOrderId { get; set; } + + /// + /// 采购方案Id + /// + + public long? PurchaseSchemeId { get; set; } + + /// + /// 采购SkuId串 + /// + [Column(StringLength = 500)] + public string PurchaseSkuIds { get; set; } + + /// + /// 质检费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? QualityInspectionAmount { get; set; } = 0.00M; + + /// + /// 采购数量 + /// + + public int? Quantity { get; set; } + + /// + /// 店铺Id + /// + + public long? ShopId { get; set; } + + [Column(StringLength = 100)] + public string SkuId { get; set; } + + /// + /// Sku标题 + /// + + public string SkuTitle { get; set; } + + [Column(MapType = typeof(int?))] + public Enums.StockType? StockType { get; set; } + + /// + /// 齐库任务Id + /// + public long? QiKuTaskId { get; set; } + + } + +}