| | |
| | | if (order == null) { |
| | | return R.fail("未查询到支付成功的充电订单"); |
| | | } |
| | | mergeSuccessfulRefundAmounts(order); |
| | | PayOrderInfoDto dto = new PayOrderInfoDto(); |
| | | dto.setOrderId(order.getId().toString()); |
| | | dto.setCode(order.getCode()); |
| | |
| | | if (order == null) { |
| | | return R.fail("充电订单不存在"); |
| | | } |
| | | mergeSuccessfulRefundAmounts(order); |
| | | BigDecimal refundAmount = money(payOrderQueryDto.getRefundAmount()); |
| | | BigDecimal refundableAmount = money(order.getPaymentAmount()).subtract(money(order.getRefundAmount())).setScale(2, RoundingMode.HALF_UP); |
| | | if (refundAmount.compareTo(refundableAmount) > 0) { |
| | |
| | | } |
| | | } |
| | | |
| | | private void mergeSuccessfulRefundAmounts(TChargingOrder order) { |
| | | if (order == null || order.getId() == null) { |
| | | return; |
| | | } |
| | | List<TChargingOrderRefund> refunds = chargingOrderRefundService.list( |
| | | new LambdaQueryWrapper<TChargingOrderRefund>() |
| | | .eq(TChargingOrderRefund::getChargingOrderId, order.getId()) |
| | | .eq(TChargingOrderRefund::getRefundStatus, 2)); |
| | | if (refunds == null || refunds.isEmpty()) { |
| | | return; |
| | | } |
| | | BigDecimal successfulAmount = BigDecimal.ZERO; |
| | | BigDecimal explicitBalanceAmount = BigDecimal.ZERO; |
| | | BigDecimal explicitThirdAmount = BigDecimal.ZERO; |
| | | BigDecimal unspecifiedAmount = BigDecimal.ZERO; |
| | | for (TChargingOrderRefund refund : refunds) { |
| | | BigDecimal amount = money(refund.getRefundAmount()); |
| | | BigDecimal balanceAmount = money(refund.getBalanceRefundAmount()); |
| | | BigDecimal thirdAmount = money(refund.getThirdRefundAmount()); |
| | | successfulAmount = successfulAmount.add(amount); |
| | | explicitBalanceAmount = explicitBalanceAmount.add(balanceAmount); |
| | | explicitThirdAmount = explicitThirdAmount.add(thirdAmount); |
| | | if (balanceAmount.add(thirdAmount).compareTo(BigDecimal.ZERO) == 0) { |
| | | unspecifiedAmount = unspecifiedAmount.add(amount); |
| | | } |
| | | } |
| | | BigDecimal inferredThirdAmount = unspecifiedAmount.min( |
| | | getRefundableThirdPayAmount(order).subtract(explicitThirdAmount).max(BigDecimal.ZERO)); |
| | | BigDecimal inferredBalanceAmount = unspecifiedAmount.subtract(inferredThirdAmount).max(BigDecimal.ZERO); |
| | | order.setRefundAmount(money(order.getRefundAmount()).max(money(successfulAmount))); |
| | | order.setThirdRefundAmount(money(order.getThirdRefundAmount()).max(money(explicitThirdAmount.add(inferredThirdAmount)))); |
| | | order.setBalanceRefundAmount(money(order.getBalanceRefundAmount()).max(money(explicitBalanceAmount.add(inferredBalanceAmount)))); |
| | | } |
| | | |
| | | private R refundIcbcShareBeforeMainRefund(TChargingOrder order, TChargingOrderRefund refund, BigDecimal thirdRefundAmount) { |
| | | if (order == null || refund == null || thirdRefundAmount == null || thirdRefundAmount.compareTo(BigDecimal.ZERO) <= 0) { |
| | | return R.ok(); |