From d9cb0b48bea16694304ca9fde6f87570ca2d9bd7 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 25 Sep 2023 22:49:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E5=AE=8C=E6=88=90=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E4=BC=98=E5=8C=96=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 63 +++++++++++++++++-- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index e3eb2b9..3a7effa 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -326,6 +326,7 @@ namespace BBWYB.Server.Business List updatePurchaseTimeLimitTaskOrderSkuList = new List(); List> updatePurchaserList = new List>(); List insertSkuHistoryPurchaserRelationList = new List(); + List insertSkuOptimizationHistoryList = new List(); List notifyQikuPackSchemeParamList = null; if (dbOrder.IntoStoreType == Enums.IntoStoreType.发回齐越) @@ -517,11 +518,10 @@ namespace BBWYB.Server.Business 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 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) @@ -617,7 +617,9 @@ namespace BBWYB.Server.Business // totalPurchaseFreight ?? 0M, // 0M, // 0M); - orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, orderSkuCostList.Union(insertOrderSkuCostList).ToList()); + + var allOrderSkuCostList = orderSkuCostList.Union(insertOrderSkuCostList).ToList(); + orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, allOrderSkuCostList); if (!isRepurchase) @@ -647,6 +649,53 @@ namespace BBWYB.Server.Business } #endregion + #region 创建优化历史 + { + //本批次在线采购的订单sku集合 + var allBelongSkuIdList = request.CargoParamGroupList.SelectMany(cg => cg.CargoParamList.Select(c => c.BelongSkuId)).Distinct().ToList(); + var optimizationSkuIdList = orderSkus.Where(osku => osku.IsOptimizationCompleted == 1 && allBelongSkuIdList.Contains(osku.SkuId)) + .Select(osku => osku.SkuId) + .ToList(); + if (optimizationSkuIdList.Count() > 0) + { + //优化历史 + var optimizationHistoryList = fsql.Select() + .Where(s1 => s1.ShopId == request.ShopId && optimizationSkuIdList.Contains(s1.SkuId)) + .GroupBy(s1 => s1.SkuId) + .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) }) + .From() + .InnerJoin((s1, s2) => s1.MaxId == s2.Id) + .ToList((s1, s2) => s2); + + + foreach (var optimizationSkuId in optimizationSkuIdList) + { + var orderSkuCost = allOrderSkuCostList.FirstOrDefault(x => x.SkuId == optimizationSkuId); + if (orderSkuCost == null) + continue; + var orderSku = orderSkus.FirstOrDefault(x => x.SkuId == optimizationSkuId); + var lastHistory = optimizationHistoryList.FirstOrDefault(x => x.SkuId == optimizationSkuId); + + var currentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal; + var ratio = (lastHistory?.LastPurchasePrice ?? 0) == 0 ? 0 : 1 - currentPurchasePrice / lastHistory.LastPurchasePrice; + + var newOptimizationHistory = new SkuOptimizationHistory() + { + Id = idGenerator.NewLong(), + CreateTime = DateTime.Now, + CurrentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal, + ProductId = orderSku.ProductId, + ShopId = request.ShopId, + SkuId = optimizationSkuId, + LastPurchasePrice = lastHistory?.LastPurchasePrice ?? 0, + OptimizationRatio = ratio + }; + insertSkuOptimizationHistoryList.Add(newOptimizationHistory); + } + } + } + #endregion + fsql.Transaction(() => { if (updatePurchaseTimeLimitTaskOrderSkuList.Count() > 0) @@ -669,6 +718,8 @@ namespace BBWYB.Server.Business fsql.Insert(insertOrderPurchaseRelationInfoList).ExecuteAffrows(); if (insertSkuHistoryPurchaserRelationList.Count() > 0) fsql.Insert(insertSkuHistoryPurchaserRelationList).ExecuteAffrows(); + if (insertSkuOptimizationHistoryList.Count() > 0) + fsql.Insert(insertSkuOptimizationHistoryList).ExecuteAffrows(); updateOrderCost?.ExecuteAffrows(); insertOrderCost?.ExecuteAffrows(); if (updatePurchaseSchemeList.Count() > 0)