刚才在路上的时候想到一个问题,就是如果购物下单,这个订单包含A、B、C三件商品,对应生成了一个订单号;如果修改该订单,不要C了,那么后台在逻辑处理上,是等于取消订单重新下单A、B,对应重新生成新订单;
取消订单是下订单的反向操作,需要各个环节进行处理和审批,而部分取消是取消订单中的一种可能,在订单走到不同的环节时逆向操作的步骤是不一样的。在回答中@Yang#2F1 是站在WMS环节中来说的逆向操作流,按照整体业务流程,逆向操作的关键节点还应在订单风控、财务审核、采购、加工、末端配送这几个关键节点来发起逆向操作,当然依据实际的业务还会有不同的补充。
而订单编号这个还需要提高一层考虑,也就是订单来源,如果是第三方订单还需要跨系统处理,我们暂不讨论第三方订单,订单编号在产品的这一层里应该是唯一标识了,通过订单编号我们找到其他重要内容(这也与数据库设计有关,分库分表),那么无论你对订单内的哪些信息做修改,在现在唯一标示的逻辑下是肯定不能对订单编号做修改的。有同学会说我们可以关联呀,把新单号和旧单号关联上,我无法给出准确的数据库和代码效率对比,但如果一个订单被修改数十次,我想在读这个订单的时候时间至少提高了数十倍吧,而且也没有充分的必要性去支撑这个做法。
还要说的是,京东是不允许生产环节中取消订单中的部分商品的。生产环节是指在下单后交付给用户前。但如果你的订单需要由多个仓库来提供服务的话,用户侧看到的是可以取消某一个库房的订单,而对于系统来说一个订单经过拆分系统分单后,应视为多个订单,订单内的商品是不允许部分取消的,但你可以对一个订单下的某个库房订单进行取消。
从京东这个例子可以看出,能不能取消,取消支持到多深,这得是业务部门拍的。