搜索

首页  >  问答  >  正文

ruby - PHP如何实现收货地址以及发货仓库的优先仓库选择问题

今天我来问个技术性的问题, 关于商品,收货地址以及发货仓库的优先仓库选择问题.

如题:

  1. 用户购买了商品 A, B, C 三个商品(可以认为用户买了n个SKU商品, 每个sku有对应的数量), 商品SKU我们用大写: A, B, C;

  2. 收货地址为 X ;

  3. 每个商品都对于多个仓库, 仓库发货选择最近最优(优先顺序根据收货地址配置), 如仓库有: a, b, c, d(仓库我们用小写字母表示)等等;

优先逻辑:

用户购买的商品, 选择仓库发货, 包裹数越少越优(主), 包裹越近越优(次);

收货地址为 X, X 地址对应的仓库优先顺序列表:

X => a,b,c,d

举例:

例1. 用户购买了1个sku(数量是3个)发往对应的地址X:


A: 3

A这个商品对应的库存以及数量: X地址对应的顺序是: a,b,c,d

A 对应的仓库以及库存列表:

 a: 1
 b: 3
 c: 4
 d: 5

按照最少包裹最近仓库原则, 结果会扣除 b仓库存(A商品3个)发货1个包裹.


例2. 用户购买了2个sku发往对应的地址X:

A: 3
B: 2

A,B这些商品对应的库存以及数量: (X地址对应的顺序是: a,b,c,d)

A 对应的仓库以及库存列表:

 a: 1
 b: 3
 c: 4
 d: 5

B 对应的仓库以及库存列表:

 a: 1
 b: 2
 c: 1
 d: 5

按照最少包裹最近仓库原则, 结果同样应该扣除 b 仓库(A商品3个, B商品2个)存发货1个包裹.


例3. 用户购买了2个sku发往对应的地址X:

A: 3
B: 2

A,B这些商品对应的库存以及数量: (X地址对应的顺序是: a,b,c,d)

A 对应的仓库以及库存列表:

 a: 3
 b: 3
 c: 1
 d: 5

B 对应的仓库以及库存列表:

 a: 1
 b: 1
 c: 2
 d: 1

按照最少包裹最近仓库原则, 结果同样应该扣除 a 仓库(A商品3个, B商品1个), 加上 b 仓库存(B商品1个), 发货共2个包裹(a 仓和 b 仓各一个)(这里同样做到了最好少包裹最近仓原则).


例4, 用户购买了2个sku发往对应的地址X:

A: 3
B: 5

A,B这些商品对应的库存以及数量: (X地址对应的顺序是: a,b,c,d)

A 对应的仓库以及库存列表:

 a: 2
 b: 3
 c: 4
 d: 5

B 对应的仓库以及库存列表:

 a: 1
 b: 1
 c: 2
 d: 5

按照最少包裹最近仓库原则, 结果同样应该扣除 d 仓库(A商品3个, B商品5个), 发货共1个包裹(d仓一个), 这里就做到了最少包裹数原则.


敢问, 大牛些这个算法如何破?

怪我咯怪我咯2708 天前907

全部回复(1)我来回复

  • 学习ing

    学习ing2017-06-27 09:20:02

    我是这么想的,先把sku,数组降序,比如,3件sku,array(8,4,1);
    分别得出8件,4件,3件的最优包裹方案,
    然后将这三个方案的仓库情况,合并去重,就可以得优的方案了。

    回复
    0
  • 取消回复