OMS订单系统中的拆单过程

工作中经常接触订单相关的内容,没有系统的整理过。最近有空了打算整理归纳也有助增加自己的理解。先从拆单服务讲起吧。

什么是拆单

拆单,是将一个大订单按照设定的业务规则拆分成若干个子订单的过程。 一般在网购时,在浏览商品,将若干商品加入购物车,提交订单后你会发现你有两个或若干个订单,这里就是拆单服务来完成的工作。

为什么要拆单

拆单是优化用户购物体验的一种手段,具体来说是优化履单时效。举几个场景的案例就比较好理解:

库存不足而拆单 用户下单多个商品,其中部分商品库存不足,那么拆单后有库存的部分可以先发货。现在这种做法比较少了,更常见是在下单前校验库存。

商家不同而拆单

这种情况一般发生在平台类电商业务中,订单的商品由多个商家提供时,不同商家在仓、货和物流上存在差异。在生活服务领域中,一个订单由多个工序(商家)来完成时需要拆单。例如,系统门窗安装这个业务中,有吊装/搬运,安装,防水等多个工序,需要分别指派不同商家来完成需要拆单。

仓库不同而拆单 在自营类电商业务中,订单中的商品由多个仓库发货,拆单后可尽快发货。

商品属性差异而拆单 用户下单的商品中有海鲜、冰淇淋等带温控属性商品需要拆单,这里拆单利于保障商品送达交付的品质。

除了需要拆单的情况,还有一些情况是不能拆单:

怎么拆单

拆单服务是在订单支付后,由OMS系统中拉单服务将订单同步到后端生产库后开始拆单。另外也有在前端也有进行拆单的做法,这里拆单是由商品系统中定义商品的拆单规则,前端系统提交订单时已经做了拆单。(这里拆单时没有提交订单!)

拆单服务有两个特别重要的工作:父订单和金额分摊。

拆单后父订单处理 拆单后父订单需要变更状态为无效。

拆单后的订单金额分摊处理 订单金额分摊:要将父订单的金额合理、准确的分摊到子订单上,首先要明确订单金额哪些部分要做分摊?常见的有订单商品金额、优惠金额(优惠券、活动等)、特定方式支付金额(积分、卡券)、订单支付金额等部分。

在拆单的子订单中要保证所有子订单金额的和与父订单一致,同时与订单支付明细、订单商品明细中金额也一致。

运费分摊:一般运费信息是记在订单信息关联的支付信息表中,拆单后也需要按订单金额比例分摊到子订单中。

开票金额分摊:也是要分摊到子订单的,这主要是财务上要求单据和发票一致(缴税)。

拆单中设计大量的计算工作,为了保证拆单速度可以考虑将金额分摊独立出来。

总结

拆单要根据业务的差异考量对履单时效的影响。合理、准确的拆单能提升履单时效。拆单过多会增加后续售后、分摊计算和数据统计等环节的复杂度。