From 58f784c0b1956ecc06a86223c86133f84de2422a Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 25 Jul 2023 00:16:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E8=81=94=E9=A2=84=E8=A7=88=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=90=8C=E9=85=8D=E4=BB=B6=E6=8C=89=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E4=BB=B6=E6=95=B0=E7=AD=89=E6=AF=94=E5=88=86=E9=85=8D=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E8=B4=A7=E6=AC=BE=E5=92=8C=E9=87=87=E8=B4=AD=E8=BF=90?= =?UTF-8?q?=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseOrder/PurchaseOrderBusiness.cs | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 6b7f948..cb2edf7 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -1097,17 +1097,49 @@ namespace BBWYB.Server.Business #region 匹配采购单所使用到的采购方案 var assocationOrderCostDetailList = new List(); var purchaseSchemeGroups = purchaseSchemeSkuList.GroupBy(s => s.SkuPurchaseSchemeId); - var totalPurchaseCount = purchaseOrderSimpleInfo.ItemList.Sum(x => x.Quantity); + var cargoParamList = new List(); foreach (var schemeGroup in purchaseSchemeGroups) { var schemePurchaseSkuList = schemeGroup.ToList(); if (schemePurchaseSkuList.Any(psku => purchaseOrderSimpleInfo.ItemList.Count(x => x.SkuId == psku.PurchaseSkuId) == 0)) continue; + cargoParamList.AddRange(schemePurchaseSkuList.Select(x => new CargoParamRequest() + { + BelongSkuId = x.SkuId, + ProductId = x.PurchaseProductId, + SkuId = x.PurchaseSkuId, + Quantity = dbOrderSkuList.FirstOrDefault(s => s.SkuId == x.SkuId)?.ItemTotal ?? 1, + SchemeId = x.SkuPurchaseSchemeId, + SpecId = x.PurchaseSkuSpecId + })); + } - var orderPurchaseSkuOfCurrentSchemeList = purchaseOrderSimpleInfo.ItemList.Where(psku => schemePurchaseSkuList.Count(x => x.PurchaseSkuId == psku.SkuId) > 0); + var belongSkuGroups = cargoParamList.GroupBy(p => p.BelongSkuId); + var purchaseSkuTotalQuantity = cargoParamList.Sum(x => x.Quantity); + foreach (var belongSkuGroup in belongSkuGroups) + { + var skuId = belongSkuGroup.Key; + var currentOrderSkuCargoParamList = cargoParamList.Where(p => p.BelongSkuId == skuId); //找当前skuId的采购skuId + var currentSkuAmount = 0M; //采购成本 + var currentSkuTotalPurchaseQuantity = currentOrderSkuCargoParamList.Sum(x => x.Quantity); //当前skuId的采购数量总和 + var currentPurchaseFreight = purchaseOrderSimpleInfo.FreightAmount * + (1.0M * currentSkuTotalPurchaseQuantity / purchaseSkuTotalQuantity); //采购运费 + + foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList) + { + var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) + .Sum(p => p.ProductAmount); + //var currentPurchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) + // .Sum(p => p.Quantity); + + var currentPurchaseSkuTotalQuantity = cargoParamList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) + .Sum(p => p.Quantity); + + currentSkuAmount += currentPurchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity / currentPurchaseSkuTotalQuantity); + + } - var skuId = schemePurchaseSkuList.FirstOrDefault().SkuId; var orderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == skuId); var assocationOrderCostDetail = new AssocationOrderCostDetailResponse() { @@ -1115,9 +1147,9 @@ namespace BBWYB.Server.Business Title = orderSku.Title, SkuId = skuId, OrderId = orderSku.OrderId, - SkuAmount = orderPurchaseSkuOfCurrentSchemeList.Sum(psku => psku.ProductAmount), + SkuAmount = currentSkuAmount, PurchaseQuantity = orderSku.ItemTotal.Value, - PurchaseFreight = purchaseOrderSimpleInfo.FreightAmount * (1.0M * orderPurchaseSkuOfCurrentSchemeList.Sum(x => x.Quantity) / totalPurchaseCount) + PurchaseFreight = currentPurchaseFreight }; assocationOrderCostDetail.PurchasePrice = assocationOrderCostDetail.SkuAmount / assocationOrderCostDetail.PurchaseQuantity; assocationOrderCostDetailList.Add(assocationOrderCostDetail);