订单批量发货
批量发货业务逻辑
需求分析
实现批量发货的业务逻辑
代码实现
(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 ); } }
对接第三方物流(了解)
当我们在电商平台购买了商品后,一般会非常关心商品的物流轨迹。那这些信息是如何获取的呢?我们需要对接第三方的物流系统。比较常用的有菜鸟物流、快递鸟等。
我们这里推荐使用快递鸟 http://www.kdniao.com
我们可以使用快递鸟提供的以下接口:
(1)预约取件API
预约取件API为用户提供了在线下单,预约快递员上门揽件的功能,为用户解决在线发货需求。
我们可以在实现批量发货功能后调用预约取件API
(2)即时查询API
物流查询API提供实时查询物流轨迹的服务,用户提供运单号和快递公司,即可查询当前时刻的最新物流轨迹。
用户可以在用户中心调用此API完成物流信息的查询,电商平台也可以调用此API完成运单的跟踪。