From 6eac0d4c5dd9e4864d5284885c68fc07c5be741a Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 19 Dec 2019 13:30:12 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=BA=93=E5=AD=98][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=A4=B1=E8=B4=A5=E5=BA=93=E5=AD=98=E9=80=80?= =?UTF-8?q?=E5=9B=9Ebug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WxPayOrderController.java | 2 +- .../service/impl/WxOrderServiceImpl.java | 53 ++++++------------- .../service/impl/WxPayOrderServiceImpl.java | 9 ++++ 3 files changed, 27 insertions(+), 37 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java index 8521c8ef9..56c779ab7 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java @@ -133,7 +133,7 @@ public class WxPayOrderController extends BaseController { order = wxOrderService.getById(orderId); return new ResultData(Result.SUCCESS, "支付状态更新成功", order); } else { - return new ResultData(ErrorCode.PAY_ORDER_ERROR, "支付未状态,请等待!!"); + return new ResultData(ErrorCode.PAY_ORDER_ERROR, "支付状态未知,请等待!!"); } } else if (status.equals(EnumPayStatus.PAY_STATUS_FAIL.getCode())) { // 有价券支付失败 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index d83183692..30ab6da52 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -1168,43 +1168,24 @@ public class WxOrderServiceImpl implements WxOrderService { @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) public int updateOrderStatus(WxOrder updateOrder, EnumOrderStatus enumOrderStatus) { Date currentDate = new Date(); - switch (enumOrderStatus) { - case ORDER_STATUS_OVERTIME_CANCEL: // 支付取消,库存退回 - case ORDER_STATUS_REFUND_SUCCESS: { // 退款成功,库存退回 - try { - stockBack(updateOrder); - } catch (Exception e) { - logger.error("库存+1失败, e:" + e.getMessage()); - throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); - } - break; - } - case ORDER_STATUS_COOPERATING_OVERTIME: { // 拼团超时,退库存 - try { - stockBack(updateOrder); - } catch (Exception e) { - logger.error("库存+1失败, e:" + e.getMessage()); - throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); - } - break; - } - case ORDER_STATUS_COOPERATING_CANCEL: { // 拼团取消,退库存 - try { - stockBack(updateOrder); - } catch (Exception e) { - logger.error("库存+1失败, e:" + e.getMessage()); - throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); - } - break; - } - case ORDER_STATUS_COOPERATING_COMPLETE: { // 拼团完成,退库存 - try { - stockBack(updateOrder); - } catch (Exception e) { - logger.error("库存+1失败, e:" + e.getMessage()); - throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); + WxOrder oldOrder = wxOrderMapper.selectById(updateOrder.getId()); + if (!oldOrder.getOrderStatus().equals(enumOrderStatus.getCode())) { + // 状态已更新,库存不退回, 保证不会多退 + switch (enumOrderStatus) { + case ORDER_STATUS_OVERTIME_CANCEL: // 支付取消,库存退回 + case ORDER_STATUS_REFUND_SUCCESS: // 退款成功,库存退回 + case ORDER_STATUS_COOPERATING_OVERTIME: // 拼团超时,退库存 + case ORDER_STATUS_COOPERATING_CANCEL: // 拼团取消,退库存 + case ORDER_STATUS_COOPERATING_COMPLETE: // 拼团完成,退库存 + { + try { + stockBack(updateOrder); + } catch (Exception e) { + logger.error("库存+1失败, e:" + e.getMessage()); + throw new MallinkException(ErrorCode.REMAIN_BACK_FAIL); + } + break; } - break; } } WxOrder refOrder = new WxOrder(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index febfcbcb9..48678989a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -1609,6 +1609,15 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } catch (Exception e) { logger.error("支付订单失败状态更新异常: " + e.getMessage()); } + try { + int _count = wxOrderService.updateOrderStatus(order, EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL); + if (_count > 1) { + throw new MallinkException(ErrorCode.ORDER_IS_FAIL); + } + } catch (Exception e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL); + } throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "支付订单未成功"); } }