From 47c9a4de5451b06724ed3b5256f9592fffec8b76 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期四, 09 七月 2026 19:41:30 +0800
Subject: [PATCH] fix: 确认费用
---
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 80 +++++++++++++++++++++++++++++++++++----
1 files changed, 71 insertions(+), 9 deletions(-)
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 4f3d320..08cc508 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -956,21 +956,36 @@
return;
}
- PaymentRecord paymentRecord = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, orderPrivateCar.getId(), 1, orderPrivateCar.getPayType(), 2);
- if (paymentRecord == null || ToolUtil.isEmpty(paymentRecord.getCode())) {
- System.err.println("预支付退款数据异常(privateCarOrderId = " + orderPrivateCar.getId() + ")");
- return;
- }
-
if (Integer.valueOf(1).equals(orderPrivateCar.getPayType())) {
- Map<String, String> map = payMoneyUtil.wxRefund(paymentRecord.getCode(), refundNo, paymentRecord.getAmount().toString(), refundMoney.toString(), "/base/prepayRefundWXPay");
- if (!"SUCCESS".equals(map.get("return_code"))) {
- System.err.println("专车预支付退款申请失败:" + map.get("return_msg"));
+ String outRequestNo = orderPrivateCar.getPrepaySecondPayNo();
+ if (ToolUtil.isEmpty(outRequestNo)) {
+ System.err.println("快车微信先付订单缺少支付单号,无法关闭支付单(privateCarOrderId = " + orderPrivateCar.getId() + ")");
+ return;
+ }
+ CbyzxPayUtil.ClosePayOrderRequest request = new CbyzxPayUtil.ClosePayOrderRequest();
+ request.setOutRequestNo(outRequestNo);
+ request.setRefundOutRequestNo(refundNo);
+ request.setRefundAmount(toFen(refundMoney));
+ request.setRefundDesc("快车预支付多退退款");
+ JSONObject response = CbyzxPayUtil.closePayOrder(request);
+ if (isPrepayRefundSuccess(response)) {
+ String responseRefundNo = extractPrepayRefundNo(response);
+ if (ToolUtil.isNotEmpty(responseRefundNo)) {
+ orderPrivateCar.setPrepayRefundNo(responseRefundNo);
+ }
+ finishPrepaidOrder(orderPrivateCar);
+ } else {
+ System.err.println("快车微信先付退款申请失败:" + extractPrepayRefundMessage(response));
}
return;
}
if (Integer.valueOf(2).equals(orderPrivateCar.getPayType())) {
+ PaymentRecord paymentRecord = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, orderPrivateCar.getId(), 1, orderPrivateCar.getPayType(), 2);
+ if (paymentRecord == null || ToolUtil.isEmpty(paymentRecord.getCode())) {
+ System.err.println("预支付退款数据异常(privateCarOrderId = " + orderPrivateCar.getId() + ")");
+ return;
+ }
try {
Map<String, String> map = payMoneyUtil.aliRefund(paymentRecord.getCode(), refundMoney.toString());
if ("10000".equals(map.get("code"))) {
@@ -1016,6 +1031,53 @@
return "PRF_" + orderType + "_" + orderId + "_" + System.currentTimeMillis();
}
+ private Integer toFen(Double amount) {
+ return new BigDecimal(String.valueOf(amount)).multiply(new BigDecimal("100")).setScale(0, RoundingMode.HALF_UP).intValue();
+ }
+
+ private boolean isPrepayRefundSuccess(JSONObject response) {
+ if (response == null) {
+ return false;
+ }
+ Object code = response.get("code");
+ if (code == null || !"0".equals(String.valueOf(code))) {
+ return false;
+ }
+ JSONObject data = response.getJSONObject("data");
+ return data != null && Boolean.TRUE.equals(data.getBoolean("isSuccess"));
+ }
+
+ private String extractPrepayRefundNo(JSONObject response) {
+ if (response == null) {
+ return null;
+ }
+ JSONObject data = response.getJSONObject("data");
+ if (data == null) {
+ return null;
+ }
+ String refundNo = data.getString("merchantRefundSerialNo");
+ if (ToolUtil.isNotEmpty(refundNo)) {
+ return refundNo;
+ }
+ refundNo = data.getString("refundId");
+ if (ToolUtil.isNotEmpty(refundNo)) {
+ return refundNo;
+ }
+ return data.getString("gatewaySerialNo");
+ }
+
+ private String extractPrepayRefundMessage(JSONObject response) {
+ if (response == null) {
+ return "微信先付退款失败";
+ }
+ JSONObject data = response.getJSONObject("data");
+ if (data != null && ToolUtil.isNotEmpty(data.getString("failReason"))) {
+ return data.getString("failReason");
+ }
+ String msg = response.getString("msg");
+ return ToolUtil.isNotEmpty(msg) ? msg : "微信先付退款失败";
+ }
+
private Double formatMoney(Double money) {
return new BigDecimal(money == null ? 0D : money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
}
--
Gitblit v1.7.1