| | |
| | | if (passwordValid.getCode() != 200) { |
| | | return passwordValid; |
| | | } |
| | | if (payOrderQueryDto.getRefundAmount() == null || payOrderQueryDto.getRefundAmount().compareTo(BigDecimal.ZERO) <= 0) { |
| | | return R.fail("退款金额必须大于0"); |
| | | } |
| | | if (payOrderQueryDto.getType() == 1) { |
| | | TChargingOrder tChargingOrder = this.baseMapper.selectById(payOrderQueryDto.getOrderId()); |
| | | if (tChargingOrder.getPaymentAmount().compareTo(payOrderQueryDto.getRefundAmount()) == -1) { |
| | | return R.fail("退款金额需小于支付金额"); |
| | | if (tChargingOrder == null) { |
| | | return R.fail("充电订单不存在"); |
| | | } |
| | | if ((tChargingOrder.getRechargeAmount().subtract(tChargingOrder.getRefundAmount()).compareTo(payOrderQueryDto.getRefundAmount())) == 0) { |
| | | BigDecimal manualRefundAmount = money(payOrderQueryDto.getRefundAmount()); |
| | | BigDecimal remainingRefundAmount = money(tChargingOrder.getPaymentAmount()) |
| | | .subtract(money(tChargingOrder.getRefundAmount())).max(BigDecimal.ZERO); |
| | | if (manualRefundAmount.compareTo(remainingRefundAmount) > 0) { |
| | | return R.fail("退款金额不能超过剩余可退金额" + remainingRefundAmount.toPlainString() + "元"); |
| | | } |
| | | if (manualRefundAmount.compareTo(remainingRefundAmount) == 0) { |
| | | tChargingOrder.setStatus(5); |
| | | } |
| | | |
| | | TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); |
| | | chargingOrderRefund.setChargingOrderId(tChargingOrder.getId()); |
| | | chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount()); |
| | | chargingOrderRefund.setRefundAmount(manualRefundAmount); |
| | | chargingOrderRefund.setRefundStatus(1); |
| | | chargingOrderRefund.setPayType(tChargingOrder.getRechargePaymentType()); |
| | | chargingOrderRefund.setRefundTime(LocalDateTime.now()); |
| | |
| | | chargingOrderRefund.setRefundContent("后台退款"); |
| | | chargingOrderRefund.setRefundReason("后台退款"); |
| | | chargingOrderRefund.setRefundRemark(payOrderQueryDto.getRemark()); |
| | | chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount())); |
| | | chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount()); |
| | | BigDecimal manualRefundAmount = money(payOrderQueryDto.getRefundAmount()); |
| | | chargingOrderRefund.setRefundTotalAmount(money(tChargingOrder.getRefundAmount()).add(manualRefundAmount)); |
| | | chargingOrderRefund.setPayAmount(money(tChargingOrder.getPaymentAmount())); |
| | | BigDecimal refundedThirdAmount = money(tChargingOrder.getThirdRefundAmount()); |
| | | BigDecimal refundableThirdAmount = money(tChargingOrder.getThirdPayAmount()).subtract(refundedThirdAmount); |
| | | if (refundableThirdAmount.compareTo(BigDecimal.ZERO) < 0) { |
| | |
| | | amount.setCurrency("CNY"); |
| | | model.setAmount(amount); |
| | | R<Map<String, Object>> orderR = wxPaymentClient.refundOrderR(model); |
| | | if (200 == orderR.getCode()) { |
| | | finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); |
| | | //手续费 |
| | | if (orderR == null || orderR.getCode() != 200) { |
| | | return R.fail(orderR == null ? "微信退款服务无响应" : firstNotBlank(orderR.getMsg(), "微信退款失败")); |
| | | } |
| | | finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); |
| | | //手续费 |
| | | if (orderR.getData() != null && orderR.getData().get("amount") instanceof Map) { |
| | | Map<String, Object> amount1 = (Map<String, Object>) orderR.getData().get("amount"); |
| | | Object refund_fee1 = amount1.get("refund_fee"); |
| | | BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100)); |
| | |
| | | dto.setOutRequestNo(tChargingOrder.getCode()); |
| | | dto.setRefundAmount(thirdRefundAmount.toString()); |
| | | dto.setRefundReason("取消订单"); |
| | | RefundResp resp = aliPaymentClient.refund(dto).getData(); |
| | | if (null != resp) { |
| | | finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); |
| | | |
| | | R<RefundResp> refundResult = aliPaymentClient.refund(dto); |
| | | RefundResp resp = refundResult == null ? null : refundResult.getData(); |
| | | if (refundResult == null || refundResult.getCode() != 200 || resp == null || !"10000".equals(resp.getCode())) { |
| | | return R.fail(refundResult == null ? "支付宝退款服务无响应" |
| | | : firstNotBlank(resp == null ? null : resp.getMsg(), refundResult.getMsg(), "支付宝退款失败")); |
| | | } |
| | | finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); |
| | | } |
| | | else if (3 == tChargingOrder.getRechargePaymentType()) { |
| | | RefundReq dto = new RefundReq(); |
| | |
| | | dto.setOutRequestNo(tChargingOrder.getCode()); |
| | | dto.setRefundAmount(thirdRefundAmount.toString()); |
| | | dto.setRefundReason("取消订单"); |
| | | RefundResp resp = h5AliPaymentClient.refund(dto).getData(); |
| | | if (null != resp && "10000".equals(resp.getCode())) { |
| | | finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); |
| | | |
| | | R<RefundResp> refundResult = h5AliPaymentClient.refund(dto); |
| | | RefundResp resp = refundResult == null ? null : refundResult.getData(); |
| | | if (refundResult == null || refundResult.getCode() != 200 || resp == null || !"10000".equals(resp.getCode())) { |
| | | return R.fail(refundResult == null ? "支付宝H5退款服务无响应" : firstNotBlank(refundResult.getMsg(), "支付宝H5退款失败")); |
| | | } |
| | | finishManualChargingRefund(tChargingOrder, chargingOrderRefund, manualRefundAmount, balanceRefundAmount, thirdRefundAmount); |
| | | } |
| | | else { |
| | | return R.fail("不支持的退款支付方式"); |
| | | } |
| | | |
| | | if(5 == tChargingOrder.getStatus()){ |
| | |
| | | chengDuJianGuanClient.notificationOrderInfo(statusVo); |
| | | }); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | if (payOrderQueryDto.getType() == 2) { |
| | | TShoppingOrder shoppingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId()); |