如何通过订单分配带有选件和仓库的产品?

时间:2019-03-01 19:35:35

标签: python math combinatorics

我无法解决组合技术的问题,我什至不知道这个问题的名字是什么,但是可以肯定的是有现成的库/函数/脚本可以解决这个问题。 仓库中有产品和选件。产品或选件可能具有固定数量或无限数量(而不是指示为无的数量)。订购时,您可以将一种产品与多个选项分别组合,您需要分发订购的产品以及订单中仓库的选项。如果订单中的产品可以从多个仓库发送,则需要选择所有产品,如果不能,则按仓库将它们分为几个订单。有没有人有解决方案,或者至少是问题的名称?

为清楚起见(Python语法)。随机抽取的选项,产品,仓库的ID,您可以插入自己的ID。

产品-包含所有可用产品,可用产品的仓库以及这些仓库中的数量(无穷大)的字典{product_id:{warehouse_id:数量},...}:

{1: {2: 7, 4: 3}, 13: {2: 7, 4: 3}, 21: {2: None, 4: None}}

选项-没有无限的{option_id:{warehouse_id:数量},...}:

{3: {2: None, 4: None}, 10: {2: 10}, 9: {2: 10, 4: 10}, 8: {4: 2}}

订单-在这种情况下,数量决定了此产品的数量以及此配置中每个选项的数量,即,如果数量为2个,则需要取2个产品和每个选项2个。具有不同选项组合的同一产品被认为是单独的:

[{'product_id': 1, 'quantity': 2, 'options': [3, 10, 9]}, {'product_id': 1, 'quantity': 1, 'options': [3, 9]}, {'product_id': 13, 'quantity': 5, 'options': [10, 9]}]

因此,我想得到类似的东西。 order_products是订单数组中的键。

如果不可能从一个仓库发货:

[{'warehouses': [4], 'order_products': [0, 1]}, {'warehouses': [2], 'order_products': [2, 3]}]

如果可能,请从多个仓库发货:

[{'warehouses': [2, 4], 'order_products': [0, 1, 2, 3]}]

如果可以从多个仓库发送邮件,而只能从一个仓库发送邮件:

[{'warehouses': [2, 4], 'order_products': [0, 1]}, {'warehouses': [6], 'order_products': [3]}]

订单中的产品(order_products)不可用或不在仓库中,应将其推入单独的数组,例如:

limit_exceeded = [{'order_product': 1, 'max_quantity': 2}, ...]

0 个答案:

没有答案