From dd45d210e2cbc60321fd3ed0c2ef5a0ba533faf5 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期日, 12 四月 2026 15:13:59 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/YueKeDuo
---
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 137 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 132 insertions(+), 5 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 ebce842..a724b3a 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
@@ -109,6 +109,18 @@
@Resource
private IOpenCityService openCityService;
+ @Autowired
+ private IPaymentRecordService paymentRecordService;
+
+ @Autowired
+ private ITransactionDetailsService transactionDetailsService;
+
+ @Autowired
+ private IIncomeService incomeService;
+
+ @Autowired
+ private PayMoneyUtil payMoneyUtil;
+
/**
* 获取司机端首页订单列表
@@ -789,12 +801,14 @@
double estimateAmount = orderPrivateCar.getEstimateAmount() == null ? 0D : orderPrivateCar.getEstimateAmount();
int compareResult = BigDecimal.valueOf(estimateAmount).compareTo(BigDecimal.valueOf(orderPrivateCar.getOrderMoney()));
if (compareResult > 0) {
+ orderPrivateCar.setState(7);
+ orderPrivateCar.setPrepayStage(4);
handlePrepaidRefund(orderPrivateCar, estimateAmount - orderPrivateCar.getOrderMoney());
- orderPrivateCar.setState(9);
} else if (compareResult < 0) {
orderPrivateCar.setState(7);
+ orderPrivateCar.setPrepayStage(3);
} else {
- orderPrivateCar.setState(9);
+ finishPrepaidOrder(orderPrivateCar);
}
} else {
orderPrivateCar.setState(7);
@@ -846,6 +860,17 @@
}
}).start();
+ if (Integer.valueOf(8).equals(orderPrivateCar.getState()) && Integer.valueOf(5).equals(orderPrivateCar.getPrepayStage())) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ if (pushMinistryOfTransport) {
+ pushMinistryOfTransportUtil.operatePay(orderId);
+ }
+ }
+ }).start();
+ }
+
OrderPrivateCar finalOrderPrivateCar = orderPrivateCar;
new Thread(new Runnable() {
@Override
@@ -862,13 +887,115 @@
}
/**
- * 先付订单退款预留逻辑,后续接入真实退款接口
+ * 处理预支付多退退款
*/
- private void handlePrepaidRefund(OrderPrivateCar orderPrivateCar, Double refundAmount) {
+ private void handlePrepaidRefund(OrderPrivateCar orderPrivateCar, Double refundAmount) throws Exception {
if (refundAmount == null || refundAmount <= 0) {
return;
}
- // TODO 对接真实退款接口,当前先保留调用入口,避免阻塞订单完成流程
+ Double refundMoney = formatMoney(refundAmount);
+ String refundNo = buildPrepayRefundNo(1, orderPrivateCar.getId());
+ orderPrivateCar.setPrepayRefundNo(refundNo);
+ orderPrivateCar.setPrepayRefundAmount(refundMoney);
+
+ if (Integer.valueOf(3).equals(orderPrivateCar.getPayType())) {
+ UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId());
+ if (userInfo != null) {
+ userInfo.setBalance(formatMoney((userInfo.getBalance() == null ? 0D : userInfo.getBalance()) + refundMoney));
+ userInfoMapper.updateById(userInfo);
+ finishPrepaidOrder(orderPrivateCar);
+ }
+ 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"));
+ }
+ return;
+ }
+
+ if (Integer.valueOf(2).equals(orderPrivateCar.getPayType())) {
+ try {
+ Map<String, String> map = payMoneyUtil.aliRefund(paymentRecord.getCode(), refundMoney.toString());
+ if ("10000".equals(map.get("code"))) {
+ finishPrepaidOrder(orderPrivateCar);
+ } else {
+ System.err.println("专车预支付退款申请失败:" + map.get("msg"));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void finishPrepaidOrder(OrderPrivateCar orderPrivateCar) throws Exception {
+ boolean refunded = Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())
+ && orderPrivateCar.getPrepayRefundAmount() != null
+ && orderPrivateCar.getPrepayRefundAmount() > 0;
+ if (refunded && orderPrivateCar.getPrepayRefundTime() == null) {
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车预支付退款", orderPrivateCar.getPrepayRefundAmount(), 1, 1, 1, 1, orderPrivateCar.getId());
+ orderPrivateCar.setPrepayRefundTime(new Date());
+ }
+ orderPrivateCar.setState(8);
+ orderPrivateCar.setPrepayStage(5);
+ orderPrivateCar.setPayMoney(formatMoney(orderPrivateCar.getOrderMoney()));
+
+ if (orderPrivateCar.getRecoveryOrder() == null || orderPrivateCar.getRecoveryOrder() == 0) {
+ Double orderMoney = (2 == orderPrivateCar.getAbnormal() && 2 == orderPrivateCar.getAbnormalStatus()
+ ? orderPrivateCar.getResponsibilityMoney().doubleValue() : orderPrivateCar.getOrderMoney());
+ Map<String, Object> map = incomeService.saveIncome(orderPrivateCar.getId(), 1, orderMoney);
+ orderPrivateCar.setSplitAllocation(JSON.toJSONString(map));
+ }
+
+ if (orderPrivateCar.getAbnormal() != null && orderPrivateCar.getAbnormal() == 2
+ && orderPrivateCar.getAbnormalStatus() != null && orderPrivateCar.getAbnormalStatus() == 1) {
+ orderPrivateCar.setAbnormalStatus(3);
+ orderPrivateCar.setResponsibilityMoney(new BigDecimal(orderPrivateCar.getOrderMoney()));
+ orderPrivateCar.setResponsibilityType(3);
+ orderPrivateCar.setAbnormalRemark("乘客已完成预支付订单结算,申诉已自动关闭");
+ }
+ }
+
+ private String buildPrepayRefundNo(Integer orderType, Integer orderId) {
+ return "PRF_" + orderType + "_" + orderId + "_" + System.currentTimeMillis();
+ }
+
+ private Double formatMoney(Double money) {
+ return new BigDecimal(money == null ? 0D : money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+ }
+
+ @Override
+ public void payPrepaidRefundCallback(Integer orderId, String refundNo, String refundId) throws Exception {
+ OrderPrivateCar orderPrivateCar = this.selectById(orderId);
+ if (orderPrivateCar == null || !Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) {
+ return;
+ }
+ if (ToolUtil.isNotEmpty(orderPrivateCar.getPrepayRefundTime())) {
+ return;
+ }
+ if (ToolUtil.isNotEmpty(orderPrivateCar.getPrepayRefundNo()) && !orderPrivateCar.getPrepayRefundNo().equals(refundNo)) {
+ return;
+ }
+ finishPrepaidOrder(orderPrivateCar);
+ this.updateById(orderPrivateCar);
+ pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState());
+ pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState());
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ if (pushMinistryOfTransport) {
+ pushMinistryOfTransportUtil.operatePay(orderId);
+ }
+ }
+ }).start();
}
--
Gitblit v1.7.1