diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index e5d1ebb..7db44d9 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -307,6 +307,7 @@ namespace BBWYB.Server.Business PurchaseFreight = currentOrderSkuFreightAmount, PurchaseOrderId = purchaseOrderSimpleInfo.OrderId, SkuAmount = currentOrderSkuProductAmount, + TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount, SkuId = belongSkuId, StorageAmount = 0, IsEnabled = true @@ -514,7 +515,6 @@ namespace BBWYB.Server.Business OrderId = request.OrderId, ProductId = dbOrderSku.ProductId, SkuId = assOrderCostDetail.SkuId, - PurchaseAmount = assOrderCostDetail.SkuAmount, PurchaseFreight = avgFreight, TotalCost = assOrderCostDetail.SkuAmount + avgFreight }; @@ -899,26 +899,36 @@ namespace BBWYB.Server.Business { var orderPurchaseInfo = fsql.Select().Where(opi => opi.PurchaseOrderId == purchaseOrderId).ToOne(); if (orderPurchaseInfo == null) - throw new Exception($"未查询到采购单{orderPurchaseInfo.PurchaseAccountId}"); + throw new Exception($"采购单{purchaseOrderId}-未查询到采购单"); var purchaseAccount = fsqlManager.MDSfsql.Select().Where(pa => pa.Id == orderPurchaseInfo.PurchaseAccountId).ToOne(); if (purchaseAccount == null) - throw new Exception($"未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}"); + throw new Exception($"采购单{purchaseOrderId}-未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}"); - var dbOrder = fsql.Select(orderPurchaseInfo.OrderId).ToOne(o => new { o.OrderTotalPrice }); + var dbOrder = fsql.Select(orderPurchaseInfo.OrderId).ToOne(); var dbOrderCost = fsql.Select(orderPurchaseInfo.OrderId).ToOne(); if (dbOrderCost == null) - throw new Exception($"未查询到订单成本 {orderPurchaseInfo.OrderId}"); + throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的成本"); + + var dbOrderCostDetails = fsql.Select().Where(ocd => ocd.OrderId == dbOrder.Id && ocd.IsEnabled == true).ToList(); + if (dbOrderCostDetails.Count() == 0) + throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的明细成本"); + + var dbOrderPurchaseRelationInfos = fsql.Select().Where(x => x.OrderId == dbOrder.Id).ToList(); + if (dbOrderPurchaseRelationInfos.Count() == 0) + throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细,手动关联的采购单不支持改价"); + + var dbOrderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == orderPurchaseInfo.OrderId && opi.IsEnabled == true).ToList(); + if (dbOrderPurchaseInfoList.Count() == 0) + throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的采购单集合"); + + List> updateOrderCostDetailList = new List>(); + IUpdate updateOrderCost = null; - var orderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == orderPurchaseInfo.OrderId).ToList(opi => new - { - opi.PurchaseOrderId, - opi.PurchaseAccountId - }); var client = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.阿里巴巴); var totalPurchaseAmount = 0M; - foreach (var opi in orderPurchaseInfoList) + foreach (var opi in dbOrderPurchaseInfoList) { var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() { @@ -928,25 +938,50 @@ namespace BBWYB.Server.Business OrderId = opi.PurchaseOrderId }); totalPurchaseAmount += purchaseOrderSimpleInfo.TotalAmount; - } + var currentPurchaseOrderRelationInfos = dbOrderPurchaseRelationInfos.Where(x => x.PurchaseOrderId == opi.PurchaseOrderId).ToList(); - //var oldTotalAmount = dbOrderCost.PurchaseAmount; - //var oldProductAmount = dbOrderCostDetailList.Sum(ocd => ocd.SkuAmount); - //var oldPurchaseFreight = dbOrderCostDetailList.Sum(ocd => ocd.PurchaseFreight); + var belongSkuGroups = currentPurchaseOrderRelationInfos.GroupBy(p => p.BelongSkuId); + foreach (var belongSkuGroup in belongSkuGroups) + { + var belongSkuId = belongSkuGroup.Key; + var currentOrderSkuProductAmount = 0M; //采购成本 + var currentOrderSkuCargoParamList = belongSkuGroup.ToList(); //找当前skuId的采购skuId - dbOrderCost.PurchaseAmount = totalPurchaseAmount; - dbOrderCost.Profit = dbOrder.OrderTotalPrice - - dbOrderCost.PurchaseAmount - - dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount + foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList) + { + var purchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId) + .Sum(p => p.ProductAmount); + var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId) + .Sum(p => p.Quantity); + currentOrderSkuProductAmount += purchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity.Value / purchaseSkuTotalQuantity); + } - fsql.Transaction(() => - { - fsql.Update(dbOrderCost.OrderId).Set(oc => oc.PurchaseAmount, dbOrderCost.PurchaseAmount) - .Set(oc => oc.Profit, dbOrderCost.Profit) - .ExecuteAffrows(); - }); + var currentOrderSkuFreightAmount = purchaseOrderSimpleInfo.FreightAmount / belongSkuGroups.Count(); //采购运费(按sku数均分) + + var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId); + dbOrderSkuDetail.SkuAmount = currentOrderSkuProductAmount; + dbOrderSkuDetail.PurchaseFreight = currentOrderSkuFreightAmount; + dbOrderSkuDetail.TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount; + updateOrderCostDetailList.Add(fsql.Update().SetSource(dbOrderSkuDetail)); + } + + dbOrderCost.PurchaseAmount = totalPurchaseAmount; + dbOrderCost.Profit = dbOrder.OrderTotalPrice - + dbOrderCost.PurchaseAmount - + dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount + fsql.Transaction(() => + { + foreach (var update in updateOrderCostDetailList) + update.ExecuteAffrows(); + updateOrderCost?.ExecuteAffrows(); + + //fsql.Update(dbOrderCost.OrderId).Set(oc => oc.PurchaseAmount, dbOrderCost.PurchaseAmount) + // .Set(oc => oc.Profit, dbOrderCost.Profit) + // .ExecuteAffrows(); + }); + } } catch (Exception ex) { diff --git a/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs b/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs index 3ba1064..6f4b31f 100644 --- a/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs +++ b/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs @@ -109,12 +109,6 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "decimal(20,2)")] public decimal? StorageAmount { get; set; } = 0.00M; - /// - /// 采购成本(不含发货运费) - /// - [Column(DbType = "decimal(20,2)")] - public decimal? PurchaseAmount { get; set; } = 0.00M; - /// /// 成本总计 ///