Browse Source

fixed 退款金额逻辑问题

fushengqian 1 year ago
parent
commit
f3bf2dbf88

+ 24 - 14
fuint-application/src/main/java/com/fuint/common/service/impl/RefundServiceImpl.java

@@ -410,6 +410,10 @@ public class RefundServiceImpl extends ServiceImpl<MtRefundMapper, MtRefund> imp
         MtRefund mtRefund = mtRefundMapper.selectById(refund.getId());
         UserOrderDto orderInfo = orderService.getOrderById(mtRefund.getOrderId());
 
+        if (mtRefund.getAmount().compareTo(orderInfo.getAmount()) > 0) {
+            throw new BusinessCheckException("退款金额不能大于订单总金额");
+        }
+
         OrderDto reqDto = new OrderDto();
         reqDto.setId(orderInfo.getId());
         reqDto.setStatus(OrderStatusEnum.REFUND.getKey());
@@ -424,20 +428,26 @@ public class RefundServiceImpl extends ServiceImpl<MtRefundMapper, MtRefund> imp
         if (orderInfo.getPayType().equals(PayTypeEnum.BALANCE.getKey())) {
             List<MtBalance> balanceList = balanceService.getBalanceListByOrderSn(orderInfo.getOrderSn());
             if (balanceList.size() > 0) {
-               for (MtBalance mtBalance : balanceList) {
-                   if (mtBalance.getAmount().compareTo(new BigDecimal("0")) < 0) {
-                       MtBalance balanceReq = new MtBalance();
-                       balanceReq.setUserId(orderInfo.getUserId());
-                       balanceReq.setMerchantId(orderInfo.getMerchantId());
-                       balanceReq.setOrderSn(orderInfo.getOrderSn());
-                       balanceReq.setMobile(orderInfo.getUserInfo().getMobile());
-                       balanceReq.setAmount(mtBalance.getAmount().negate());
-                       balanceReq.setStatus(StatusEnum.ENABLED.getKey());
-                       balanceReq.setCreateTime(new Date());
-                       balanceReq.setUpdateTime(new Date());
-                       balanceService.addBalance(balanceReq, true);
-                   }
-               }
+                BigDecimal refundAmount = new BigDecimal("0");
+                for (MtBalance mtBalance : balanceList) {
+                    if (mtBalance.getAmount().compareTo(new BigDecimal("0")) < 0) {
+                        refundAmount = refundAmount.add(mtBalance.getAmount());
+                    }
+                }
+                MtBalance balanceReq = new MtBalance();
+                balanceReq.setUserId(orderInfo.getUserId());
+                balanceReq.setMerchantId(orderInfo.getMerchantId());
+                balanceReq.setOrderSn(orderInfo.getOrderSn());
+                balanceReq.setMobile(orderInfo.getUserInfo().getMobile());
+                if (mtRefund.getAmount() != null && mtRefund.getAmount().compareTo(new BigDecimal("0")) > 0) {
+                    balanceReq.setAmount(mtRefund.getAmount().negate());
+                } else if (refundAmount.compareTo(orderInfo.getPayAmount()) <= 0) {
+                    balanceReq.setAmount(refundAmount);
+                }
+                balanceReq.setStatus(StatusEnum.ENABLED.getKey());
+                balanceReq.setCreateTime(new Date());
+                balanceReq.setUpdateTime(new Date());
+                balanceService.addBalance(balanceReq, true);
             }
         }