一、订单批量发货需求分析
订单批量发货功能:就是将相关订单的状态修改为已发货。
订单批量发货的业务逻辑实现:当用户进行了扫码支付,并且下单成功之后,商家就可以在管理后台查看到这些订单的信息。商家管理后台有一个管理列表页面,页面展示的就是所有已经完成支付的订单信息。商家可以对每一个订单来进行物流公司的选择,并且基于物流公司的第三方API来生成物流单号。商家对每一个订 单都操作完成之后,点击了确认按钮之后,需要把所有的订单状态修改为已发货。
二、代码实现
步骤(1)OrderController新增方法
/**
* 批量发货
* @param orders 订单列表
*/
@PostMapping("/batchSend")
public Result batchSend( @RequestBody List<Order> orders){
orderService.batchSend( orders );
return new Result( true,StatusCode.OK,"发货成功" );
}
步骤(2)OrderService新增方法定义
/**
* 批量发货
* @param orders
*/
void batchSend(List<Order> orders);
步骤(3)OrderServiceImpl实现该方法
@Override
@Transactional
public void batchSend(List<Order> orders) {
//判断运单号和物流公司是否为空
for(Order order :orders){
if(order.getId()==null){
throw new RuntimeException("订单号为空");
}
if(order.getShippingCode()==null || order.getShippingName()==null){
throw new RuntimeException("请选择快递公司和填写快递单号");
}
}
//循环订单,进行状态校验
for(Order order :orders){
Order order1 = orderMapper.selectByPrimaryKey( order.getId() );
if(!"0".equals( order1.getConsignStatus() ) || !"1".equals( order1.getOrderStatus() ) ){
throw new RuntimeException("订单状态有误!");
}
}
//循环订单更新操作
for(Order order :orders){
order.setOrderStatus("2");//订单状态 已发货
order.setConsignStatus("1"); //发货状态 已发货
order.setConsignTime(new Date());//发货时间
order.setUpdateTime( new Date());//更新时间
orderMapper.updateByPrimaryKeySelective(order);
//记录订单变动日志
OrderLog orderLog=new OrderLog();
orderLog.setId( idWorker.nextId()+"" );
orderLog.setOperateTime(new Date());//当前日期
orderLog.setOperater( "admin" );//系统管理员
orderLog.setOrderStatus("2"); //已完成
orderLog.setConsignStatus( "1" );//发状态(0未发货 1已发货)
orderLog.setOrderId(order.getId());
orderLogMapper.insertSelective( orderLog );
}
}
三、 对接第三方物流
当我们在电商平台购买了商品后,一般会非常关心商品的物流轨迹。那这些信息是如何获取的呢?我们需要对接第三方的物流系统。
中通API:https://open.zto.com/#/index
顺丰API:https://open.sf-express.com/developSupport/195960?activeIndex=149495
物流公司有很多,每一个物流公司都会有自己的第三方API ,项目可以按照物流 公司的API文档完成定制化的功能实现,功能上是可以实现的,但是快递公司这么多,如果对每一个快递公司的API都进行一套定制化实现的话,工作量非常大。
市面上有物流公司整合平台,整合平台就是将其他物流公司进行了资源整合,然后我们基于物流的整合平台来进行物流操作就可以了
比较有名的有:快递鸟
我们推荐使用快递鸟 :https://www.kdniao.com/
我们可以使用快递鸟提供的以下接口:
(1)预约取件API
预约取件API为用户提供了在线下单,预约快递员上门揽件的功能,为用户解决在线发货需求。
我们可以在实现批量发货功能后调用预约取件API
预约取件API:https://www.yuque.com/kdnjishuzhichi/dfcrg1/syz70m
(2)快递查询API
物流查询API提供实时查询物流轨迹的服务,用户提供运单号和快递公司,即可查询当前时刻的最新物流轨迹。
用户可以在用户中心调用此API完成物流信息的查询,电商平台也可以调用此API完成运单的跟踪。