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(), "支付订单未成功"); } }