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; } } }