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