diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java index 553ab89c5..a53fc0799 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java @@ -769,9 +769,9 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { @Override public void refundOrder(OrderBasicInfo orderBasicInfo) { BigDecimal refundAmount = orderBasicInfo.getRefundAmount(); - // 如果退款金额小于0, 不执行退款 - if (refundAmount.compareTo(BigDecimal.ZERO) < 0) { - logger.info("执行订单退款-退款金额小于0,orderCode:{}, 退款金额:{}", orderBasicInfo.getOrderCode(), refundAmount); + // 如果退款金额小于等于0, 不执行退款 + if (refundAmount == null || refundAmount.compareTo(BigDecimal.ZERO) <= 0) { + logger.info("执行订单退款-退款金额小于等于0,orderCode:{}, 退款金额:{}", orderBasicInfo.getOrderCode(), refundAmount); return; } // 查询该笔订单的退款记录 @@ -987,23 +987,38 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { @Transactional(rollbackFor = Exception.class) public void balancePaymentOrderRefund(OrderBasicInfo orderBasicInfo) { logger.info("【{}】-余额支付订单退款start orderBasicInfo:{}", this.getClass().getSimpleName(), JSON.toJSONString(orderBasicInfo)); + // 需要退款的金额 + BigDecimal refundAmount = orderBasicInfo.getRefundAmount(); + + // 如果退款金额小于等于0, 不执行退款 + if (refundAmount == null || refundAmount.compareTo(BigDecimal.ZERO) <= 0) { + logger.info("balancePaymentOrderRefund-退款金额小于等于0,orderCode:{}, 退款金额:{}", orderBasicInfo.getOrderCode(), refundAmount); + return; + } + // 订单编号 String orderCode = orderBasicInfo.getOrderCode(); + // 运营商id String merchantId = orderBasicInfo.getMerchantId(); + // 订单消费金额 BigDecimal orderAmount = orderBasicInfo.getOrderAmount(); + // 查支付记录 List payRecordList = orderPayRecordService.getOrderPayRecordList(orderCode); + // 根据payMode分组 Map> payRecordMap = payRecordList.stream() .collect(Collectors.groupingBy(OrderPayRecord::getPayMode)); + // 获取本金支付的记录 List principalPayRecordList = payRecordMap.get(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue()); BigDecimal principalPay = null; if (CollectionUtils.isNotEmpty(principalPayRecordList)) { principalPay = principalPayRecordList.stream().map(OrderPayRecord::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add); } + // 获取赠送金支付的记录 List giftPayRecordList = payRecordMap.get(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue()); BigDecimal giftPay = null; @@ -1020,6 +1035,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { // 需要退回本金的金额 BigDecimal returnPrincipal = returnAmountMap.get("returnPrincipal"); + // 需要退回赠送金的金额 BigDecimal returnGift = returnAmountMap.get("returnGift"); @@ -1049,15 +1065,19 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { */ private void onlinePaymentOrderRefund(OrderBasicInfo orderBasicInfo) { logger.info("【{}】-在线支付订单退款start orderBasicInfo:{}", this.getClass().getSimpleName(), JSON.toJSONString(orderBasicInfo)); - // 订单编号 - String orderCode = orderBasicInfo.getOrderCode(); // 需要退款的金额 BigDecimal refundAmount = orderBasicInfo.getRefundAmount(); + // 如果退款金额小于等于0, 不执行退款 + if (refundAmount == null || refundAmount.compareTo(BigDecimal.ZERO) <= 0) { + logger.info("onlinePaymentOrderRefund-退款金额小于等于0,orderCode:{}, 退款金额:{}", orderBasicInfo.getOrderCode(), refundAmount); + return; + } + // 微信退款逻辑 ApplyRefundDTO applyRefundDTO = new ApplyRefundDTO(); - applyRefundDTO.setOrderCode(orderCode); + applyRefundDTO.setOrderCode(orderBasicInfo.getOrderCode()); applyRefundDTO.setRefundType(Constants.ONE); applyRefundDTO.setRefundAmount(refundAmount);