using BBWYB.Server.Model.Db;
namespace BBWYB.Server.Business.Extensions
{
public static class OrderAmountExtension
{
///
/// 计算订单sku明细的成本和利润
///
/// 订单SKU明细成本对象
/// sku采购货款(支出)
/// sku采购运费(支出)
/// sku支出打包费(支出)
/// sku发货运费(支出)
public static void CalculationOrderCostDetailCostAndProfit(this OrderCostDetail ocd,
decimal skuPurchaseProductAmount,
decimal skuPurchaseFreight,
decimal skuOutPackAmount,
decimal skuDeliveryExpressFreight)
{
ocd.SkuAmount = skuPurchaseProductAmount;
ocd.PurchaseFreight = skuPurchaseFreight;
ocd.OutPackAmount = skuOutPackAmount;
ocd.DeliveryExpressFreight = skuDeliveryExpressFreight;
ocd.TotalCost = ocd.SkuAmount + ocd.PurchaseFreight + ocd.OutPackAmount + ocd.DeliveryExpressFreight; //采购货款+采购运费+支出打包费+发货运费
//ocd.Profit = skuProductAmount + skuBuyerPayFreight + skuInPackAmount - ocd.TotalCost; //SKU货款+买家支付运费+SKU打包费 - SKU总成本
}
///
/// 计算订单sku成本和利润
///
/// 订单SKU明细成本对象
/// sku商品金额(收入)
/// sku买家支付运费(收入)
/// sku实收打包费(收入)
/// 订单成本明细列表
public static void CalculationOrderSkuCostAndProfit(this OrderSkuCost orderSkuCost,
decimal skuProductAmount,
decimal skuBuyerPayFreight,
decimal skuInPackAmount,
IList orderCostDetailList)
{
var currentSkuCostDetailList = orderCostDetailList.Where(ocd => ocd.SkuId == orderSkuCost.SkuId && ocd.IsEnabled == true).ToList();
orderSkuCost.SkuAmount = currentSkuCostDetailList.Sum(ocd => ocd.SkuAmount);
orderSkuCost.PurchaseFreight = currentSkuCostDetailList.Sum(ocd => ocd.PurchaseFreight);
orderSkuCost.OutPackAmount = currentSkuCostDetailList.Sum(ocd => ocd.OutPackAmount);
orderSkuCost.DeliveryExpressFreight = currentSkuCostDetailList.Sum(ocd => ocd.DeliveryExpressFreight);
orderSkuCost.TotalCost = orderSkuCost.SkuAmount +
orderSkuCost.PurchaseFreight +
orderSkuCost.OutPackAmount +
orderSkuCost.DeliveryExpressFreight; //采购货款+采购运费+支出打包费+发货运费
orderSkuCost.Profit = skuProductAmount + skuBuyerPayFreight + skuInPackAmount - orderSkuCost.TotalCost; //SKU货款+买家支付运费+SKU打包费 - SKU总成本
}
///
/// 计算订单sku成本和利润
///
///
///
///
public static void CalculationOrderSkuCostAndProfit(this OrderSkuCost orderSkuCost,
OrderSku orderSku,
IList orderCostDetailList)
{
orderSkuCost.CalculationOrderSkuCostAndProfit((orderSku.ItemTotal * orderSku.Price) ?? 0M,
orderSku.BuyerPayFreight ?? 0M,
orderSku.InPackAmount ?? 0M,
orderCostDetailList);
}
///
/// 计算订单的成本和利润
///
///
/// 订单金额(包含买家支付运费和收入打包费)
/// 采购货款
/// 采购运费
/// 支出打包费
/// 发货运费
public static void CalculationOrderCostAndProfit(this OrderCost oc,
decimal orderAmount,
decimal purchaseProductAmount,
decimal purchaseFreight,
decimal outPackAmount,
decimal deliveryExpressFreight)
{
oc.PurchaseAmount = purchaseProductAmount + purchaseFreight; //兼容以前
oc.SkuAmount = purchaseProductAmount;
oc.PurchaseFreight = purchaseFreight;
oc.OutPackAmount = outPackAmount;
oc.DeliveryExpressFreight = deliveryExpressFreight;
oc.TotalCost = oc.SkuAmount + oc.PurchaseFreight + oc.OutPackAmount + oc.DeliveryExpressFreight;
oc.Profit = orderAmount - oc.TotalCost;
}
///
/// 计算订单的成本和利润
///
///
///
///
public static void CalculationOrderCostAndProfit(this OrderCost oc,
decimal orderAmount,
IList orderSkuCostList)
{
var currentOrderSkuCostList = orderSkuCostList.Where(osc => osc.OrderId == oc.OrderId).ToList();
oc.SkuAmount = currentOrderSkuCostList.Sum(osc => osc.SkuAmount);
oc.PurchaseFreight = currentOrderSkuCostList.Sum(osc => osc.PurchaseFreight);
oc.PurchaseAmount = oc.SkuAmount + oc.PurchaseFreight; //兼容以前
oc.OutPackAmount = currentOrderSkuCostList.Sum(osc => osc.OutPackAmount);
oc.DeliveryExpressFreight = currentOrderSkuCostList.Sum(osc => osc.DeliveryExpressFreight);
oc.TotalCost = oc.SkuAmount + oc.PurchaseFreight + oc.OutPackAmount + oc.DeliveryExpressFreight;
oc.Profit = orderAmount - oc.TotalCost;
}
}
}