@Transactional public OrderCancelResult cancelThirdOrder(OrderCancelParam param) { TradeThirdOrder tradeThirdOrder = getThirdOrderBythirdTradeNo(param.getServicePartner(), param.getThirdTradeNo()); if (tradeThirdOrder == null) { log.info("没下单成功的,无取消操作。"); throw new TradeException( new ReturnCode() { @Override public String getMessage() { return QunarErrorCode.SUCCESS.name(); } @Override public int getCode() { return QunarErrorCode.SUCCESS.code(); } }); } String orderNo = tradeThirdOrder.getOrderNo(); OrderBean orderBean = updateOrderBeanMapper.forupdateByOrderNo(orderNo); try { updateOrderStatus(orderNo, orderBean); } catch (Exception e) { log.error("", e); } try { updateThirdOrderStatus(orderNo, ThirdOrderStatus.ORDER_CANCEL); TradePayment tradePayment = paymentService.querySuccessTradePaymentByOrderNo(orderNo); Double ruserPrice = refundService.getRefundAmount(orderNo); Double cancelFee = refundService.getCancelFee(orderNo); otaRefundService.refundToUserAccount( orderBean, tradePayment, ruserPrice, param.getReason(), AgentChannelEnum.getType(orderBean.getOrderChannel())); OrderCancelResult result = new OrderCancelResult(); result.setOrderNo(orderNo); result.setThirdTradeNo(orderBean.getThirdTradeNo()); result.setRefundable(ruserPrice); result.setCancelFee(cancelFee); try { orderTrackService.cancelled(orderNo); } catch (Exception e) { log.error("记录取消订单DB级日志(订单动态)失败,容错。orderNo=" + orderNo, e); } return result; } catch (Exception e) { log.error( "OTA[" + orderBean.getOrderChannel() + "]取消订单失败,输入:" + JSON.toJSONString(orderBean), e); throw new TradeException(TradeReturnCodeEnum.FAILED_FOR_UPDATE, "取消订单"); } }
/** * @param orderNo * @param orderBean */ private void updateOrderStatus(String orderNo, OrderBean orderBean) { if (orderBean == null) { log.error("订单不存在,订单orderNo:" + orderNo); throw new TradeException( new ReturnCode() { @Override public String getMessage() { return QunarErrorCode.ORDER_NOT_FOUND.name(); } @Override public int getCode() { return QunarErrorCode.ORDER_NOT_FOUND.code(); } }); } OrderStatus orderMainStatus = OrderStatus.getStatus(orderBean.getOrderStatus()); switch (orderMainStatus) { case CANCEL_CLOSE: case CANCEL_NOSERVICE: case CANCEL_SERVICEED: case CANCELING: case CANCLE_CLOSE_NOPAY: case CANCLE_CLOSE_PAY_SERVICE: return; default: OrderBean record = new OrderBean(); record.setOrderStatus(OrderStatus.CANCELING.value); record.setOrderStatusName(OrderStatus.CANCELING.name); record.setOrderNo(orderNo); if (updateOrderBeanMapper.updateStatusByPrimaryKey(record) > 0) { log.info("取消订单成功:" + JSON.toJSONString(record)); } else { log.error("取消订单失败"); throw new TradeException( new ReturnCode() { @Override public String getMessage() { return QunarErrorCode.NOT_RESPONSED.name(); } @Override public int getCode() { return QunarErrorCode.NOT_RESPONSED.code(); } }); } } }