我正在开发一个用MySQL / PHP编写的库存/发票系统(可能带有某种访问前端和web界面)。
问题是,我希望产品的库存能够处理具有倍数折扣的项目,例如“10 10的任何两个折扣”。我想要发生的是,如果发票中添加了10个项目,它可以计算出这些项目中是否有任何项目满足“任何x for if x”的要求,并应用折扣。增加的复杂性是,任何项目都可以有不同的多重折扣,如“GB10的任何2”以及“GB12的任何3”。基本上就像超市所做的那样--对最终用户来说很容易。
如果我想要将同一项目的任何x输入到相同的发票行中,它工作得很好,但它需要更灵活。
有没有人知道我该怎么做?提前谢谢。我对HTML / MySQL / PHP / JavaScript等很在行。
发布于 2012-03-26 19:30:43
使用PHP和MySQL,你可以有一个“折扣”表,你可以保存产品的ID,产品的编号,价格和优惠的名称。这样,使用一个简单的查询,当您计算发票的最终价值时,您可以根据表检查每个产品是否存在报价:
SELECT * FROM discounts WHERE product_id = x AND quantity >= y
所以,最后,您有一个表示产品和价格的表,以及一个表示优惠的相关表。
发布于 2012-03-26 19:38:43
我将创建一个表示各种折扣的对象(我将使用C#语法)
public interface IOrderProcessor
{
bool CanBeApplied(OrderItem item);
void Apply(OrderItem item);
}
public class TwoForOneProcessor : IOrderProcessor
{
public bool CanApply(OrderItem item)
{
// check if the product is in 2 for 1 discount
}
public void Apply(OrderItem orderItem)
{
// apply the discount
}
}以及一个订单处理器,它将获取所有折扣对象并将其应用于订单中的项目。处理器的数据可以存储在数据库中(例如,它可以应用于哪个产品等)。
发布于 2012-03-26 19:40:36
您可能需要构建某种“折扣”表,其中包含有关折扣的基本信息-例如唯一标识符和描述(这也可以链接到触发此折扣促销代码所需的资格规则)。
该表还需要保存用于创建折扣捆绑包的规则,以便您的示例能够正常工作,比如“触发折扣所需的产品数量”和“捆绑包价值”--为了灵活起见,这些字段应该为NULLable,这样您就不必使用捆绑包;您可以使用“product to discount”表中确定的单个价格。
作为一个基本示例,您可能有一个折扣表,如下所示:
+----+-------------+----------------+--------------+------------+----------+
| id | description | units_required | bundle_price | start_date | end_date |
+----+-------------+----------------+--------------+------------+----------+
| .. + ... | ... | ... | ... | ... |..。和product_to_discount链接表,如下所示:
+----+------------+-------------+----------------+------------+
| id | product_id | discount_id | units_required | unit_price |
+----+------------+-------------+----------------+------------+
| .. | ... | ... | ... | ... |然后,您可以将产品链接到折扣,因此,如果您有类似“只需10 in即可在此范围内购买3件商品”之类的内容,您将需要将所有可能符合条件的产品链接到折扣,并将units_required设置为3-然后,如果这些商品中的任意3件都在“购物篮”中,则应用bundle_price。
如果存在多个可能性,您可能需要进行一些过滤,以确定哪个捆绑包优先(可能是通过计算哪个包提供的折扣最大)。
像这样的设置的另一种可能性是,它也允许您进行更简单的折扣。您可以简单地将units_required和bundle_price保留为NULL,只将单个产品链接到折扣;可能会多次使用不同的product_to_discount.units_required值提供不同的折扣价-因此,您可以为单个产品设置折扣值,或者在批量较大时为每个产品设置更大的折扣。
如果你想做一些类似“购买X,Y或Z并获得Q免费”的事情,你也可以添加一个像product_to_discount.product_is_discount这样的字段。
这是一种相当模糊的轮廓,但我希望它能帮助你指明“正确”的方向……
https://stackoverflow.com/questions/9870701
复制相似问题