From 0867ea81d6b97e5f7d71dc0318e3fd84b64bdb54 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 15 四月 2026 22:33:31 +0800
Subject: [PATCH] 支付对接
---
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 201 ++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 187 insertions(+), 14 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 0b0c1ea..41a2481 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
@@ -310,7 +310,9 @@
if (orderSource != 2) { // 扫码下单跳过先付判断(扫码下单已有固定司机)
TSysPaymentMode paymentMode = tSysPaymentModeService.selectOne(
new EntityWrapper<TSysPaymentMode>().last("LIMIT 1"));
- baseWarpper.setPaymentMode(paymentMode.getPrivateType());
+ if (paymentMode != null && paymentMode.getPrivateType() != null) {
+ baseWarpper.setPaymentMode(paymentMode.getPrivateType());
+ }
if (paymentMode != null && Integer.valueOf(1).equals(paymentMode.getPrivateType())) {
// 先付模式:计算预估金额,订单状态改为7(待支付)
Company payCompany = companyCityService.query(geocode.get("districtCode"));
@@ -1131,6 +1133,17 @@
if (orderPrivateCar.getState() >= 5 && orderPrivateCar.getState() != 11) {
return ResultUtil.error("订单已取消,请刷新页面");
}
+ if (!Integer.valueOf(2).equals(orderPrivateCar.getType())) {
+ 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);
+ }
+ }
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));
if (number1 + number2 == 1) {
@@ -1257,9 +1270,14 @@
if (payType == 1) {//微信支付
orderCancel.setPayType(1);
orderCancelService.updateById(orderCancel);
- String app = type == 1 ? "APP" : "JSAPI";
- resultUtil = payMoneyUtil.weixinpay("订单取消", "", id + "_1_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/wxCancelOrderTaxi", app, userInfo.getAppletsOpenId());
- paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 1, query.getMoney(), "", 1);//添加预支付数据
+ String outTradeNo = "CANCEL_" + id + "_1_" + UUIDUtil.getRandomCode(5);
+ JSONObject response = cbyzxOrderPayHelper.createOrder(orderPrivateCar.getUserId(), userInfo.getAppletsOpenId(), outTradeNo, query.getMoney());
+ if (!cbyzxOrderPayHelper.isCreateSuccess(response)) {
+ return ResultUtil.error(cbyzxOrderPayHelper.extractMessage(response), response);
+ }
+ String paymentCode = ToolUtil.isNotEmpty(cbyzxOrderPayHelper.extractRecordCode(response)) ? cbyzxOrderPayHelper.extractRecordCode(response) : outTradeNo;
+ resultUtil = ResultUtil.success(response);
+ paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 1, query.getMoney(), paymentCode, 1);//添加预支付数据
}
if (payType == 2) {//支付宝支付
orderCancel.setPayType(2);
@@ -2599,6 +2617,140 @@
}
}
+ private void restorePrivateCarBenefits(OrderPrivateCar orderPrivateCar) throws Exception {
+ if (null != orderPrivateCar.getCouponId()) {
+ UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId());
+ if (userCouponRecord != null) {
+ userCouponRecord.setState(1);
+ userCouponRecord.setEndTime(null);
+ userCouponRecordService.updateById(userCouponRecord);
+ }
+ }
+ if (null != orderPrivateCar.getUserTaxiCardId()) {
+ UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId());
+ if (userTaxiCard != null && (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3)) {
+ JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent());
+ Integer time = jsonObject.getInteger("time");
+ jsonObject.put("time", (time == null ? 0 : time) + 1);
+ userTaxiCard.setContent(jsonObject.toJSONString());
+ userTaxiCardService.updateById(userTaxiCard);
+ }
+ }
+ if (null != orderPrivateCar.getRedPacketId()) {
+ UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId());
+ if (userRedPacketRecord != null) {
+ userRedPacketRecord.setState(1);
+ userRedPacketRecord.setEndTime(null);
+ userRedPacketRecordService.updateById(userRedPacketRecord);
+ }
+ }
+ }
+
+ private boolean isPrivateCarPrepayRefundSuccess(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 extractPrivateCarRefundNo(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 extractPrivateCarRefundMessage(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 Integer toFen(Double amount) {
+ return new BigDecimal(String.valueOf(amount)).multiply(new BigDecimal("100")).setScale(0, RoundingMode.HALF_UP).intValue();
+ }
+
+ private String buildPrepayRefundOutNo(Integer orderId) {
+ return "PREPAY_REFUND_1_" + orderId;
+ }
+
+ private boolean isPrivateCarPrepayMode(OrderPrivateCar orderPrivateCar) {
+ return orderPrivateCar != null && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode());
+ }
+
+ private ResultUtil handlePrivateCarPrepayCancelRefund(OrderPrivateCar orderPrivateCar, String reason, String remark, Integer uid) throws Exception {
+ if (!isPrivateCarPrepayMode(orderPrivateCar)) {
+ return null;
+ }
+ String outRequestNo = orderPrivateCar.getPrepaySecondPayNo();
+ if (ToolUtil.isEmpty(outRequestNo)) {
+ return ResultUtil.error("微信先付订单缺少支付单号,无法关闭支付单");
+ }
+ Double refundAmount = orderPrivateCar.getPayMoney();
+ if (refundAmount == null || refundAmount <= 0) {
+ return ResultUtil.error("微信先付订单退款金额异常");
+ }
+ 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)) {
+ return ResultUtil.error(extractPrivateCarRefundMessage(response), response);
+ }
+
+ 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(extractPrivateCarRefundNo(response));
+ 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() + 86400000));
+ }
+ }
+ systemNoticeService.addSystemNotice(1, "您的快车微信先付订单已取消,退款已原路退回,请注意查收。", orderPrivateCar.getUserId(), 1);
+ return ResultUtil.success(response);
+ }
+
private void dispatchPrepayPrivateCarOrder(OrderPrivateCar orderPrivateCar) throws Exception {
if (Integer.valueOf(3).equals(orderPrivateCar.getType()) && ToolUtil.isNotEmpty(orderPrivateCar.getServerCarModel())) {
JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getServerCarModel());
@@ -2668,6 +2820,7 @@
paymentRecordService.updateById(query);
if (isPrivateCarPrepayFirstStage(orderPrivateCar)) {
+ orderPrivateCar.setPrepaySecondPayNo(outTradeNo);
handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, query.getAmount(), type);
return;
}
@@ -2822,9 +2975,14 @@
OrderPrivateCar orderPrivateCar = this.selectById(orderId);
ResultUtil resultUtil = ResultUtil.success();
if (payType == 1) {//微信支付
- String app = type == 1 ? "APP" : "JSAPI";
- resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId());
- paymentRecordService.saveData(3, uid, 1, orderId, 1, 1, money, "", 1);//添加预支付数据
+ String outTradeNo = "THANK_" + orderId + "_1_" + UUIDUtil.getRandomCode(5);
+ JSONObject response = cbyzxOrderPayHelper.createOrder(orderPrivateCar.getUserId(), userInfo.getAppletsOpenId(), outTradeNo, money);
+ if (!cbyzxOrderPayHelper.isCreateSuccess(response)) {
+ return ResultUtil.error(cbyzxOrderPayHelper.extractMessage(response), response);
+ }
+ String paymentCode = ToolUtil.isNotEmpty(cbyzxOrderPayHelper.extractRecordCode(response)) ? cbyzxOrderPayHelper.extractRecordCode(response) : outTradeNo;
+ resultUtil = ResultUtil.success(response);
+ paymentRecordService.saveData(3, uid, 1, orderId, 1, 1, money, paymentCode, 1);//添加预支付数据
}
if (payType == 2) {//支付宝支付
resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee");
@@ -3005,8 +3163,11 @@
break;
}
if (num == 18) {
- orderPrivateCar1.setState(10);
- orderPrivateCarMapper.updateById(orderPrivateCar1);
+ ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar1, "无司机接单", "无司机接单", orderPrivateCar1.getUserId());
+ if (refundResult == null) {
+ orderPrivateCar1.setState(10);
+ orderPrivateCarMapper.updateById(orderPrivateCar1);
+ }
pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
orderIds.remove(orderPrivateCar.getId());
}
@@ -3036,6 +3197,7 @@
@Override
public void run() {
try {
+ System.out.println("推单推单推单!!");
Integer id = orderPrivateCar.getId();
Integer orderType = orderPrivateCar.getRideType() == 1 ? 1 : orderPrivateCar.getRideType() == 2 ? 9 : 8;
orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单
@@ -3049,8 +3211,9 @@
// 判断是否为派单模式
TSysPushType sysPushType = tSysPushTypeService.selectOne(new EntityWrapper<TSysPushType>().eq("openCityId", openCity.getId()));
if(sysPushType!=null && sysPushType.getPushType()==2){
+ System.out.println( "派单模式");
OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
- if (null == orderPrivateCar && orderPrivateCar.getState() == 1) {
+ if (null != orderPrivateCar && orderPrivateCar.getState() == 1) {
// 固定5公里进行派单
List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), 5.0, null);//所有附近空闲司机
if (list.size() > 0) {
@@ -3143,17 +3306,19 @@
}else {
// 没找到车辆
- orderPrivateCar.setState(10);
- orderPrivateCarMapper.updateById(orderPrivateCar);
+ ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar, "无司机接单", "无司机接单", orderPrivateCar.getUserId());
+ if (refundResult == null) {
+ orderPrivateCar.setState(10);
+ orderPrivateCarMapper.updateById(orderPrivateCar);
+ }
pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
-
- // TODO 退款
}
}
}else {
+ System.out.println( "推单模式");
List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
for (int i = 1; i <= querys.size() + 15; i++) {
@@ -3174,6 +3339,7 @@
}
//获取空闲司机
List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
+ System.out.println(list.toString()+"XXXXXXXX");
if (list.size() > 0) {
double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
@@ -3202,6 +3368,13 @@
if (i == querys.size() + 15 && state == 1) {
pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
orderIds.remove(orderPrivateCar.getId());
+
+ // 没找到车辆
+ ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar, "无司机接单", "无司机接单", orderPrivateCar.getUserId());
+ if (refundResult == null) {
+ orderPrivateCar.setState(10);
+ orderPrivateCarMapper.updateById(orderPrivateCar);
+ }
}
}
}
--
Gitblit v1.7.1