Browse Source

关联预览支持同配件按采购件数等比分配采购货款和采购运费

yijia
shanji 2 years ago
parent
commit
58f784c0b1
  1. 42
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

42
BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

@ -1097,17 +1097,49 @@ namespace BBWYB.Server.Business
#region 匹配采购单所使用到的采购方案
var assocationOrderCostDetailList = new List<AssocationOrderCostDetailResponse>();
var purchaseSchemeGroups = purchaseSchemeSkuList.GroupBy(s => s.SkuPurchaseSchemeId);
var totalPurchaseCount = purchaseOrderSimpleInfo.ItemList.Sum(x => x.Quantity);
var cargoParamList = new List<CargoParamRequest>();
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 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 orderPurchaseSkuOfCurrentSchemeList = purchaseOrderSimpleInfo.ItemList.Where(psku => schemePurchaseSkuList.Count(x => x.PurchaseSkuId == psku.SkuId) > 0);
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);

Loading…
Cancel
Save