diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 765a158..c5a37c3 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -42,6 +42,29 @@ namespace BBWYB.Server.Business this.expressCompanyNameConverter = expressCompanyNameConverter; } + /// + /// 合并相同的采购Sku + /// + /// + /// + private IList CombineRepeatPurchaseSku(IList cargoParamList) + { + IList orderProductParamList = new List(); + var samePurchaseSkuGroups = cargoParamList.GroupBy(p => p.SkuId).ToList(); + foreach (var samePurchaseSkuGroup in samePurchaseSkuGroups) + { + var first = samePurchaseSkuGroup.First(); + orderProductParamList.Add(new PP_OrderProductParamRequest() + { + ProductId = first.ProductId, + SkuId = first.SkuId, + SpecId = first.SpecId, + Quantity = samePurchaseSkuGroup.Sum(p => p.Quantity) + }); + } + return orderProductParamList; + } + public PreviewOrderResponse PreviewPurchaseOrder(PreviewOrderRequest request) { nLogManager.Default().Info($"PreviewPurchaseOrder {JsonConvert.SerializeObject(request)}"); @@ -67,6 +90,7 @@ namespace BBWYB.Server.Business if (purchaseAccount == null) throw new BusinessException($"缺少{cargoParamGroup.PurchasePlatform}采购平台账号,请在店铺配置中设置"); + var orderProductParamList = CombineRepeatPurchaseSku(cargoParamGroup.CargoParamList); try { var response = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)cargoParamGroup.PurchasePlatform) @@ -88,13 +112,7 @@ namespace BBWYB.Server.Business }, Platform = (AdapterEnums.PlatformType)cargoParamGroup.PurchasePlatform, PurchaseMode = (AdapterEnums.PurchaseMode)request.PurchaseOrderMode, - OrderProductParamList = cargoParamGroup.CargoParamList.Select(p => new PP_OrderProductParamRequest() - { - ProductId = p.ProductId, - Quantity = p.Quantity, - SkuId = p.SkuId, - SpecId = p.SpecId - }).ToList() + OrderProductParamList = orderProductParamList }); if (cargoParamGroup.PurchasePlatform == Enums.Platform.阿里巴巴) @@ -165,6 +183,8 @@ namespace BBWYB.Server.Business var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)cargoParamGroup.PurchasePlatform); var extJson = extJArray.FirstOrDefault(j => j.Value("PurchaserId") == cargoParamGroup.PurchaserId); + var orderProductParamList = CombineRepeatPurchaseSku(cargoParamGroup.CargoParamList); + var createOrderResponse = client.CreateOrder(new PP_CreateOrderRequest() { AppKey = purchaseAccount.AppKey, @@ -185,13 +205,7 @@ namespace BBWYB.Server.Business PurchaseMode = (AdapterEnums.PurchaseMode)request.PurchaseOrderMode, Extensions = extJson.Value("OrderTradeTypeCode"), Remark = request.Remark, - OrderProductParamList = cargoParamGroup.CargoParamList.Select(p => new PP_OrderProductParamRequest() - { - ProductId = p.ProductId, - Quantity = p.Quantity, - SkuId = p.SkuId, - SpecId = p.SpecId - }).ToList() + OrderProductParamList = orderProductParamList }); var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() @@ -203,7 +217,6 @@ namespace BBWYB.Server.Business }); totalPurchaseAmount += purchaseOrderSimpleInfo.TotalAmount; - //purchaseOrderSimpleInfoList.Add(purchaseOrderSimpleInfo); var belongSkuGroups = cargoParamGroup.CargoParamList.GroupBy(p => p.BelongSkuId); foreach (var belongSkuGroup in belongSkuGroups) @@ -211,8 +224,16 @@ namespace BBWYB.Server.Business var belongSkuId = belongSkuGroup.Key; var currentOrderSkuProductAmount = 0M; //采购成本 var currentOrderSkuCargoParamList = cargoParamGroup.CargoParamList.Where(p => p.BelongSkuId == belongSkuId); //找当前skuId的采购skuId - currentOrderSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => currentOrderSkuCargoParamList.Any(p1 => p1.SkuId == p.SkuId)) - ?.Sum(p => p.ProductAmount) ?? 0M; + + foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList) + { + var purchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) + .Sum(p => p.ProductAmount); + var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId) + .Sum(p => p.Quantity); + currentOrderSkuProductAmount += purchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity / purchaseSkuTotalQuantity); + } + var currentOrderSkuFreightAmount = purchaseOrderSimpleInfo.FreightAmount / belongSkuGroups.Count(); //采购运费(按sku数均分) #region 成本明细 @@ -238,24 +259,24 @@ namespace BBWYB.Server.Business }; insertOrderCostDetails.Add(orderCostDetail); #endregion - - #region 订单采购信息 - var orderPurchaserInfo = new OrderPurchaseInfo() - { - Id = idGenerator.NewLong(), - OrderId = request.OrderId, - CreateTime = DateTime.Now, - PurchaseAccountId = purchaseAccount.Id, - PurchaseAccountName = purchaseAccount.AccountName, - PurchaseMethod = Enums.PurchaseMethod.线上采购, - PurchaseOrderId = createOrderResponse.OrderId, - PurchasePlatform = cargoParamGroup.PurchasePlatform, - PurchaserName = cargoParamGroup.PurchaserName, - ShopId = request.ShopId - }; - insertOrderPurchaseInfos.Add(orderPurchaserInfo); - #endregion } + + #region 订单采购信息 + var orderPurchaserInfo = new OrderPurchaseInfo() + { + Id = idGenerator.NewLong(), + OrderId = request.OrderId, + CreateTime = DateTime.Now, + PurchaseAccountId = purchaseAccount.Id, + PurchaseAccountName = purchaseAccount.AccountName, + PurchaseMethod = Enums.PurchaseMethod.线上采购, + PurchaseOrderId = createOrderResponse.OrderId, + PurchasePlatform = cargoParamGroup.PurchasePlatform, + PurchaserName = cargoParamGroup.PurchaserName, + ShopId = request.ShopId + }; + insertOrderPurchaseInfos.Add(orderPurchaserInfo); + #endregion } #region 订单成本