我需要关于一个棘手问题的专家建议。
场景是:
- 电子商务网站
- 很多产品
- 这些产品有很多折扣
产品由唯一的 ProductID 标识并具有销售价格。很经典的场景。该产品还可以有一个或多个折扣。
折扣可以有不同的类型。折扣的一个例子是:
- 在一组产品中购买两个或更多,每件产品可获得 X% 的折扣
一个行项目只能获得一个折扣,因此一旦一个行项目打了折扣,就不能再享受其他折扣了。
测试用例数据:
- 产品 1:10 美元
- 产品 2:10 美元
- 产品 3:50 美元
- 产品 4:100 美元
折扣-A : 购买两件或多件以下产品可享受 20% 的折扣
- 产品-1
- 产品-2
- 产品-3
- 产品-4
折扣-B : 购买产品并获得以下产品 50 % 的折扣
- 产品-3
测试场景一:
购物篮:包含以下订单项:
- 产品-1
- 产品-3
- 产品-4
计算#1:
- 折扣 A:产品 1、产品 3、产品 4 = 2 美元 + 10 美元 + 20 美元 = 32 美元
- = 总节省 32 美元
计算#2:
- 折扣 A:产品 2、产品 4 = 2 美元 + 20 美元 = 22 美元
- 折扣 B:产品 3 = 25 美元
- = $22 + $25 = $47 总节省
这意味着折扣-A和折扣-B的组合将为客户提供最佳折扣。
测试场景 2:
购物篮:包含以下订单项:
- 产品-3
- 产品-4
计算#1:
- 折扣 A:产品 3、产品 4 = 10 美元 + 20 美元 = 30 美元
- = 30 美元总节省
计算#2:
- 折扣 B:产品 3 = 25 美元
- = 25 美元的总节省
这意味着应用折扣-A将为客户提供最佳折扣。
为了计算给定购物篮的最佳折扣,必须评估所有产品组合和这些产品的可用折扣。
通常一个购物篮中有 30-40 个订单项,每个订单项有 0-3 个折扣。
基本上我一直在寻找一种有效的方法来做这个计算。
现在我应用折扣的算法是这样的:
- 篮子上的明确折扣
- 获取购物篮中 LineItems 的所有唯一 ProductID
- 获取适用于这些 ProductID 的所有折扣
- For-Each 折扣(无序)
- 如果非折扣标记行项目满足,则应用折扣
- 将打折的订单项标记为打折
- 如果非折扣标记行项目满足,则应用折扣
但这还不够,因为它没有尝试不同的订单项/折扣组合。
我一直在寻找可以解决此类问题的标准化算法,但到目前为止没有任何运气。
期待您的回复 :)