From b249036627b60fef12175ff1dd026cfe32421f4c Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Fri, 6 Oct 2023 14:23:53 +0800 Subject: [PATCH 1/5] 1 --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 45 +++++++++++-------- .../Db/PurchaseScheme/PurchaseScheme.cs | 5 +++ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 3a7effa..de9ed2e 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -506,29 +506,38 @@ namespace BBWYB.Server.Business #endregion } - #region 更新采购方案 + #region 更新采购方案/配件 { var allCargoParamList = new List(); - request.CargoParamGroupList.ForEach(x => allCargoParamList.AddRange(x.CargoParamList)); - var cargoParamGroupsBySchemeList = allCargoParamList.GroupBy(c => c.SchemeId); - foreach (var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList) - { - var schemeId = cargoParamGroupsByScheme.Key; - var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId; - - var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId) - .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) - .DefaultIfEmpty(0M) - .First()); - var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount); - var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now) - .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost) - .Set(ps => ps.PurchasedCount + 1) - .Set(ps => ps.PurchasedAmount + purchasedAmount); - updatePurchaseSchemeList.Add(update); + #region 更新采购方案 + { + var cargoParamGroupsBySchemeList = allCargoParamList.GroupBy(c => c.SchemeId); + foreach (var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList) + { + var schemeId = cargoParamGroupsByScheme.Key; + var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId; + var skuItemCount = orderSkus.FirstOrDefault(osku => osku.SkuId == skuId)?.ItemTotal ?? 0; + + var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId) + .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) + .DefaultIfEmpty(0M) + .First()); + var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount); + var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now) + .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost) + .Set(ps => ps.PurchasedCount + 1) + .Set(ps => ps.PurchasedItemCount + skuItemCount) + .Set(ps => ps.PurchasedAmount + purchasedAmount); + updatePurchaseSchemeList.Add(update); + } } + #endregion + + #region 更新采购配件 + + #endregion } #endregion diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs index b9679e5..59c320b 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -103,6 +103,11 @@ namespace BBWYB.Server.Model /// 最近议价日期 /// public DateTime? LastBargainingTime { get; set; } + + /// + /// 采购件数 + /// + public int? PurchasedItemCount { get; set; } = 0; } } From 28b3aea00cdf23e44f6646b1af15f3c3505611e6 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 7 Oct 2023 00:31:47 +0800 Subject: [PATCH 2/5] 1 --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index de9ed2e..5b5c5f9 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -322,6 +322,7 @@ namespace BBWYB.Server.Business List insertOrderPurchaseInfos = new List(); List insertOrderPurchaseSkuInfos = new List(); List> updatePurchaseSchemeList = new List>(); + List> updatePssList = new List>(); List insertOrderPurchaseRelationInfoList = new List(); List updatePurchaseTimeLimitTaskOrderSkuList = new List(); List> updatePurchaserList = new List>(); @@ -536,7 +537,12 @@ namespace BBWYB.Server.Business #endregion #region 更新采购配件 - + { + foreach (var cargoParam in allCargoParamList) + { + + } + } #endregion } #endregion From afd26b018f3efb6343a45ece7d7232b22613725a Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 7 Oct 2023 00:59:49 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E9=85=8D=E4=BB=B6=E6=9C=80=E8=BF=91=E9=87=87=E8=B4=AD=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 5b5c5f9..bdeef82 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -539,8 +539,15 @@ namespace BBWYB.Server.Business #region 更新采购配件 { foreach (var cargoParam in allCargoParamList) - { - + { + var createOrderItem = createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId); + if (createOrderItem != null) + { + var update = fsql.Update() + .Set(pss => pss.LastPurchasePriceCost, createOrderItem.Price) + .Where(pss => pss.SkuId == cargoParam.SkuId && pss.SkuPurchaseSchemeId == cargoParam.SchemeId); + updatePssList.Add(update); + } } } #endregion @@ -742,6 +749,11 @@ namespace BBWYB.Server.Business foreach (var update in updatePurchaseSchemeList) update.ExecuteAffrows(); } + if (updatePssList.Count() > 0) + { + foreach (var update in updatePssList) + update.ExecuteAffrows(); + } fsql.Update(request.OrderId).Set(o => o.OrderState, dbOrder.OrderState) .SetIf(!string.IsNullOrEmpty(request.Remark), o => o.PurchaseRemark, request.Remark) .Set(o => o.IsPurchased, true) From db62bd67d020b59f7b5135d807c262d648fa932b Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 7 Oct 2023 01:08:25 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=96=B9=E6=A1=88LastPurchasePriceCost=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index bdeef82..10e787c 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -521,10 +521,17 @@ namespace BBWYB.Server.Business var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId; var skuItemCount = orderSkus.FirstOrDefault(osku => osku.SkuId == skuId)?.ItemTotal ?? 0; - var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId) - .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) - .DefaultIfEmpty(0M) - .First()); + //var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId) + // .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1)) + // .DefaultIfEmpty(0M) + // .First()); + + var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => + { + return (createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId)?.Price ?? 0) * (cargoParam.PurchaseRatio ?? 1); + }); + + var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount); var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now) .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost) From 03205b39a7c62b893aae0c2a943a9c6399dcf525 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 7 Oct 2023 10:26:24 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E8=A7=A6=E5=8F=91=E5=BE=85=E8=AE=AE?= =?UTF-8?q?=E4=BB=B7=E6=9D=A1=E4=BB=B6=E5=A2=9E=E5=8A=A0=E9=A6=96=E6=AC=A1?= =?UTF-8?q?=E9=87=87=E8=B4=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 60 ++++++++++++++++--- BBWYB.Server.Model/Db/Order/OrderSku.cs | 8 ++- BBWYB.Server.Model/Enums.cs | 8 +++ 3 files changed, 66 insertions(+), 10 deletions(-) diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 55ddaa1..2c979da 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -123,7 +123,8 @@ namespace BBWYB.Server.Business.Sync #region DB Operation List insertOrderList = new List(); List insertOrderSkuList = new List(); - List updateOrderSkuIdList_OptimizationFlag = new List(); + //List updateOrderSkuIdList_OptimizationFlag = new List(); + Dictionary> updateOSkuOptimizationFlagByReasonGroups = new Dictionary>(); List insertOrderConsigneeList = new List(); List insertTimeLimitTaskList = new List(); List deleteTimeLimitTaskOrderIdList = new List(); @@ -375,11 +376,14 @@ namespace BBWYB.Server.Business.Sync { var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => { - if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) - return true; - if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) - return true; - return false; + //if (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId)) + // return true; //首次触发 + //if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) + // return true; //销量大于20 + //if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + // return true; + //return false; + return GetOptimizationReason(s, insertSpuTotalSaleInfoList) != null; }); if (optimizationSpuSaleList.Count() > 0) { @@ -393,13 +397,27 @@ namespace BBWYB.Server.Business.Sync if (osku.ProductId != spuSale.ProductId) continue; + var triggerOptimizationReason = GetOptimizationReason(spuSale, insertSpuTotalSaleInfoList); + #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); + { + //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 创建待议价任务 @@ -474,8 +492,21 @@ namespace BBWYB.Server.Business.Sync .ExecuteAffrows(); } - if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) - fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); + //if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) + // fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); + if (updateOSkuOptimizationFlagByReasonGroups.Keys.Count() > 0) + { + foreach (var triggerOptimizationReason in updateOSkuOptimizationFlagByReasonGroups.Keys) + { + var updateOSkuListOptimizationFlagList = updateOSkuOptimizationFlagByReasonGroups[triggerOptimizationReason]; + if (updateOSkuListOptimizationFlagList != null && updateOSkuListOptimizationFlagList.Count > 0) + { + fsql.Update(updateOSkuListOptimizationFlagList).Set(osku => osku.IsNeedOptimization, 1) + .Set(osku => osku.TriggerOptimizationReason, triggerOptimizationReason) + .ExecuteAffrows(); + } + } + } foreach (var key in deductionSkuCountDictionary.Keys) fsql.Update(key).Set(s => s.ItemCount - deductionSkuCountDictionary[key]).ExecuteAffrows(); @@ -576,5 +607,16 @@ namespace BBWYB.Server.Business.Sync return Enums.OrderState.已完成; return null; } + + public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s, List insertSpuTotalSaleInfoList) + { + if (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId)) + return Enums.TriggerOptimizationReason.首次采购; //首次触发 + if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) + return Enums.TriggerOptimizationReason.首次优化; //销量大于20 + if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) + return Enums.TriggerOptimizationReason.再次优化; + return null; + } } } diff --git a/BBWYB.Server.Model/Db/Order/OrderSku.cs b/BBWYB.Server.Model/Db/Order/OrderSku.cs index f80eaa9..fda8c84 100644 --- a/BBWYB.Server.Model/Db/Order/OrderSku.cs +++ b/BBWYB.Server.Model/Db/Order/OrderSku.cs @@ -106,7 +106,7 @@ namespace BBWYB.Server.Model.Db /// /// 是否需要优化 是=1 否=0 /// - [Column(DbType = "int(1)", IsNullable = true)] + [Column(DbType = "int(1)", IsNullable = true)] public int? IsNeedOptimization { get; set; } = 0; /// @@ -114,6 +114,12 @@ namespace BBWYB.Server.Model.Db /// [Column(DbType = "int(1)", IsNullable = true)] public int? IsOptimizationCompleted { get; set; } = 0; + + /// + /// 触发优化原因 + /// + [Column(DbType = "int(1)", MapType = typeof(int?), IsNullable = true)] + public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; } } } diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index e07a061..dc80d1e 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -322,5 +322,13 @@ { 未平价 = 0, 已平价 = 1, 部分平价 = 2 } + + /// + /// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 + /// + public enum TriggerOptimizationReason + { + 首次采购 = 0, 首次优化 = 1, 再次优化 = 2 + } } }