longz
2026-07-09 47c9a4de5451b06724ed3b5256f9592fffec8b76
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() + ")");
        if (Integer.valueOf(1).equals(orderPrivateCar.getPayType())) {
            String outRequestNo = orderPrivateCar.getPrepaySecondPayNo();
            if (ToolUtil.isEmpty(outRequestNo)) {
                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"));
            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();
    }