From 7e06c9f73fc6cf5e493d3872dcc7e0671f1fa9a1 Mon Sep 17 00:00:00 2001 From: dzq Date: Thu, 10 Apr 2025 10:31:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=AE=A2=E5=8D=95):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E9=80=BB=E8=BE=91=E5=92=8C=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复订单退款逻辑,增加对支付方式的判断,避免对余额支付的订单进行退款操作。同时,优化退款异常处理,返回更详细的错误信息。在创建订单时,增加支付方式的设置。 --- .../api/controller/ApprovalApiController.java | 4 +++ .../api/controller/OrderController.java | 5 +++- .../ReturnApprovalApplicationService.java | 28 +++++++++++-------- .../shop/order/OrderApplicationService.java | 1 + 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java b/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java index 25b2ff6..d0248fd 100644 --- a/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java +++ b/agileboot-api/src/main/java/com/agileboot/api/controller/ApprovalApiController.java @@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.*; import org.apache.commons.lang3.StringUtils; import javax.validation.Valid; +import java.math.BigDecimal; import java.util.Date; /** @@ -63,6 +64,9 @@ public class ApprovalApiController { try { if (command.getStatus() == 2) { + if (command.getReturnAmount() == null || command.getReturnAmount().compareTo(BigDecimal.ZERO) <= 0) { + return ResponseDTO.fail(new ApiException(ErrorCode.Internal.INTERNAL_ERROR, "归还金额不能为空或小于等于0")); + } approvalApplicationService.approveApproval(command); } else if (command.getStatus() == 3) { approvalApplicationService.rejectApproval(command); diff --git a/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java b/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java index 84ae2fb..5f29365 100644 --- a/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java +++ b/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java @@ -96,7 +96,10 @@ public class OrderController extends BaseController { log.info("退款结果:{}", refundVO); return ResponseDTO.ok(refundVO); } catch (Exception e) { - throw new RuntimeException(e); + RefundVO refundVO = new RefundVO(); + refundVO.setSuccess(false); + refundVO.setMsg(e.getMessage()); + return ResponseDTO.fail(refundVO); } } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java index 9c51b02..d9f1cae 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java @@ -25,9 +25,11 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; /** @@ -119,18 +121,20 @@ public class ReturnApprovalApplicationService { throw new IllegalArgumentException("退款金额不能超过订单总额"); } - RefundVO refundVO = null; - try { - refundVO = paymentApplicationService.refund( - PayApiConstants.biz_id, PayApiConstants.appkey, - orderModel.getBizOrderId(), orderModel.getUcid(), - "退还", returnAmount.intValue()); - } catch (Exception e) { - throw new RuntimeException("退款失败", e); - } - log.info("退款结果:{}", refundVO); - if (null == refundVO || !refundVO.getSuccess()) { - throw new RuntimeException("退款失败"); + if (!Objects.equals(orderModel.getPaymentMethod(), "balance")) { + RefundVO refundVO = null; + try { + refundVO = paymentApplicationService.refund( + PayApiConstants.biz_id, PayApiConstants.appkey, + orderModel.getBizOrderId(), orderModel.getUcid(), + "退还", returnAmount.intValue()); + } catch (Exception e) { + throw new RuntimeException("退款失败", e); + } + log.info("退款结果:{}", refundVO); + if (null == refundVO || !refundVO.getSuccess()) { + throw new RuntimeException("退款失败"); + } } model.validateApprovalStatus(); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java index 3734502..aebbb35 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java @@ -127,6 +127,7 @@ public class OrderApplicationService { orderModel.setStatus(1); orderModel.generateOrderNumber(); orderModel.setTotalAmount(BigDecimal.valueOf(0)); + orderModel.setPaymentMethod(command.getPaymentType()); orderModel.insert(); processOrderGoods(orderModel, goodsList);