0

我正在开发一个用 MySQL/PHP 编写的库存/发票系统(可能带有某种 Access 前端以及 Web 界面)。

问题是我希望产品库存能够处理具有倍数折扣的商品,例如“10 英镑任意两件”。我想要发生的是,如果说在发票中添加了 10 件商品,则可以确定这些商品中的任何一件是否符合“x 英镑的任何 x”要求并应用折扣。更复杂的是,任何商品都可以有不同的多重折扣,例如“10 英镑任意 2”以及“12 英镑任意 3”。基本上就像超市所做的那样——对最终用户来说很容易。

如果我想在同一发票行中输入任何 x 相同的项目,它工作正常,但它需要比这更灵活。

有人对我如何做到这一点有任何想法吗?提前致谢。我很擅长 HTML / MySQL / PHP / JavaScript 等。

4

3 回答 3

0

我将创建一个代表各种折扣的对象(我将使用 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-26T11:38:43.410 回答
0

您可能需要构建某种“折扣”表,其中包含有关折扣的基本信息 - 例如唯一标识符和描述(这也可能与触发此折扣所需的资格规则相关联 - 例如促销代码)。

该表还需要保存为您的示例创建折扣捆绑包的规则,例如“触发折扣所需的产品数量”和“捆绑包值” - 为了灵活起见,这些字段应该是 NULLable,这样您就不会必须使用捆绑包;您可以使用“产品折扣”表中确定的单个价格。

作为一个基本示例,您可能有一个折扣表,例如:

+----+-------------+----------------+--------------+------------+----------+
| id | description | units_required | bundle_price | start_date | end_date |
+----+-------------+----------------+--------------+------------+----------+
| .. + ...         | ...            | ...          | ...        | ...      |

...和 ​​product_to_discount 链接表,如:

+----+------------+-------------+----------------+------------+
| id | product_id | discount_id | units_required | unit_price |
+----+------------+-------------+----------------+------------+
| .. | ...        | ...         | ...            | ...        |

然后,您将产品链接到折扣,因此如果您有类似“只需 10 英镑购买此范围内的任意 3 件商品”之类的内容,则需要将所有可能的合格产品链接到折扣并将其设置units_required为 3 -那么如果这些项目中的任何 3 个在“篮子”中,则应用bundle_price.

如果有多种可能性(可能通过计算哪个提供最大折扣),您可能需要进行一些过滤以找出哪个捆绑包优先。

像这样设置的另一种可能性是,它还允许您进行更简单的折扣。您可以简单地离开units_required,然后bundle_priceNULL单个产品链接到折扣;可能多次以不同的价格中断不同的价格product_to_discount.units_required- 因此您可以为单个产品设置折扣值,或者为更大数量的每件商品设置更大的折扣。

您还可以添加一个字段,例如product_to_discount.product_is_discount您想做“购买 X、Y 或 Z 并免费获得 Q”之类的操作。

这是相当模糊的大纲,但我希望它可以帮助您指出“正确”的方向......

哦,还有一件事要记住,如果你的系统正在做任何会计,你需要传递一条“折扣线”来解释预期产品价格和折扣价格之间的差异。

于 2012-03-26T11:40:36.177 回答
0

使用 PHP 和 MySQL,您可以有一个“折扣”表,您可以在其中保存产品 ID、产品数量、价格和报价名称。这样,通过一个简单的查询,当您计算发票的最终价值时,您可以对照表检查每种产品的报价是否存在:

SELECT * FROM discounts WHERE product_id = x AND quantity >= y

因此,最后,您有一个产品和价格表以及一个相关的报价表。

于 2012-03-26T11:30:43.293 回答