From dc4972749d8dc399b02a548adfd12119fc8c2bcd Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期一, 11 五月 2026 20:49:52 +0800
Subject: [PATCH] fix bugs
---
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 193 +++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 165 insertions(+), 28 deletions(-)
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 7ec98e1..c869896 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -1135,24 +1135,8 @@
if (orderPrivateCar.getState() >= 5 && orderPrivateCar.getState() != 11 && orderPrivateCar.getCancelType() ==2) {
return ResultUtil.error("订单已取消,请刷新页面");
}
-
-
-
- if (!Integer.valueOf(2).equals(orderPrivateCar.getPaymentMode()) && StrUtil.isNotEmpty(orderPrivateCar.getPrepaySecondPayNo())) {
- ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar, reason, remark, uid);
- if (refundResult != null) {
- if (!ResultUtil.SUCCESS.equals(refundResult.getCode())) {
- return refundResult;
- }
- Map<String, Object> map = new HashMap<>();
- map.put("id", null);
-// return ResultUtil.success(map);
- }
- }else if(!Integer.valueOf(2).equals(orderPrivateCar.getPaymentMode()) && StrUtil.isEmpty(orderPrivateCar.getPrepaySecondPayNo())){
- UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
- userInfo.setBalance(userInfo.getBalance() + orderPrivateCar.getPayMoney());
- userInfoService.updateById(userInfo);
-
+ if (!Integer.valueOf(2).equals(orderPrivateCar.getPaymentMode())) {
+ handlePrivateCarPrepayCancelRefund(orderPrivateCar,reason);
}
Integer number1 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6));
Integer number2 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6));
@@ -1376,6 +1360,7 @@
String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId"));
map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1);
map.put("orderType", 1);
+ fillPrivateCarPrepayDisplayMoney(this.selectById(orderId), map);
return map;
}
@@ -2613,21 +2598,48 @@
private boolean isPrivateCarPrepayFinalStage(OrderPrivateCar orderPrivateCar) {
return orderPrivateCar != null
- && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode())
- && !Integer.valueOf(5).equals(orderPrivateCar.getPrepayStage())
- && orderPrivateCar.getPayMoney() != null
- && orderPrivateCar.getPayMoney() > 0;
+ && Integer.valueOf(7).equals(orderPrivateCar.getState());
}
private BigDecimal toMoney(Double amount) {
return new BigDecimal(String.valueOf(amount == null ? 0D : amount)).setScale(2, RoundingMode.HALF_UP);
}
- private Double getPrivateCarPrepayFinalPayAmount(OrderPrivateCar orderPrivateCar, Double finalAmount) {
+ private PaymentRecord getPrivateCarPrepayPaidRecord(OrderPrivateCar orderPrivateCar) throws Exception {
+ PaymentRecord paymentRecord = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, orderPrivateCar.getId(), 1, orderPrivateCar.getPayType(), 2);
+ if (paymentRecord == null) {
+ paymentRecord = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, orderPrivateCar.getId(), 1, null, 2);
+ }
+ if (paymentRecord == null) {
+ paymentRecord = paymentRecordService.query(1, null, null, orderPrivateCar.getId(), 1, null, 2);
+ }
+ if (paymentRecord != null && orderPrivateCar.getPayType() == null) {
+ orderPrivateCar.setPayType(paymentRecord.getPayType());
+ }
+ return paymentRecord;
+ }
+
+ private BigDecimal getPrivateCarPrepayPaidAmount(OrderPrivateCar orderPrivateCar) throws Exception {
+ PaymentRecord paymentRecord = getPrivateCarPrepayPaidRecord(orderPrivateCar);
+ if (paymentRecord != null && paymentRecord.getAmount() != null && paymentRecord.getAmount() > 0) {
+ return toMoney(paymentRecord.getAmount());
+ }
+ if ((Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) || (orderPrivateCar.getPrepayStage() != null && orderPrivateCar.getPrepayStage() > 0))
+ && orderPrivateCar.getPayMoney() != null && orderPrivateCar.getPayMoney() > 0) {
+ return toMoney(orderPrivateCar.getPayMoney());
+ }
+ return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+ }
+
+ private Double getPrivateCarPrepayFinalPayAmount(OrderPrivateCar orderPrivateCar, Double finalAmount) throws Exception {
if (!isPrivateCarPrepayFinalStage(orderPrivateCar)) {
return toMoney(finalAmount).doubleValue();
}
- BigDecimal spreadAmount = toMoney(finalAmount).subtract(toMoney(orderPrivateCar.getPayMoney())).setScale(2, RoundingMode.HALF_UP);
+ BigDecimal paidAmount = getPrivateCarPrepayPaidAmount(orderPrivateCar);
+ if (paidAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ return toMoney(finalAmount).doubleValue();
+ }
+ BigDecimal spreadAmount = toMoney(finalAmount).subtract(paidAmount).setScale(2, RoundingMode.HALF_UP);
if (spreadAmount.compareTo(BigDecimal.ZERO) > 0) {
orderPrivateCar.setPrepayStage(3);
return spreadAmount.doubleValue();
@@ -2635,11 +2647,41 @@
return 0D;
}
+ private Double getPrivateCarPrepayDisplayPayAmount(OrderPrivateCar orderPrivateCar, Double finalAmount) {
+ if (!isPrivateCarPrepayFinalStage(orderPrivateCar)) {
+ return toMoney(finalAmount).doubleValue();
+ }
+ try {
+ BigDecimal paidAmount = getPrivateCarPrepayPaidAmount(orderPrivateCar);
+ if (paidAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ return toMoney(finalAmount).doubleValue();
+ }
+ BigDecimal displayAmount = toMoney(finalAmount).subtract(paidAmount).setScale(2, RoundingMode.HALF_UP);
+ return displayAmount.compareTo(BigDecimal.ZERO) > 0 ? displayAmount.doubleValue() : 0D;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return toMoney(finalAmount).doubleValue();
+ }
+ }
+
+ private void fillPrivateCarPrepayDisplayMoney(OrderPrivateCar orderPrivateCar, Map<String, Object> map) {
+ if (map == null || orderPrivateCar == null || !isPrivateCarPrepayFinalStage(orderPrivateCar)) {
+ return;
+ }
+ Double finalAmount = null != map.get("orderMoney") ? Double.valueOf(String.valueOf(map.get("orderMoney"))) : orderPrivateCar.getOrderMoney();
+ Double displayAmount = getPrivateCarPrepayDisplayPayAmount(orderPrivateCar, finalAmount);
+ map.put("orderMoney", displayAmount);
+ map.put("payMoney", displayAmount);
+ }
+
private ResultUtil settlePrivateCarPrepayIfNoSecondPay(OrderPrivateCar orderPrivateCar, UserInfo userInfo, Double finalAmount) throws Exception {
if (!isPrivateCarPrepayFinalStage(orderPrivateCar)) {
return null;
}
- BigDecimal paidAmount = toMoney(orderPrivateCar.getPayMoney());
+ BigDecimal paidAmount = getPrivateCarPrepayPaidAmount(orderPrivateCar);
+ if (paidAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ return null;
+ }
BigDecimal settleAmount = toMoney(finalAmount);
BigDecimal refundAmount = paidAmount.subtract(settleAmount).setScale(2, RoundingMode.HALF_UP);
if (refundAmount.compareTo(BigDecimal.ZERO) < 0) {
@@ -2667,7 +2709,7 @@
return ResultUtil.success();
}
- PaymentRecord paymentRecord = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, orderPrivateCar.getId(), 1, orderPrivateCar.getPayType(), 2);
+ PaymentRecord paymentRecord = getPrivateCarPrepayPaidRecord(orderPrivateCar);
if (paymentRecord == null) {
return ResultUtil.error("先付订单缺少已支付流水,无法退款");
}
@@ -2836,9 +2878,100 @@
return orderPrivateCar != null && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode());
}
+ private void handlePrivateCarPrepayCancelRefund(OrderPrivateCar orderPrivateCar, String reason) throws Exception {
+ if (!isPrivateCarPrepayMode(orderPrivateCar)) {
+ return;
+ }
+ if (Integer.valueOf(3).equals(orderPrivateCar.getPayType())) {
+ Double refundAmount = orderPrivateCar.getPayMoney();
+ if (refundAmount == null || refundAmount <= 0) {
+ throw new RuntimeException("余额先付订单退款金额异常");
+ }
+ UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+ if (userInfo == null) {
+ throw new RuntimeException("用户信息不存在,无法退款");
+ }
+ userInfo.setBalance(new BigDecimal(null != userInfo.getBalance() ? userInfo.getBalance() : 0)
+ .add(new BigDecimal(refundAmount)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ userInfoService.updateById(userInfo);
+ restorePrivateCarBenefits(orderPrivateCar);
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
+ orderPrivateCar.setState(10);
+ orderPrivateCar.setPrepayStage(5);
+ orderPrivateCar.setPrepayRefundNo("BALANCE_REFUND_1_" + orderPrivateCar.getId() + "_" + ToolUtil.getRandomString(5));
+ orderPrivateCar.setPrepayRefundAmount(refundAmount);
+ orderPrivateCar.setPrepayRefundTime(new Date());
+ this.updateById(orderPrivateCar);
+ systemNoticeService.addSystemNotice(1, "您的快车余额先付订单已取消,退款已退回账户余额,请注意查收。", orderPrivateCar.getUserId(), 1);
+ } else if (Integer.valueOf(1).equals(orderPrivateCar.getPayType())){
+ String outRequestNo = orderPrivateCar.getPrepaySecondPayNo();
+ if (ToolUtil.isEmpty(outRequestNo)) {
+ throw new RuntimeException("微信先付订单缺少支付单号,无法关闭支付单");
+ }
+ Double refundAmount = orderPrivateCar.getPayMoney();
+ if (refundAmount == null || refundAmount <= 0) {
+ throw new RuntimeException("微信先付订单退款金额异常");
+ }
+ CbyzxPayUtil.ClosePayOrderRequest request = new CbyzxPayUtil.ClosePayOrderRequest();
+ request.setOutRequestNo(outRequestNo);
+ request.setRefundOutRequestNo(buildPrepayRefundOutNo(orderPrivateCar.getId()));
+ request.setRefundAmount(toFen(refundAmount));
+ request.setRefundDesc(ToolUtil.isNotEmpty(reason) ? reason : "快车订单取消退款");
+ JSONObject response = CbyzxPayUtil.closePayOrder(request);
+ if (!isPrivateCarPrepayRefundSuccess(response)) {
+ throw new RuntimeException(extractPrivateCarRefundMessage(response));
+ }
+ restorePrivateCarBenefits(orderPrivateCar);
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
+ systemNoticeService.addSystemNotice(1, "您的快车微信先付订单已取消,退款已原路退回,请注意查收。", orderPrivateCar.getUserId(), 1);
+ }
+ }
+
private ResultUtil handlePrivateCarPrepayCancelRefund(OrderPrivateCar orderPrivateCar, String reason, String remark, Integer uid) throws Exception {
+ System.out.println("快车退款!!!!");
if (!isPrivateCarPrepayMode(orderPrivateCar)) {
return null;
+ }
+ if (Integer.valueOf(3).equals(orderPrivateCar.getPayType())) {
+ Double refundAmount = orderPrivateCar.getPayMoney();
+ System.out.println("快车余额退款金额!!!!"+ refundAmount);
+ if (refundAmount == null || refundAmount <= 0) {
+ return ResultUtil.error("余额先付订单退款金额异常");
+ }
+ UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+ if (userInfo == null) {
+ return ResultUtil.error("用户信息不存在,无法退款");
+ }
+ userInfo.setBalance(new BigDecimal(null != userInfo.getBalance() ? userInfo.getBalance() : 0)
+ .add(new BigDecimal(refundAmount)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ userInfoService.updateById(userInfo);
+ restorePrivateCarBenefits(orderPrivateCar);
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
+ orderCancelService.saveData(orderPrivateCar.getId(), 1,
+ ToolUtil.isNotEmpty(reason) ? reason : "无司机接单",
+ ToolUtil.isNotEmpty(remark) ? remark : (ToolUtil.isNotEmpty(reason) ? reason : "无司机接单"),
+ 1, refundAmount, 2, 1, uid);
+ orderPrivateCar.setState(10);
+ orderPrivateCar.setPrepayStage(5);
+ orderPrivateCar.setPrepayRefundNo("BALANCE_REFUND_1_" + orderPrivateCar.getId() + "_" + ToolUtil.getRandomString(5));
+ orderPrivateCar.setPrepayRefundAmount(refundAmount);
+ orderPrivateCar.setPrepayRefundTime(new Date());
+ this.updateById(orderPrivateCar);
+ if (orderPrivateCar.getDriverId() != null) {
+ this.deleteTask(orderPrivateCar.getId());
+ pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+ Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+ if (driver != null) {
+ driver.setState(2);
+ driverService.updateById(driver);
+ }
+ if (orderPrivateCar.getBindId() != null) {
+ chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 600000));
+ }
+ }
+ System.out.println("余额退款通知940");
+ systemNoticeService.addSystemNotice(1, "您的快车余额先付订单已取消,退款已退回账户余额,请注意查收。", orderPrivateCar.getUserId(), 1);
+ return ResultUtil.success();
}
String outRequestNo = orderPrivateCar.getPrepaySecondPayNo();
if (ToolUtil.isEmpty(outRequestNo)) {
@@ -2921,6 +3054,7 @@
private void handlePrivateCarPrepayFirstPaid(OrderPrivateCar orderPrivateCar, UserInfo userInfo, Double payAmount, Integer payType) throws Exception {
OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
+ System.out.println("快车预付回调-------057,"+query1);
if (null != query1) {
userInfo.setIntegral(userInfo.getIntegral() + (payAmount.intValue() * query1.getIntegral()));
}
@@ -2948,12 +3082,13 @@
if (query == null) {
query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1);
}
+ System.out.println("快车预付回调-------084,"+query);
if (null != query && query.getState() == 1) {
UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
query.setState(2);
query.setCode(order_id);
paymentRecordService.updateById(query);
-
+ System.out.println("快车预付回调-------090");
if (isPrivateCarPrepayFirstStage(orderPrivateCar)) {
orderPrivateCar.setPrepaySecondPayNo(outTradeNo);
handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, query.getAmount(), type);
@@ -3225,6 +3360,7 @@
vo.setDriverInfoWarpper(driverInfoWarpper);
//其余信息
BeanUtils.copyProperties(order, vo);
+ vo.setPayMoney(getPrivateCarPrepayDisplayPayAmount(order, order.getOrderMoney()));
unPayOrderVOList.add(vo);
}
@@ -3441,12 +3577,13 @@
}else {
// 没找到车辆
+ Thread.sleep(5000);
ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar, "无司机接单", "无司机接单", orderPrivateCar.getUserId());
if (refundResult == null) {
orderPrivateCar.setState(10);
orderPrivateCarMapper.updateById(orderPrivateCar);
}
- pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
+ pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 10);
}
--
Gitblit v1.7.1