背景
第三方电商抓取订单后需要把订单下传到仓库,这样仓库那边才能正常发货。
第三方电商取消订单后;如果当前订单已经下传仓库,则需要向仓库发起订单拦截指令;如果没有下传仓库,则直接取消订单。
业务异常:订单取消成功但仓库却把订单中的商品发送了出去
第三方电商对应的服务为:xdt.service
下传仓库服务为:dip.service
项目采用dubbo分布式架构
订单下传与取消流转图
订单下传流转图
定单取消流转图
分析问题出现的原因
订单下传调用dip.service服务出现接口服务调用超时,可能导致在dip下传成功的订单在xdt中状态仍然为8002等待拦截。
此时如果第三方电商取消这个订单,这个订单会被直接取消,不会通知仓库进行拦截。
问题解决方案
方案1:取消订单的时候如果订单状态为8002,再去dip那边查询订单是否下传成功。如下为伪代码实现:
void cancalOrder(String orderId){
if(order.status==8002){
if(dip.order.exist){