虚拟订单核验

This commit is contained in:
lifenlong 2021-05-29 12:31:38 +08:00
parent e5d4207839
commit 3639ed731b
3 changed files with 68 additions and 40 deletions

View File

@ -118,10 +118,16 @@ public interface OrderService extends IService<Order> {
/** /**
* 订单核验 * 订单核验
* *
* @param orderSn 订单编号 * @param verificationCode 验证码
* @param qrCode 提货码
*/ */
Order take(String orderSn, String qrCode); Order take(String orderSn,String verificationCode);
/**
* 根据核验码获取订单信息
*
* @param verificationCode 验证码
*/
Order getOrderByVerificationCode(String verificationCode);
/** /**
* 订单完成 * 订单完成

View File

@ -239,9 +239,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
*/ */
@Override @Override
public Order getBySn(String orderSn) { public Order getBySn(String orderSn) {
QueryWrapper<Order> orderWrapper = new QueryWrapper<>(); return this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getSn, orderSn));
orderWrapper.eq("sn", orderSn);
return this.getOne(orderWrapper);
} }
@Override @Override
@ -357,30 +355,29 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
} }
@Override @Override
@OrderLogPoint(description = "'订单['+#orderSn+']核销,核销码['+#verificationCode+']'", orderSn = "#orderSn") public Order take(String orderSn,String verificationCode) {
public Order take(String orderSn, String verificationCode) {
//是否可以查询到订单
Order order = OperationalJudgment.judgment(this.getBySn(orderSn));
//判断是否为虚拟订单
if (!order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name())) {
throw new ServiceException(ResultCode.ORDER_TAKE_ERROR);
}
//判断虚拟订单状态
if (order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) {
//判断提货码是否正确\修改订单状态
if (order.getOrderStatus().equals(OrderStatusEnum.TAKE.name()) && verificationCode.equals(order.getVerificationCode())) {
order.setOrderStatus(OrderStatusEnum.COMPLETED.name());
this.updateById(order); //获取订单信息
Order order = this.getBySn(orderSn);
//检测虚拟订单信息
checkVerificationOrder(order,verificationCode);
order.setOrderStatus(OrderStatusEnum.COMPLETED.name());
//修改订单信息
this.updateById(order);
//发送订单完成消息
OrderMessage orderMessage = new OrderMessage();
orderMessage.setNewStatus(OrderStatusEnum.COMPLETED);
orderMessage.setOrderSn(order.getSn());
this.sendUpdateStatusMessage(orderMessage);
return order;
}
OrderMessage orderMessage = new OrderMessage(); @Override
orderMessage.setNewStatus(OrderStatusEnum.COMPLETED); public Order getOrderByVerificationCode(String verificationCode) {
orderMessage.setOrderSn(order.getSn()); return this.getOne(new LambdaQueryWrapper<Order>()
this.sendUpdateStatusMessage(orderMessage); .eq(Order::getOrderStatus, OrderStatusEnum.TAKE.name())
} .eq(Order::getStoreId,UserContext.getCurrentUser().getStoreId())
return order; .eq(Order::getVerificationCode, verificationCode));
}
throw new ServiceException(ResultCode.ORDER_TAKE_ERROR);
} }
@Override @Override
@ -818,4 +815,28 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
orderMessage.setOrderSn(orderSn); orderMessage.setOrderSn(orderSn);
this.sendUpdateStatusMessage(orderMessage); this.sendUpdateStatusMessage(orderMessage);
} }
/**
* 检测虚拟订单信息
* @param order 订单
* @param verificationCode 验证码
*/
private void checkVerificationOrder(Order order,String verificationCode){
//判断查询是否可以查询到订单
if (order==null) {
throw new ServiceException(ResultCode.ORDER_NOT_EXIST);
}
//判断是否为虚拟订单
else if (!order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name())) {
throw new ServiceException(ResultCode.ORDER_TAKE_ERROR);
}
//判断虚拟订单状态
else if (order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) {
throw new ServiceException(ResultCode.ORDER_TAKE_ERROR);
}
//判断验证码是否正确
else if(!verificationCode.equals(order.getVerificationCode())){
throw new ServiceException(ResultCode.ORDER_TAKE_ERROR);
}
}
} }

View File

@ -117,22 +117,23 @@ public class OrderStoreController {
return ResultUtil.data(orderService.cancel(orderSn, reason)); return ResultUtil.data(orderService.cancel(orderSn, reason));
} }
@ApiOperation(value = "根据核验码获取订单信息")
@ApiImplicitParam(name = "verificationCode", value = "核验码", required = true, paramType = "path")
@GetMapping(value = "/getOrderByVerificationCode/{verificationCode}")
public ResultMessage<Object> getOrderByVerificationCode(@PathVariable String verificationCode){
return ResultUtil.data(orderService.getOrderByVerificationCode(verificationCode));
}
@ApiOperation(value = "订单核验") @ApiOperation(value = "订单核验")
@ApiImplicitParams({ @ApiImplicitParam(name = "verificationCode", value = "核验码", required = true, paramType = "path")
@ApiImplicitParam(name = "orderSn", value = "订单sn", required = true, dataType = "String", paramType = "path"), @PutMapping(value = "/take/${order}/{verificationCode}")
@ApiImplicitParam(name = "qrCode", value = "发货单号", required = true, dataType = "String", paramType = "query") public ResultMessage<Object> take(@PathVariable String orderSn,@PathVariable String verificationCode) {
}) return ResultUtil.data(orderService.take(orderSn,verificationCode));
@PostMapping(value = "/{orderSn}/take")
public ResultMessage<Object> take(@NotNull(message = "参数非法") @PathVariable String orderSn,
@NotNull(message = "核验码") String qrCode) {
return ResultUtil.data(orderService.take(orderSn, qrCode));
} }
@ApiOperation(value = "查询物流踪迹") @ApiOperation(value = "查询物流踪迹")
@ApiImplicitParams({ @ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path")
@ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path") @GetMapping(value = "/getTraces/{orderSn}")
})
@PostMapping(value = "/getTraces/{orderSn}")
public ResultMessage<Object> getTraces(@NotBlank(message = "订单编号不能为空") @PathVariable String orderSn) { public ResultMessage<Object> getTraces(@NotBlank(message = "订单编号不能为空") @PathVariable String orderSn) {
return ResultUtil.data(orderService.getTraces(orderSn)); return ResultUtil.data(orderService.getTraces(orderSn));
} }