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 订单成本