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(); } DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -21,6 +21,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; @@ -660,21 +661,36 @@ return; } PaymentRecord paymentRecord = paymentRecordService.query(1, orderTaxi.getUserId(), 1, orderTaxi.getId(), 2, orderTaxi.getPayType(), 2); if (paymentRecord == null || ToolUtil.isEmpty(paymentRecord.getCode())) { System.err.println("预支付退款数据异常(taxiOrderId = " + orderTaxi.getId() + ")"); return; } if (Integer.valueOf(1).equals(orderTaxi.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 = orderTaxi.getPrepaySecondPayNo(); if (ToolUtil.isEmpty(outRequestNo)) { System.err.println("出租车微信先付订单缺少支付单号,无法关闭支付单(taxiOrderId = " + orderTaxi.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)) { orderTaxi.setPrepayRefundNo(responseRefundNo); } finishPrepaidOrder(orderTaxi); } else { System.err.println("出租车微信先付退款申请失败:" + extractPrepayRefundMessage(response)); } return; } if (Integer.valueOf(2).equals(orderTaxi.getPayType())) { PaymentRecord paymentRecord = paymentRecordService.query(1, orderTaxi.getUserId(), 1, orderTaxi.getId(), 2, orderTaxi.getPayType(), 2); if (paymentRecord == null || ToolUtil.isEmpty(paymentRecord.getCode())) { System.err.println("预支付退款数据异常(taxiOrderId = " + orderTaxi.getId() + ")"); return; } try { Map<String, String> map = payMoneyUtil.aliRefund(paymentRecord.getCode(), refundMoney.toString()); if ("10000".equals(map.get("code"))) { @@ -719,6 +735,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(); }