From af1bdf94021985a93f7e95854915653b6a2e9580 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 20 四月 2026 11:50:10 +0800
Subject: [PATCH] update

---
 DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java         |    9 +++
 DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java   |   97 ++++++++++++++++++++------------
 DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/OrderCrossCityOnBehalfWarpper.java |    5 +
 DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/CallbackController.java                          |    9 +++
 DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java                             |    4 
 DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPaymentRecordService.java            |    2 
 DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java |   51 +++++++++++++++++
 7 files changed, 136 insertions(+), 41 deletions(-)

diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/CallbackController.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/CallbackController.java
index eff5bb1..95eb650 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/CallbackController.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/CallbackController.java
@@ -97,6 +97,15 @@
                 orderCrossCityService.payOrderCrossCityCallback(Integer.valueOf(split[0]), orderId, 1);
                 return buildCbyzxCallbackResponse(0, "success");
             }
+            if (outTradeNo.startsWith("onBehalf_")) {
+                String legacyOutTradeNo = outTradeNo.substring("onBehalf_".length());
+                String[] split = legacyOutTradeNo.split("_");
+                if (split.length < 2) {
+                    return buildCbyzxCallbackResponse(1, "invalid onBehalf out_trade_no");
+                }
+                orderCrossCityService.payOrderCrossCityCallback(Integer.valueOf(split[0]), orderId, 1);
+                return buildCbyzxCallbackResponse(0, "success");
+            }
             if (outTradeNo.startsWith("reassign_")) {
                 String legacyOutTradeNo = outTradeNo.substring("reassign_".length());
                 reassignService.payReassign(legacyOutTradeNo, orderId, 1);
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index a297726..33080fa 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -510,13 +510,13 @@
 
 
     @ResponseBody
-    @RequestMapping(value = "/api/lineSite/queryDriver", method = RequestMethod.POST)
+    @RequestMapping(value = "/api/lineSite/queryDriverList", method = RequestMethod.POST)
     @ApiOperation(value = "根据线路id获取其他线路排班数据", tags = {"司机端-跨城"}, notes = "")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "订单", name = "orderId", required = true, dataType = "String"),
             @ApiImplicitParam(value = "查询天(2020-09-03)", name = "day", required = true, dataType = "string")
     })
-    public ResultUtil<List<LineSiteWarpper>> queryDriver(String orderId){
+    public ResultUtil<List<LineSiteWarpper>> queryDriverList(String orderId){
         try {
             List<Map<String, Object>> list = reassignService.queryDriver(orderId);
             return ResultUtil.success(LineSiteWarpper.getLineSiteWarppers(list));
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java
index df082c6..4846a04 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java
@@ -84,7 +84,6 @@
     private String adminUrl;
 
 
-
     /**
      * 获取服务中页面订单详情
      * @param orderId
@@ -97,11 +96,11 @@
             @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil<OrderWarpper> queryOrderInfo(Integer orderId){
+    public ResultUtil<OrderWarpper> queryOrderInfo(Integer orderId) {
         try {
             Map<String, Object> map = orderCrossCityService.queryOrderInfo(orderId);
             return ResultUtil.success(OrderWarpper.getOrderWarpper(map));
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return ResultUtil.runErr();
         }
@@ -125,16 +124,16 @@
             @ApiImplicitParam(value = "备注", name = "remark", required = false, dataType = "string"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil reassignOrderCrossCityReassign(Reassign reassign, String orderIds, HttpServletRequest request){
+    public ResultUtil reassignOrderCrossCityReassign(Reassign reassign, String orderIds, HttpServletRequest request) {
         try {
             Integer uid = driverService.getUserIdFormRedis(request);
-            if(null == uid){
+            if (null == uid) {
                 return ResultUtil.tokenErr();
             }
             return reassignService.saveData_(reassign, orderIds, uid, null);
-        }catch (SystemException s){
+        } catch (SystemException s) {
             return ResultUtil.error(s.getMsg());
-        } catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return ResultUtil.runErr();
         }
@@ -153,11 +152,11 @@
             @ApiImplicitParam(value = "跨城订单id", name = "orderId", required = true, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil<OrderCrossCityInfoWrapper> queryOrderCrossCityInfo(Integer orderId){
+    public ResultUtil<OrderCrossCityInfoWrapper> queryOrderCrossCityInfo(Integer orderId) {
         try {
             Map<String, Object> map = orderCrossCityService.queryOrderCrossCityInfo(orderId);
             return ResultUtil.success(OrderCrossCityInfoWrapper.getOrderInfoWarpper(map));
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return ResultUtil.runErr();
         }
@@ -175,11 +174,11 @@
             @ApiImplicitParam(value = "跨城订单id", name = "orderId", required = true, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil setOrderCrossCitySort(Integer orderId){
+    public ResultUtil setOrderCrossCitySort(Integer orderId) {
         try {
             orderCrossCityService.setOrderCrossCitySort(orderId);
             return ResultUtil.success();
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return ResultUtil.runErr();
         }
@@ -198,21 +197,20 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil<BaseWarpper> orderCrossCity(OrderCrossCityWarpper orderCrossCityWarpper, HttpServletRequest request){
+    public ResultUtil<BaseWarpper> orderCrossCity(OrderCrossCityWarpper orderCrossCityWarpper, HttpServletRequest request) {
         try {
             Integer uid = driverService.getUserIdFormRedis(request);
-            if(null == uid){
+            if (null == uid) {
                 return ResultUtil.tokenErr();
             }
             return orderCrossCityService.orderCrossCity(orderCrossCityWarpper, uid);
-        }catch (SystemException se){
+        } catch (SystemException se) {
             return ResultUtil.error(se.getMessage());
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return ResultUtil.runErr();
         }
     }
-
 
 
     /**
@@ -222,7 +220,7 @@
      */
     @ResponseBody
     @PostMapping("/base/order/generatePay")
-    public void generatePay(HttpServletRequest request, HttpServletResponse response){
+    public void generatePay(HttpServletRequest request, HttpServletResponse response) {
         try {
 //            Map<String, String> map = icbcPayUtil.generatePayCallback(request);
 //            if(null != map){
@@ -247,11 +245,10 @@
 //                    }
 //                }
 //            }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
     }
-
 
 
     /**
@@ -272,23 +269,22 @@
             @ApiImplicitParam(value = "支付端(1=用户APP端,2=司机APP端,3=用户小程序端)", name = "type", required = true, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil payTaxiOrder(Integer payType, Integer orderId, Integer orderType, Integer couponId, Integer type, HttpServletRequest request){
+    public ResultUtil payTaxiOrder(Integer payType, Integer orderId, Integer orderType, Integer couponId, Integer type, HttpServletRequest request) {
         try {
             Integer uid = driverService.getUserIdFormRedis(request);
-            if(null == uid){
+            if (null == uid) {
                 return ResultUtil.tokenErr();
             }
-            switch (orderType){
+            switch (orderType) {
                 case 3:
                     return orderCrossCityService.payCrossCityOrder(payType, orderId, couponId, type);
             }
             return ResultUtil.success(new Object());
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return ResultUtil.runErr();
         }
     }
-
 
 
     /**
@@ -297,16 +293,16 @@
      */
     @ResponseBody
     @PostMapping("/base/wxPayCrossCity")
-    public void wxPayCrossCity(HttpServletRequest request, HttpServletResponse response){
+    public void wxPayCrossCity(HttpServletRequest request, HttpServletResponse response) {
         try {
             Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
-            if(null != map){
+            if (null != map) {
                 System.err.println(JSON.toJSONString(map));
                 String out_trade_no = map.get("out_trade_no");
                 String transaction_id = map.get("transaction_id");
                 String result = map.get("result");
-                if(ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(transaction_id)){
-                    System.out.println("完成订单微信支付回调"+map);
+                if (ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(transaction_id)) {
+                    System.out.println("完成订单微信支付回调" + map);
                     PrintWriter out = response.getWriter();
                     out.write(result);
                     out.flush();
@@ -322,14 +318,14 @@
 //                        throw new RuntimeException("该订单不存在");
 //                    }
 //                    cloudPay(orderCrossCity.getDriverId(),map.get("total_fee"),map.get("transaction_id"),1);
-                    switch (type){
+                    switch (type) {
                         case 3:
                             orderCrossCityService.payOrderCrossCityCallback(id, transaction_id, 1);
                             break;
                     }
                 }
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
     }
@@ -337,25 +333,25 @@
 
     @ResponseBody
     @PostMapping("/base/aliPayCrossCity")
-    public void aliPayCrossCity(HttpServletRequest request, HttpServletResponse response){
+    public void aliPayCrossCity(HttpServletRequest request, HttpServletResponse response) {
         try {
             System.err.println("支付宝回调----->");
             Map<String, String> map = payMoneyUtil.alipayCallback(request);
             System.err.println(JSON.toJSONString(map));
-            if(null != map){
+            if (null != map) {
                 String out_trade_no = map.get("out_trade_no");
                 String trade_no = map.get("trade_no");
-                if(ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(trade_no)){
+                if (ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(trade_no)) {
                     String[] split = out_trade_no.split("_");
                     Integer id = Integer.valueOf(split[0]);
                     Integer type = Integer.valueOf(split[1]);
-                    switch (type){
+                    switch (type) {
                         case 3:
                             orderCrossCityService.payOrderCrossCityCallback(id, trade_no, 2);
                             break;
                     }
                     String uid = map.get("passback_params");
-                    System.out.println("完成订单支付宝支付回调"+map);
+                    System.out.println("完成订单支付宝支付回调" + map);
                     // TODO 司机云闪付 跨城出行支付宝回调支付充值
 //                    OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id);
 //                    if(Objects.isNull(orderCrossCity)){
@@ -369,7 +365,7 @@
                     out.close();
                 }
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
     }
@@ -430,7 +426,7 @@
             post.form("file", file);
             HttpResponse execute = post.execute();
             int status = execute.getStatus();
-            if(200 != status){
+            if (200 != status) {
                 throw new RuntimeException("上传图片异常");
             }
             // 6. 返回结果
@@ -477,4 +473,31 @@
     }
 
 
+    /**
+     * 代客下单支付
+     */
+    @ResponseBody
+    @PostMapping("/api/orderCrossCity/orderOnBehalfPay")
+    @ApiOperation(value = "【202601】代客下单支付", tags = {"司机端-服务中"}, notes = "代客下单支付")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
+            @ApiImplicitParam(value = "crossCityOrderId", name = "crossCityOrderId", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "1微信支付 2乘客 3线下", name = "type", required = true, dataType = "int")
+    })
+    public ResultUtil orderOnBehalfPay(int crossCityOrderId,int type, HttpServletRequest request) {
+        try {
+            // 1. 验证Token获取司机ID
+            Integer driverId = driverService.getUserIdFormRedis(request);
+            if (null == driverId) {
+                return ResultUtil.tokenErr();
+            }
+            return orderCrossCityService.orderOnBehalfPay(crossCityOrderId,type,driverId);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+
+    }
+
+
 }
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
index 7ffd502..824220e 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
@@ -177,4 +177,13 @@
      * @throws Exception
      */
     ResultUtil<BaseWarpper> orderCrossCityOnBehalf(OrderCrossCityOnBehalfWarpper warpper, Integer driverId) throws Exception;
+
+    /**
+     * 代客下单支付
+     * @param crossCityOrderId
+     * @param type
+     * @return
+     */
+    ResultUtil orderOnBehalfPay(int crossCityOrderId, int type,Integer driverId) throws Exception;
+
 }
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
index c55bab2..ea0559b 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -1541,4 +1541,55 @@
         baseWarpper.setId(orderCrossCity.getId());
         return ResultUtil.success(baseWarpper);
     }
+
+    @Override
+    public ResultUtil orderOnBehalfPay(int crossCityOrderId, int type, Integer driverId) throws Exception {
+        OrderCrossCity order = orderCrossCityMapper.selectById(crossCityOrderId);
+        if (order == null) {
+            return ResultUtil.error("订单不存在");
+        }
+        if (!order.getDriverId().equals(driverId)) {
+            return ResultUtil.error("您没有权限支付此订单");
+        }
+        if (order.getState() != 7) {
+            return ResultUtil.error("订单不在待支付,无法完成订单");
+        }
+        if (type == 1) {
+            UserInfo userInfo = userInfoMapper.selectById(order.getUserId());
+            if (userInfo == null) {
+                return ResultUtil.error("乘客不存在");
+            }
+            if (ToolUtil.isEmpty(userInfo.getAppletsOpenId())) {
+                return ResultUtil.errorOpenId("乘客未绑定微信小程序openid,无法发起微信支付");
+            }
+            String outTradeNo = buildCbyzxOnBehalfOutTradeNo(crossCityOrderId);
+            JSONObject response = cbyzxOrderPayHelper.createOrder(
+                    order.getUserId(),
+                    userInfo.getAppletsOpenId(),
+                    outTradeNo,
+                    order.getOrderMoney()
+            );
+            if (!cbyzxOrderPayHelper.isCreateSuccess(response)) {
+                return ResultUtil.error(cbyzxOrderPayHelper.extractMessage(response), response);
+            }
+            paymentRecordService.saveData(1, order.getDriverId(), 2, crossCityOrderId, 3, 1, order.getOrderMoney(), outTradeNo, 1);
+            return ResultUtil.success(response);
+        } else if (type == 3) {
+            order.setState(2);
+            orderCrossCityMapper.updateById(order);
+
+
+            //添加交易明细
+            transactionDetailsService.saveData(driverId, "跨城出行订单", order.getOrderMoney(), 2, 1, 2, 3, order.getId());
+            return ResultUtil.success();
+        }
+        return ResultUtil.error("支付失败");
+    }
+
+    /**
+     * 创博优代客支付单号,增加业务前缀便于统一回调路由。
+     */
+    private String buildCbyzxOnBehalfOutTradeNo(Integer orderId) throws Exception {
+        return "onBehalf_" + orderId + "_3_" + UUIDUtil.getRandomCode(5);
+    }
 }
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/OrderCrossCityOnBehalfWarpper.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/OrderCrossCityOnBehalfWarpper.java
index 1df8dd7..1757e47 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/OrderCrossCityOnBehalfWarpper.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/OrderCrossCityOnBehalfWarpper.java
@@ -49,7 +49,10 @@
     @ApiModelProperty(value = "下车点地址", required = true, dataType = "string")
     private String endAddress;
 
-    @ApiModelProperty(value = "其他费用(远程费、高速费、等待费等),>=0,保留两位小数", required = false, dataType = "BigDecimal")
+    @ApiModelProperty(value = "最终费用(2.0改 不传则接口获取 传则使用这个金额)(远程费、高速费、等待费等),>=0,保留两位小数", required = false, dataType = "BigDecimal")
     private BigDecimal otherFee;
 
+    @ApiModelProperty(value = "座位编号(1,3,4)", required = true, dataType = "string")
+    private String seatNumber;
+
 }
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPaymentRecordService.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPaymentRecordService.java
index 9882f0b..78e2aba 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPaymentRecordService.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPaymentRecordService.java
@@ -6,6 +6,7 @@
 public interface IPaymentRecordService extends IService<PaymentRecord> {
 
 
+
     /**
      * 添加数据
      * @param orderId       订单id
@@ -18,7 +19,6 @@
      */
     void saveData(Integer category, Integer userId, Integer type, Integer orderId, Integer orderType, Integer payType,
                   Double amount, String code, Integer state) throws Exception;
-
 
     /**
      * 获取数据

--
Gitblit v1.7.1