| | |
| | | refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN); |
| | | if (refundAmount.compareTo(BigDecimal.ZERO) > 0) { |
| | | Integer rechargePaymentType = order.getRechargePaymentType(); |
| | | BigDecimal thirdRefundAmount = refundAmount.min(money(order.getThirdPayAmount())).setScale(2, RoundingMode.HALF_UP); |
| | | BigDecimal balanceRefundAmount = refundAmount.subtract(thirdRefundAmount).min(money(order.getBalancePayAmount())).setScale(2, RoundingMode.HALF_UP); |
| | | Integer payMethod = order.getPayMethod(); |
| | | BigDecimal thirdRefundAmount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP); |
| | | BigDecimal balanceRefundAmount = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP); |
| | | if (Integer.valueOf(1).equals(payMethod)) { |
| | | balanceRefundAmount = refundAmount.min(money(order.getBalancePayAmount())).setScale(2, RoundingMode.HALF_UP); |
| | | } else if (Integer.valueOf(2).equals(payMethod)) { |
| | | thirdRefundAmount = refundAmount.min(money(order.getThirdPayAmount())).setScale(2, RoundingMode.HALF_UP); |
| | | balanceRefundAmount = refundAmount.subtract(thirdRefundAmount).min(money(order.getBalancePayAmount())).setScale(2, RoundingMode.HALF_UP); |
| | | } else { |
| | | thirdRefundAmount = refundAmount; |
| | | } |
| | | refundAmount = thirdRefundAmount.add(balanceRefundAmount).setScale(2, RoundingMode.HALF_UP); |
| | | order.setThirdRefundAmount(thirdRefundAmount); |
| | | order.setBalanceRefundAmount(balanceRefundAmount); |
| | |
| | | chargingOrderRefund.setRefundRemark("实际充电消费金额:" + order.getPaymentAmount()); |
| | | chargingOrderRefund.setRefundTotalAmount(refundAmount); |
| | | chargingOrderRefund.setPayAmount(rechargeAmount); |
| | | if (thirdRefundAmount.compareTo(BigDecimal.ZERO) > 0 && 1 == rechargePaymentType) { |
| | | if (thirdRefundAmount.compareTo(BigDecimal.ZERO) == 0) { |
| | | chargingOrderRefund.setRefundStatus(2); |
| | | chargingOrderRefund.setRefundSerialNumber("BALANCE"); |
| | | chargingOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | chargingOrderRefundService.save(chargingOrderRefund); |
| | | if (balanceRefundAmount.compareTo(BigDecimal.ZERO) > 0) { |
| | | recordBalanceRefund(order, balanceRefundAmount, chargingOrderRefund.getRefundCode()); |
| | | } |
| | | order.setRefundStatus(2); |
| | | order.setRefundTime(LocalDateTime.now()); |
| | | chargingOrderService.updateById(order); |
| | | } else if (1 == rechargePaymentType) { |
| | | WxPaymentRefundModel model = new WxPaymentRefundModel(); |
| | | model.setOut_trade_no(order.getCode()); |
| | | model.setOut_refund_no(chargingOrderRefund.getRefundCode()); |
| | |
| | | chargingOrderRefundService.updateById(chargingOrderRefund); |
| | | } |
| | | } |
| | | if (thirdRefundAmount.compareTo(BigDecimal.ZERO) > 0 && 2 == rechargePaymentType) { |
| | | else if (2 == rechargePaymentType) { |
| | | RefundReq dto = new RefundReq(); |
| | | dto.setOutTradeNo(order.getCode()); |
| | | dto.setOutRequestNo(chargingOrderRefund.getRefundCode()); |
| | |
| | | chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); |
| | | } |
| | | } |
| | | if (thirdRefundAmount.compareTo(BigDecimal.ZERO) > 0 && 3 == rechargePaymentType) { |
| | | else if (3 == rechargePaymentType) { |
| | | RefundReq dto = new RefundReq(); |
| | | dto.setOutTradeNo(order.getRechargeSerialNumber()); |
| | | dto.setOutRequestNo(chargingOrderRefund.getRefundCode()); |
| | |
| | | chargingOrderRefundService.save(chargingOrderRefund); |
| | | chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null); |
| | | } |
| | | } |
| | | if (thirdRefundAmount.compareTo(BigDecimal.ZERO) == 0 && balanceRefundAmount.compareTo(BigDecimal.ZERO) > 0) { |
| | | chargingOrderRefund.setRefundStatus(2); |
| | | chargingOrderRefund.setRefundSerialNumber("BALANCE"); |
| | | chargingOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | chargingOrderRefundService.save(chargingOrderRefund); |
| | | recordBalanceRefund(order, balanceRefundAmount, chargingOrderRefund.getRefundCode()); |
| | | order.setRefundStatus(2); |
| | | order.setRefundTime(LocalDateTime.now()); |
| | | chargingOrderService.updateById(order); |
| | | } |
| | | } |
| | | } |