Taocarts 知识

《代购集运系统的核心技术:合箱与分箱算法怎么设计?资深架构师详解》

📅 2026-04-17 📂 博客文章

集运是反向海淘业务的心脏。客户从多个淘宝/1688店铺买的东西,送到你的国内仓库,然后你打包成一个包裹发往海外。这个过程中的“合箱”与“分箱”逻辑,是整个集运系统最复杂的算法之一。

我以Taocarts跨境独立站系统的集运模块为例,讲讲合箱分箱的算法设计。

业务场景:

客户A买了3件商品:一件衣服(重0.5kg,体积30x20x5cm)、一个杯子(重0.3kg,体积10x10x10cm)、一个玩偶(重0.8kg,体积40x30x15cm)。

三个商品分别到达国内仓库,入库时间是不同的。

系统需要决定:合箱还是分箱?如果合箱,最终包裹的尺寸和重量怎么计算?

算法核心原则:平衡“运费最优”和“时效可控”。

1. 合箱判断逻辑

python

def should_combine(items):

total_weight = sum(item.weight for item in items)

total_volume = sum(item.volume for item in items)

# 如果总重量超过集运限重(比如30kg),则分箱

if total_weight > MAX_WEIGHT_PER_PACKAGE:

return False

# 如果合并后的体积超过渠道限制(比如长+宽+高 < 200cm),则分箱

if total_volume > MAX_VOLUME:

return False

# 如果商品中有易碎品,建议单独包装

if any(item.fragile for item in items):

return False

return True

2. 分箱策略(贪心算法)

当需要分箱时,系统会尝试将商品分配到多个包裹中,使得总运费最低。常用“首次适应递减法”(First Fit Decreasing):

将所有商品按体积/重量降序排序。

依次将每个商品放入第一个能装下它的箱子。

如果所有现有箱子都放不下,则开新箱子。

3. 体积重 vs 实际重

国际物流中,运费取“实际重”和“体积重”的较大值。体积重 = 长×宽×高/5000(单位:cm,结果kg)。合箱后,不同商品的摆放方向会影响体积重。Taocarts的算法会尝试“旋转”商品来降低总体积,但为了不复杂化,通常采用“简单合并法”:将每个商品的外箱尺寸进行“外包络”(三个商品的长、宽、高各自取最大值后相加)。

4. 用户可干预

Taocarts允许客户在前台选择“合箱策略”:

经济合箱:尽可能合在一起,不管体积重。

快速分箱:每件商品单独打包,发最快的快递(但运费贵)。

指定合箱:客户可以手动勾选哪些商品一起打包。

性能考虑:合箱算法在仓库PDA端执行,需要在0.5秒内完成。Taocarts使用Redis缓存商品尺寸数据,并用C语言扩展实现核心计算,保证了高并发下的响应速度。

如果你正在开发代购系统源码,合箱分箱算法建议从简单的“全部合箱”开始,等业务量大了再迭代智能算法。但数据结构要预留好:商品入库时记录准确的长宽高和重量。

Taocarts purchasing, transshipment, overseas warehouse, shop opening Taocarts purchasing, transshipment, overseas warehouse, shop opening