我有一个表格,用于存储以下架构中产品的分层定价信息
| 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;
}
感谢您的帮助。
答案 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;
}