实现电子商务的订单拆单思路,可深入参考
2019-08-23 07:35:50来源:编程学习网 阅读 ()
拆分订单服务是为了适应不同商品、库区及灵活的发货方式,我们将对订单状况进行更加细致的跟踪。同时向客户提供准确的商品预计发货时间和预计送达时间,使我们能更及时地兑现对客户的承诺。
业务上我们有自营及商家在平台上进行售卖商品,我们有自已的供应链和仓储系统,因此我们要适应这两种模式,同时不能推翻订单状态对整个业务生命周期的决定作用,还要兼顾售后和财务结算需求,我们一开始只有商家进驻业务这时各方可能考虑不能全盘,因此我们现在处处受困,一动就牵动全局,但是现在我们业务在做大,做全,因此调整还是要站在全盘的角度去考虑问题。
从原则上来说我们还是要业务解耦,并且增强未来需求的可扩展性、前瞻性、灵活性;
1、用户将商家加入购物袋,去结算,创建订单主数据;
购物袋有5件商品:
1、自营 鞋子 广州仓
2、自营 雨伞 湖北仓
3、商家A 冰箱
4、商家A 大电视
5、商家B 垃圾桶
创建完订单后,用户的订单主数据有1个订单,5件商品;没有任何拆单逻辑;在没有流入OMS之前,可以取消订单;一旦到OMS拆单中,状态为“审核”不可取消订单;
此时,用户展示的就是下单时原原本本下单的数据;
2、订单主数据流入OMS自动拆单系统;
异步通知OMS对订单主数据进行拆分,拿到订单号后,OMS根据自动规则进行拆分:
A、商家发货的按商家拆单,自营的根据订单发货地址及商品所在的仓库及库存拆单;拆单后的订单状态为:“待发货”;
B、没有库存的商品需要拆单,有库存的可先发货;
其他规则不细说
自动拆单后订单根据规则拆分成4个订单:
订单1 自营 鞋子 广州仓 发货;
订单2、自营 雨伞 湖北仓发货;
订单3、商家A 冰箱 大电视;
订单4、商家B 垃圾桶;
系统异步拆单后,OMS维护主数据订单与子单之间的关系,回写到订单,订单库中就有4个订单,同时告知用户前端,你的订单因为XXXX原因,为了方面你跟踪,我们拆分了订单,订单的状态为“待发货”
此时用户展示有4个订单;
3、根据不同的平台,分流到进行发货;
由上面拆分后的订单可以看出,订单1,订单2均为自营的,因此自营订单可以流入到WMS系统,仓库根据入库单进行发货,那么此时自营的订单1,发了1个包裹,订单1就有了包裹信息了,并且订单状态更新为“已发货”,订单2也是如此;(如果是订单1和订单2在同一仓库,那么可能会进行同一个包裹发货,此时,订单1,订单2对应一个物流包裹)
订单3,订单4 分别由商家A、商家B进行发货,商家A因为有大件的冰箱和大电视,需要分2个包裹进行发货,那么商家此时可以根据发货的不同商品对应的包裹信息进行2次拆单的操作。
2次拆单后订单根据发货包裹情况分成5个订单:
订单1 自营 鞋子 广州仓 发货;
订单2、自营 雨伞 湖北仓发货;
订单3、商家A 冰箱
订单4、商家A大电视;
订单5、商家B 垃圾桶;
商家ERP进行发货后,包裹信息有了,并且订单状态更新为“已发货”;
此时,用户前端可以看到5个订单,对应5个包裹信息,整个业务流程还是根据每个子单的状态进行衔接和流转。
至于财务需要的数据,可以在2次拆单并且确认收货后的状态数据上,做一中间层进行清洗,按商家、档期(订单上不管自营还是商家都有商家ID,订单商品上有档期ID)行拆分即满足结算的需求;
至此大体思路比较清晰,业务系统解耦:
服务化:主要是处理核心交易流程(成单、支付、取消),和用户支付过程,拆单逻辑原理在订单上同步处理,理论上如果不处理拆单逻辑,肯定性能有所提高;
OMS:订单管理系统,处理核心的自动拆单流程,维护主数据订单与子单之间的关系,有拆单规则配置,处理2次拆单按实际包裹拆单,并且回写订单库,所有订单的拆分合并核心业务都在此系统上处理,上对订单服务化,下接商家ERP和WMS,同时以后还要支持扩展用户按最快发货方式,用户手动拆单,已经在“发货”状态的订单不能拆分;
商家ERP:接受OMS的商家订单,承接商家订单后台的发货功能,需要调整为可以根据商品按批次发货,并且通知OMS,OMS根据实际发包情况进行2次拆分;
WMS:接受OMS的入仓出库单,并且根据仓库实际操作情况发包裹,如果有拆包或者合包的过程,通知OMS进行2次拆单,如果没有,那么自动拆单的订单会挂上包裹信息;
前端用户展示:
1、成单时,用户看到一个总订单,如果未进入OMS进行拆单,可以进行取消(因为OMS异步返回时间也是非常短,因此可以不考虑主单取消的情况);
2、自动拆单后,用户会看到因为某些原因主订单被拆分,分别跟踪;
3、如果有2次拆单的情况,用户会看到订单再次被拆分,分别跟踪,单独对拆分的订单也就是对应到包裹进行确认收货;
售后、客服:可以根据拆分后子订单进行售后;
财务:可以在2次拆单并且确认收货后的状态数据上,做一中间层进行清洗,按商家、档期(订单上不管自营还是商家都有商家ID,订单商品上有档期ID)行拆分即满足结算的需求。
边界定义清晰,剩下的就是具体各子系统之间业务交互的具体实现,包括正常流程、和异常流程的考虑。全盘梳理及重新设计肯定是要大决心去推翻原来的东西,但是,如果设计和规划不合理,后面的扩展性很差,那工作量将不可想象,业务模型不正确的情况下,最关键的数据模型落地后是无法扭转过来的,请三思。
参考其他电商的一些拆单规则:
1. 您的订单中含有不可以同时打包配送的商品(高价值商品、大件商品、食品、危险品如香水等不可以和其他商品一起打包配送),系统将自动拆分订单;
2. 您的订单中的包裹重量超重,体积超大,商品数量超量,系统将自动拆分订单;
3. 您的订单中部分商品可以随时发货,其他商品没有库存或者暂时没有上市需要等待货源,等待时间超过10天仍没有发货,系统将自动拆分订单;
4. 您的订单中商品超过了预计发货期,系统将在第二天的晚间自动拆分订单,将可以发货的商品先行发货;
5. 您的订单中商品需要从不同库房发出,系统将自动拆分订单;
6. 您的订单中商品其中一个在订购时库存显示只有一个,如果同时有多个订单订购,该商品需要等系统的分配,系统将自动拆分订单;
7. 您的订单中包含了入驻卖家的商品(卖家独立配送)和平台负责配送的商品,系统将自动拆分订单。
原文链接:http://www.phpxs.com/post/6467/
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHP简单实现单点登录功能示例 2019-10-09
- thinkphp5框架前后端分离项目实现分页功能的方法分析 2019-10-08
- PHP7 安装event扩展的实现方法 2019-10-08
- php实现的数组转xml案例分析 2019-09-30
- PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql 2019-09-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash