如何使用分层定价计算购物车中的可能节省量

时间:2014-04-08 04:23:22

标签: c# .net asp.net-mvc e-commerce

我有一个表格,用于存储以下架构中产品的分层定价信息

| ProductId   | MinimumQty  | MaximumQty    | Price |       
|-------------|------------ |------------   |-------|   
| 1           | 1           | 19            | 5.49  |       
| 1           | 20          | 99            | 4.79  |       
| 1           | 100         | 499           | 4.19  |       
| 1           | 500         | 9999          | 3.49  |        

如果客户将此产品添加到购物车中,那么我需要告诉他,通过添加x,他可以节省y美元。

即如果他将18(18 * 5.49 = $ 98.82)这些加入购物车,那么我应该让顾客知道通过再加2件(20 * 4.79 = $ 95.8)他可以节省购物车 (98.82 - 95.8)= $ 2.88。

以下是我的课程

public class Product{
  public int ProductID { get; set; }
  public List<ProductPrice> ProductPrice{ get; set; }
}

public class ProductPrice{
  public int ProductID { get; set; }
  public int MinQty { get; set; }
  public int MaxQty { get; set; }
  public double Price { get; set; }
}

public class ProductSaving{
    public int QtyToAdd{ get; set; }
    public double Savings { get; set; }
}

public ProductSaving CalculateProductSavings(Product product,int qtyInCart){
 var productSaving = new ProductSaving();

 ****Help Needed!!****

  return productSaving;
 }

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

// find the current tier pricing of the product
var tierProductPrice = product.ProductPrice.FirstOrDefault(p => p.MinQty >= qtyInCart && p.MaxQty <= qtyInCart);

if (tierProductPrice != null)
{
 var maxTierQty = tierProductPrice.MaxQty;    
 var tierPrice = tierProductPrice.Price;

 // current price of the Cart
 var cartPrice = tierPrice * qtyInCart;

 // find next min price Tier
 var nextTierProductPrice = product.ProductPrice.FirstOrDefault(p => p.MinQty >= maxTierQty && p.MaxQty <= maxTierQty);

 if (nextTierProductPrice  != null)
 {
  var itemsToAdd = nextTierProductPrice.MinQty - qtyInCart;

  // calculate new price of the cart
  var newPrice = nextTierProductPrice.MinQty * nextTierProductPrice.Price;

  if (newPrice < cartPrice)
  {
   productSaving = new ProductSaving
   {
    QtyToAdd = itemsToAdd,
    Savings = cartPrice - newPrice
   };
  }
 } 
}

请注意,上述逻辑假设下一层是唯一的层,这对于用户添加足够的项目以达到该层将是有利可图的。从它看来的数据。

即。如果我的购物车中有18件商品, 20-99等级可能会带来更好的交易。如果20-99不能产生更好的交易,那么99以上的等级永远不会产生更好的交易。

如果该假设不正确,请告知我们。确定 nextTierProductPrice 的代码逻辑将进入一个循环,直到我们达成更好的交易或耗尽所有层。

在需要之前,我没有不必要的逻辑。

答案 1 :(得分:0)

我假设你想知道逻辑,而不是代码本身:

  • 使用当前数量计算价格(选择数量大于最小数量且小于最大数量的价格)
  • 获取下一个价格类别(下一个类别,其中最小数量超过当前数量)并根据最小数量和价格计算总价格
  • 从第二个开始减少第一个(当然,只有在积极的情况下显示储蓄价值才有意义;如果客户实际上是在储蓄,那么

表中的最大数量实际上是多余的,因为它总是少于下一个最小数量,但它可能使计算更容易。

答案 2 :(得分:0)

此代码应该满足您的需求。如果没有更好的交易或购物车价值数量不适合任何ProductPrice范围(这个逻辑可以很容易地改变以满足您的需要),它将返回零的ProductSaving对象:

public ProductSaving CalculateProductSavings(Product product, int qtyInCart)
{
    var productSaving = new ProductSaving();

    var rangeProduct = product.ProductPrice.FirstOrDefault(z => qtyInCart >= z.MinQty && qtyInCart <= z.MaxQty);

    // Return empty saving if quantity is not within range
    if (rangeProduct == null)
        return productSaving;

    var nextProduct = product.ProductPrice.FirstOrDefault(z => z.MinQty >= (rangeProduct.MaxQty + 1));

    // Return empty saving if there are no better savings
    if (nextProduct == null)
        return productSaving;

    productSaving.QtyToAdd = nextProduct.MinQty - qtyInCart;
    productSaving.Savings = (rangeProduct.Price * qtyInCart) - (nextProduct.Price * nextProduct.MinQty);
    return productSaving;
}