From 9641d9ebc7b32b7e2cee898c8e9250e798c97e1b Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期六, 16 八月 2025 15:17:32 +0800
Subject: [PATCH] 修改bug

---
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java                     |   19 
 UserQYTTravel/guns-admin/src/main/resources/application-dev.yml                                                                          |    2 
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java                           |    4 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java |   47 +
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java                            |    2 
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java                                            |    2 
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java                         |    6 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java            |   53 +
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java                |   53 +
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java            |    2 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java                      |   27 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java  |   39 +
 MessagePushTravel/src/main/java/com/sinata/push/config/QYTConfig.java                                                                    |   66 
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java                               |    4 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java         |   23 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml                     |    3 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java  |   43 +
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java                            |    7 
 UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java                                                       |  128 +-
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java               |   64 +
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java                  |   31 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java                     |   35 
 UserQYTTravel/guns-admin/src/main/resources/application-prod.yml                                                                         |    2 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java                                              |    2 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java                       |   31 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java            |   27 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java              |   19 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java                |   33 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java          |   99 ++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java              |   39 +
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushURL.java                                         |   10 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/OrderTaxiMapper.xml                                   |    3 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java              |   62 +
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java        |   45 +
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java                                              |    2 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java           |   57 +
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java               |   16 
 MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java                                                     |   16 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java            |   27 
 DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java                                                     |   39 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java                   |   42 +
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java                   |   31 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java        |   35 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java                                             |   12 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java                    |    2 
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java             |   42 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java                           |  682 +++++++++++++++++
 UserQYTTravel/guns-admin/src/main/resources/application-test.yml                                                                         |    2 
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml                           |   12 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java                             |    6 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/QYTConfig.java                                                    |   56 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java               |   66 +
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java                   |    2 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java                                 |    4 
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java                          |    2 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java     |   19 
 ZuulQYTTravel/src/main/java/com/sinata/zuul/ZuulApplication.java                                                                         |   28 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java                                               |    2 
 58 files changed, 1,963 insertions(+), 271 deletions(-)

diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
index 9b04857..e42e7bd 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
@@ -485,7 +485,7 @@
         orderLogistics.setStartServiceTime(date);
         orderLogistics.setBoardingTime(date);
     
-        String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + uid);
+        String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + uid);
         if(ToolUtil.isNotEmpty(value)){
             String[] split = value.split(",");
             Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(split[0], split[1]);
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index c57a41a..14e5aee 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -408,7 +408,7 @@
             if(order!=null){
                 orders.addAll(order);
             }
-            String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
+            String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
             order = this.baseMapper.queryOrderInfo(orderId,5,value.split(",")[0],value.split(",")[1]);
             if(order!=null){
                 orders.addAll(order);
@@ -423,7 +423,7 @@
             if(order!=null){
                 orders.addAll(order);
             }
-            String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
+            String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
             order = this.baseMapper.queryOrderInfo(orderPrivateCar.getPid(),5,value.split(",")[0],value.split(",")[1]);
             if(order!=null){
                 orders.addAll(order);
@@ -457,7 +457,7 @@
             orders.addAll(order);
         }
         OrderPrivateCar orderPrivateCar = this.baseMapper.selectById(orderId);
-        String value = redisUtil.getValue("dache_DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
+        String value = redisUtil.getValue("dache:DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
         order = this.baseMapper.queryOrderInfo(orderId,5,value.split(",")[0],value.split(",")[1]);
         if(order!=null){
             orders.addAll(order);
@@ -482,23 +482,23 @@
         Map<String,Object> map = orderPrivateCarMapper.queryOrderInfo2(orderId, openCity.getId());
         OrderPrivateCar orderPrivateCar = this.baseMapper.selectById(orderId);
         Integer canOperation=1;
-        if(orderPrivateCar.getState()<5){
-            if(orderPrivateCar.getPid()==null) {
-                List<Map<String, Object>> order = this.baseMapper.queryOrderInfo(orderId, 4, null, null);
-                if (order != null && order.size()>0) {
-                    if(!order.get(0).get("orderId").equals(orderId)){
-                        canOperation=0;
-                    }
-                }
-            }else {
-                List<Map<String, Object>> order = this.baseMapper.queryOrderInfo(orderPrivateCar.getPid(),4,null,null);
-                if(order!=null && order.size()>0){
-                    if(!order.get(0).get("orderId").equals(orderId)){
-                        canOperation=0;
-                    }
-                }
-            }
-        }
+//        if(orderPrivateCar.getState()<5){
+//            if(orderPrivateCar.getPid()==null) {
+//                List<Map<String, Object>> order = this.baseMapper.queryOrderInfo(orderId, 4, null, null);
+//                if (order != null && order.size()>0) {
+//                    if(!order.get(0).get("orderId").equals(orderId)){
+//                        canOperation=0;
+//                    }
+//                }
+//            }else {
+//                List<Map<String, Object>> order = this.baseMapper.queryOrderInfo(orderPrivateCar.getPid(),4,null,null);
+//                if(order!=null && order.size()>0){
+//                    if(!order.get(0).get("orderId").equals(orderId)){
+//                        canOperation=0;
+//                    }
+//                }
+//            }
+//        }
         map.put("canOperation",canOperation);
         System.out.println(map);
         String phone = map.get("phone").toString();
@@ -933,7 +933,7 @@
         }
 
         Map<String, Object> map = new HashMap<>();
-        map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?0:new BigDecimal(orderPrivateCar.getOrderMoney()).setScale(2,BigDecimal.ROUND_DOWN));//订单金额
+        map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?0:orderPrivateCar.getOrderMoney());//订单金额
         map.put("startMileage", orderPrivateCar.getStartMileage());//起步价
         map.put("startMoney", orderPrivateCar.getStartMoney());//起步价
         map.put("mileageKilometers", orderPrivateCar.getMileageKilometers());//里程费
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml
index 826a9f4..08b48b0 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml
@@ -24,8 +24,8 @@
         1 as type,
         insertTime as orderTime,
         id as orderId,
-        boardingAddress as startAddress,
-        getoffAddress as endAddress,
+        startAddress as startAddress,
+        endAddress as endAddress,
         state,
         orderMoney
         from t_order_private_car
@@ -41,8 +41,8 @@
         2 as type,
         insertTime as orderTime,
         id as orderId,
-        boardingAddress as startAddress,
-        getoffAddress as endAddress,
+        startAddress as startAddress,
+        endAddress as endAddress,
         state,
         orderMoney
         from t_order_taxi
@@ -58,8 +58,8 @@
         3 as type,
         insertTime as orderTime,
         id as orderId,
-        boardingAddress as startAddress,
-        getoffAddress as endAddress,
+        startAddress as startAddress,
+        endAddress as endAddress,
         state,
         orderMoney
         from t_order_cross_city
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
index 7082469..1fd04c3 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -156,7 +156,7 @@
         List<Driver> drivers = driverMapper.queryIdleDriver(type, companyId);
         List<Driver> list = new ArrayList<>();
         for(Driver driver : drivers){
-            String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId()));
+            String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId()));
             if(null != value){
                 Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value);
                 double d = Double.valueOf(distance1.get("WGS84")).doubleValue();
@@ -173,7 +173,7 @@
         List<Driver> drivers = driverMapper.queryIdleDriver_(type, serverCarModelId, companyId);
         List<Driver> list = new ArrayList<>();
         for(Driver driver : drivers){
-            String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId()));
+            String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId()));
             if(null != value){
                 Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value);
                 double d = Double.valueOf(distance1.get("WGS84")).doubleValue();
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java
index 473d06f..5bd49b1 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java
@@ -108,7 +108,7 @@
         }
 
         //查看是否有可接单的数据
-        String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(uid));
+        String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(uid));
         if(ToolUtil.isNotEmpty(value)){
             String[] split = value.split(",");
             List<OrderStatusWarpper> list1 = this.searchOrder(split[0], split[1], uid);
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java
index b2e3a23..2fcb7c3 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java
@@ -138,7 +138,7 @@
         OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
         Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
         Car car = carService.selectById(orderPrivateCar.getCarId());
-        String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + orderPrivateCar.getDriverId());
+        String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + orderPrivateCar.getDriverId());
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("Address", 450204);//发起地行政区划代码
         jsonObject.put("OrderId", orderPrivateCar.getOrderNum());//订单编号
@@ -170,7 +170,7 @@
     public void operateLogin(Integer driverId){
         Driver driver = driverService.selectById(driverId);
         Car car = carService.selectById(driver.getCarId());
-        String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + driverId);
+        String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + driverId);
         if(ToolUtil.isNotEmpty(value)){
             JSONObject jsonObject = new JSONObject();
             jsonObject.put("LicenseId", driver.getDriveCard());//机动车驾驶证号
@@ -201,7 +201,7 @@
     public void operateLogout(Integer driverId){
         Driver driver = driverService.selectById(driverId);
         Car car = carService.selectById(driver.getCarId());
-        String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + driverId);
+        String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + driverId);
         if(ToolUtil.isNotEmpty(value)){
             JSONObject jsonObject = new JSONObject();
             jsonObject.put("LicenseId", driver.getDriveCard());//机动车驾驶证号
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
index aa10ae4..57d2317 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
@@ -368,7 +368,7 @@
             return;
         }
         //计算预计距离和剩余时间
-        String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driverId));
+        String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driverId));
         if(null == value || "".equals(value)){
             return;
         }
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
index 6b08a1e..f3c5065 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
@@ -190,7 +190,7 @@
 		tradePayOff1Data.setNeedLoginFlag("N");
 		tradePayOff1Data.setAccessMode("APP");
 		tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> {
-			goodsInfoRequest.setId("981100006005901");
+			goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
 			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
 			
 			goodsInfoRequest.setAreaInfo("520100");
@@ -396,7 +396,7 @@
 		tradeOrderCreateData.setNeedLoginFlag("N");
 		tradeOrderCreateData.setAccessMode("APP");
 		tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> {
-			goodsInfoRequest.setId("981100006005901");
+			goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
 			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
 			goodsInfoRequest.setAreaInfo("520100");
 			goodsInfoRequest.setPayType("0");
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
index f4f774a..91be020 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -410,7 +410,7 @@
         orderTaxi.setStartServiceTime(date);
         orderTaxi.setBoardingTime(date);
     
-        String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + uid);
+        String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + uid);
         if (ToolUtil.isNotEmpty(value)) {
             String[] split = value.split(",");
             Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(split[0], split[1]);
diff --git a/DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java b/DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
index 31a3689..83ca537 100644
--- a/DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
+++ b/DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
@@ -1,47 +1,26 @@
 //package com.stylefeng.guns;
 //
-//import com.stylefeng.guns.modular.system.model.Driver;
-//import com.stylefeng.guns.modular.system.service.IDriverService;
-//import com.stylefeng.guns.modular.system.util.zhenglian.TokenUtil;
-//import com.stylefeng.guns.modular.system.util.zhenglian.model.TokenRequest;
-//import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo;
+//import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
 //import org.junit.Test;
 //import org.junit.runner.RunWith;
 //import org.springframework.beans.factory.annotation.Autowired;
 //import org.springframework.boot.test.context.SpringBootTest;
-//import org.springframework.data.mongodb.core.MongoTemplate;
 //import org.springframework.test.context.junit4.SpringRunner;
 //
 //@RunWith(SpringRunner.class)
 //@SpringBootTest
 //public class GunsApplicationTest {
 //
-//	@Autowired
-//	private MongoTemplate mongoTemplate;
-//	@Autowired
-//	private IDriverService driverService;
+//    @Autowired
+//    private IOrderPrivateCarService orderPrivateCarService;
 //
 //
 //	@Test
 //	public void test() {
-//
-//		Driver driver = driverService.selectById(14);
-//		TokenRequest tokenRequest = new TokenRequest();
-//		tokenRequest.setAppUserId(driver.getEmpId().toString());
-//		tokenRequest.setUserName(driver.getName());
-//		tokenRequest.setCertNo(driver.getIdCard());
-//		tokenRequest.setPhone(driver.getPhone());
-//		TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo();
-//		tradeTerminalInfo.setIp("127.0.0.1");
-//		tradeTerminalInfo.setTerminal("1");
-//		tradeTerminalInfo.setMac("111-111-111-111");
-//		tokenRequest.setTradeTerminalInfo(tradeTerminalInfo);
-//		tokenRequest.setType("04");
-//		try {
-//			String token = TokenUtil.getToken(tokenRequest);
-//			System.err.println(token);
-//		} catch (Exception e) {
-//			throw new RuntimeException(e);
-//		}
-//	}
+//        try {
+//            orderPrivateCarService.queryMoneyInfo(369);
+//        } catch (Exception e) {
+//            throw new RuntimeException(e);
+//        }
+//    }
 //}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/QYTConfig.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/QYTConfig.java
index 0277518..c02f51b 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/QYTConfig.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/QYTConfig.java
@@ -1,32 +1,24 @@
-//package com.stylefeng.guns.config;
-//
-//import com.stylefeng.guns.modular.system.util.PushURL;
-//import lombok.Data;
-//import org.springframework.boot.context.properties.ConfigurationProperties;
-//import org.springframework.context.annotation.Configuration;
-//
-//import javax.annotation.PostConstruct;
-//
-///**
-// * @author zhibing.pu
-// * @Date 2025/8/12 13:58
-// */
-//@Data
-//@Configuration
-//@ConfigurationProperties(prefix = "qyt")
-//public class QYTConfig {
-//	/**
-//	 * 出行网关接口地址
-//	 */
-//	private String chuxingUrl;
-//	/**
-//	 * 代驾网关接口地址
-//	 */
-//	private String daijiaUrl;
-//
-//
-//	@PostConstruct
-//	public void init() {
-//		PushURL.setQytConfig(this);
-//	}
-//}
+package com.stylefeng.guns.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/8/12 13:58
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "qyt")
+public class QYTConfig {
+	/**
+	 * 出行网关接口地址
+	 */
+	private String chuxingUrl;
+	/**
+	 * 代驾网关接口地址
+	 */
+	private String daijiaUrl;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java
index 6902066..2337210 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java
@@ -399,7 +399,7 @@
         System.out.println(tDrivers.toString());
         for (TDriver tDriver : tDrivers) {
             Map<String, Object> d = new HashMap<>();
-            String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + tDriver.getId());
+            String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + tDriver.getId());
             System.out.println(value);
             if (ToolUtil.isEmpty(value)) {
                 continue;
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushURL.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushURL.java
index c40bfb4..a1c072b 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushURL.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushURL.java
@@ -1,11 +1,11 @@
 package com.stylefeng.guns.modular.system.util;
 
-//import com.stylefeng.guns.config.QYTConfig;
+import com.stylefeng.guns.config.QYTConfig;
 
 public class PushURL {
 
-//    public static QYTConfig qytConfig;
-    public static String zull_user_url = "http://10.31.182.11:8010/chuxing";
+    public static QYTConfig qytConfig = SpringContextsUtil.getBean(QYTConfig.class);
+    public static String zull_user_url = qytConfig.getChuxingUrl();
     public static String order_push_url = zull_user_url + "/driver-server/base/order/pushOrderState";
     public static String driver_auth_url = zull_user_url + "/driver-server/base/driver/sendsms";
     public static String withdraw_auth_url = zull_user_url + "/driver-server/base/withdrawal/withdrawalAudit";
@@ -16,8 +16,4 @@
     public static String ministry_of_transport_data = "http://120.77.11.218:8868/ministryOfTransport";
     public static String ministry_of_transport_ftp = "http://120.77.11.218:8868/ftp";
 
-
-//    public static void setQytConfig(QYTConfig qytConfig) {
-//        PushURL.qytConfig = qytConfig;
-//    }
 }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
new file mode 100644
index 0000000..f3c5065
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
@@ -0,0 +1,682 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.open.common.util.OpenApiClient;
+import com.open.common.util.SystemParameterNames;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.UUIDUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 9:34
+ */
+@Slf4j
+public class OrderUtil {
+	
+	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
+	
+	
+	public static void main(String[] args) {
+		//创建行程
+//		CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
+//		request.setScene("TRAFFIC");
+//		request.setPartnerId("522700");
+//		request.setOrderNo("3456789012345678");
+//		request.setCustomerId("11448156");
+//		request.setDriverId("11448158");
+//		request.setSupplierShopId("981100006005951");
+//		request.setServiceType(1);
+//		String travelItinerary = createTravelItinerary(request);
+//		System.err.println(travelItinerary);//1951088602595872768
+		
+		//修改行程状态
+//		ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+//		request.setScene("TRAFFIC");
+//		request.setPartnerId("522700");
+//		request.setOrderId("1951088602595872768");
+//		request.setStatus(7);
+//		request.setDriverId("11448158");
+//		request.setSupplierShopId("981100006005951");
+//		Boolean aBoolean = modifyTravelItinerary(request);
+		
+		//订单创建及拉起支付
+//		TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData();
+//		tradeOrderCreateData.setScene("TRAFFIC");
+//		tradeOrderCreateData.setPartnerId("522700");
+//		tradeOrderCreateData.setTreatShopId("11448158");
+//		tradeOrderCreateData.setOrderAppId("52270015");
+//		tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isPromote\":\"0\"}");
+//		tradeOrderCreateData.setCharge(new BigDecimal("0.01"));
+//		tradeOrderCreateData.setChannelSource("GRJYCXWXXCX");
+//		tradeOrderCreateData.setOrderId("1951088602595872768");
+//		tradeOrderCreateData.setOrderNo("3456789012345678");
+//		tradeOrderCreateData.setCustomerId("11448156");
+//		tradeOrderCreateData.setPayPartnerId("5400004");
+//		tradeOrderCreateData.setPartnerPayId("1951088602595872768");
+//		tradeOrderCreateData.setCurrency("RMB");
+//		tradeOrderCreateData.setTotalFee("1");
+//		tradeOrderCreateData.setRetUrl("pages/advoad-city-search/advoad-message/electronic-wait-pay/electronic-wait-pay");
+//		tradeOrderCreateData.setClientIp("127.0.0.1");
+//		tradeOrderCreateData.setNeedLoginFlag("N");
+//		tradeOrderCreateData.setOrderDesc("出行订单支付");
+//		tradeOrderCreateData.setAccessMode("APP");
+//
+//		List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+//		GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+//		goodsInfoRequest.setId("981100006005901");
+//		goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+//		goodsInfoRequest.setSubOpenId("oVLur61wBKJEO7QPR1dsmzS5TSfs");
+//		goodsInfoRequest.setProfitSharing("1");
+//		goodsInfoRequest.setAreaInfo("520100");
+//		goodsInfoRequest.setPayType("0");
+//		goodsInfoRequest.setBusinessType("10408");
+//		goodsInfo.add(goodsInfoRequest);
+//		tradeOrderCreateData.setGoodsInfo(goodsInfo);
+//		TradeOrderCreate tradeOrderCreate = tradeOrderCreate1(tradeOrderCreateData);
+//		System.err.println(tradeOrderCreate);
+		//TradeOrderCreate(orderInfo=OrderInfo(orderId=1950072223939842048, status=null), payInfo=PayInfo(retCode=000000, retMsg=success, success=true, data=PayInfoData(redirectUrl=https://qhsctest.qytzt.cn/gray/mobile/index.html?f=allCashDesk&accessToken=It5FPM1DUjzwIAin7zwiHvUANWKC6I5USCLE8EKoRkg%3D, payId=540000420250729000135600, status=null, payTime=null, payFee=null, paymentInfos=null), sign=525cb843b1eeb5a0451eeb5fbbe02f0f))
+		
+		//查询支付单信息
+//		GetPaymentInfoDataRequest getPaymentInfoDataRequest = new GetPaymentInfoDataRequest();
+//		getPaymentInfoDataRequest.setPartnerId("5400004");
+//		getPaymentInfoDataRequest.setPartnerPayId("1948685426689200128");
+//		GetPaymentInfo getPaymentInfo = paymentInfo(getPaymentInfoDataRequest);
+//		System.err.println(getPaymentInfo);
+		
+		//拉起支付
+//		TradePayOff1Data tradePayOff1Data = new TradePayOff1Data();
+//		tradePayOff1Data.setPartnerId("5400004");
+//		tradePayOff1Data.setScene("TRAFFIC");
+//		tradePayOff1Data.setPartnerPayId("1951088602595872768");
+//		tradePayOff1Data.setCurrency("RMB");
+//		tradePayOff1Data.setTotalFee("1");
+//		tradePayOff1Data.setRetUrl("pages/advoad-city-search/advoad-message/electronic-wait-pay/electronic-wait-pay");
+//		tradePayOff1Data.setClientIp("127.0.0.1");
+//		tradePayOff1Data.setNeedLoginFlag("N");
+//		tradePayOff1Data.setOrderDesc("出行订单支付");
+//		tradePayOff1Data.setAccessMode("APP");
+//		List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+//		GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+//		goodsInfoRequest.setId("981100006005901");
+//		goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+//		goodsInfoRequest.setSubOpenId("oVLur61wBKJEO7QPR1dsmzS5TSfs");
+//		goodsInfoRequest.setProfitSharing("1");
+//		goodsInfoRequest.setAreaInfo("520100");
+//		goodsInfoRequest.setPayType("0");
+//		goodsInfoRequest.setBusinessType("10408");
+//		goodsInfo.add(goodsInfoRequest);
+//		tradePayOff1Data.setGoodsInfo(goodsInfo);
+//		PayInfo payInfo = tradePayOff1(tradePayOff1Data);
+//		System.err.println(payInfo);
+		//PayInfo(retCode=000000, retMsg=success, success=true, data=PayInfoData(redirectUrl=https://qhsctest.qytzt.cn/gray/mobile/index.html?f=allCashDesk&accessToken=5nUBXayFpfZz%2FXUZiMu9LzeRXmqmlqaCS%2BHfu5udIt4%3D, payId=540000420250725000135549, status=null, payTime=null, payFee=null, paymentInfos=null), sign=8154ba2728280900b122c56352c1c7fe)
+		
+		
+		// (补偿单)拉起支付
+//		TradePayOffData tradePayOffData = new TradePayOffData();
+//		tradePayOffData.setPartnerId("5400004");
+//		tradePayOffData.setScene("TRAFFIC");
+//		tradePayOffData.setPartnerPayId("1948685426689200128");
+//		tradePayOffData.setCurrency("RMB");
+//		tradePayOffData.setTotalFee("1");
+//		tradePayOffData.setRetUrl("/home/");
+//		tradePayOffData.setClientIp("127.0.0.1");
+//		tradePayOffData.setNeedLoginFlag("N");
+//		tradePayOffData.setOrderDesc("出行订单支付");
+//		tradePayOffData.setAccessMode("APP");
+//		List<PaymentInfoRequest> paymentInfoRequests = new ArrayList<>();
+//		PaymentInfoRequest paymentInfoRequest = new PaymentInfoRequest();
+//		paymentInfoRequest.setPayModeId("501212");
+//		paymentInfoRequests.add(paymentInfoRequest);
+//		tradePayOffData.setPaymentInfos(paymentInfoRequests);
+//		List<GoodsInfo> goodsInfo = new ArrayList<>();
+//		GoodsInfo goodsInfo1 = new GoodsInfo();
+//		goodsInfo1.setMerchantCode("");
+//		goodsInfo1.setCustId("");
+//		goodsInfo1.setCustName("");
+//		goodsInfo1.setProfitSharing("1");
+//		goodsInfo.add(goodsInfo1);
+//		tradePayOffData.setGoodsInfo(goodsInfo);
+//		PayInfo payInfo1 = tradePayOff(tradePayOffData);
+//		System.err.println(payInfo1);
+		
+		//订单创建
+//		CreateOrderRequest createOrderRequest = new CreateOrderRequest();
+//		createOrderRequest.setTreatShopId("11448158");
+//		createOrderRequest.setOrderAppId("52270015");
+//		createOrderRequest.setScene("TRAFFIC");
+//		createOrderRequest.setPartnerId("522700");
+//		createOrderRequest.setField1("{\"profitSharing\":\"1\",\"isPromote\":\"0\"}");
+//		createOrderRequest.setCharge(new BigDecimal("0.01"));
+//		createOrderRequest.setChannelSource("GRJYCXWXXCX");
+//		createOrderRequest.setOrderId("1948685426689200128");
+//		createOrderRequest.setOrderNo("0123456");
+//		createOrderRequest.setCustomerId("11448156");
+//		OrderInfo orderInfo = tradeOrderCreate(createOrderRequest);
+//		System.err.println(orderInfo);
+		
+		//行程单列表查询
+//		GetTravelItineraryListRequest request = new GetTravelItineraryListRequest();
+//		request.setScene("TRAFFIC");
+//		request.setPartnerId("522700");
+//		request.setCustomerId("11448156");
+//		request.setOrderNo("0123456");
+//		request.setDriverId("11448158");
+//		ListPage<TravelItinerary> travelItineraryList = getTravelItineraryList(request);
+//		System.err.println(travelItineraryList);
+	
+	}
+	
+	/**
+	 * 拉起支付
+	 *
+	 * @param tradePayOff1Data
+	 * @return
+	 */
+	public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data) {
+		tradePayOff1Data.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+		tradePayOff1Data.setTimeout("72H");
+		tradePayOff1Data.setScene("TRAFFIC");
+		tradePayOff1Data.setCurrency("RMB");
+		tradePayOff1Data.setNeedLoginFlag("N");
+		tradePayOff1Data.setAccessMode("APP");
+		tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> {
+			goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
+			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+			
+			goodsInfoRequest.setAreaInfo("520100");
+			goodsInfoRequest.setPayType("0");
+			goodsInfoRequest.setBusinessType("10408");
+		});
+		
+		
+		TradeRequest request = new TradeRequest<TradePayOff1Data>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954795404533583872" : "1911676727023968256");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion(1);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(tradePayOff1Data);
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【拉起支付】请求地址:" + url);
+		log.info("【拉起支付】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【拉起支付】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【拉起支付】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【拉起支付】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+		PayInfo payInfo = busiResp.getObject("payInfo", PayInfo.class);
+		return payInfo;
+	}
+	
+	/**
+	 * 创建行程单
+	 *
+	 * @param request
+	 * @return 行程单ID
+	 */
+	public static String createTravelItinerary(CreateTravelItineraryRequest request) {
+		request.setScene("TRAFFIC");
+		request.setPartnerId("522700");
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/createTravelItinerary";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【创建行程单】请求地址:" + url);
+		log.info("【创建行程单】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【创建行程单】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【创建行程单】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【创建行程单】失败:" + jsonObject.getString("resMsg"));
+		}
+		return jsonObject.getString("busiResp");
+	}
+	
+	
+	/**
+	 * 修改行程单
+	 *
+	 * @param request
+	 */
+	public static Boolean modifyTravelItinerary(ModifyTravelItineraryRequest request) {
+		request.setScene("TRAFFIC");
+		request.setPartnerId("522700");
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/modifyTravelItinerary";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【修改行程单】请求地址:" + url);
+		log.info("【修改行程单】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【修改行程单】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【修改行程单】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【修改行程单】失败:" + jsonObject.getString("resMsg"));
+		}
+		return true;
+	}
+	
+	
+	/**
+	 * 行程单列表查询
+	 *
+	 * @param request
+	 * @return
+	 */
+	public static ListPage<List<TravelItinerary>> getTravelItineraryList(GetTravelItineraryListRequest request) {
+		request.setScene("TRAFFIC");
+		request.setPartnerId("522700");
+		
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getTravelItineraryList";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【行程单列表查询】请求地址:" + url);
+		log.info("【行程单列表查询】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【行程单列表查询】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【行程单列表查询】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【行程单列表查询】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+		Integer total = busiResp.getInteger("total");
+		Integer pageNum = busiResp.getInteger("pageNum");
+		Integer pageSize = busiResp.getInteger("pageSize");
+		JSONArray list = busiResp.getJSONArray("list");
+		List<TravelItinerary> travelItineraryList = new ArrayList<>();
+		for (int i = 0; i < list.size(); i++) {
+			TravelItinerary object = list.getObject(i, TravelItinerary.class);
+			travelItineraryList.add(object);
+		}
+		ListPage listPage = new ListPage<List<TravelItinerary>>();
+		listPage.setTotal(total);
+		listPage.setPageNum(pageNum);
+		listPage.setPageSize(pageSize);
+		listPage.setList(travelItineraryList);
+		return listPage;
+	}
+	
+	/**
+	 * 订单创建及拉起支付
+	 *
+	 * @param tradeOrderCreateData
+	 * @return
+	 */
+	public static TradeOrderCreate tradeOrderCreate1(TradeOrderCreateData tradeOrderCreateData) {
+		tradeOrderCreateData.setScene("TRAFFIC");
+		tradeOrderCreateData.setPartnerId("522700");
+		tradeOrderCreateData.setTimeout("72H");
+		tradeOrderCreateData.setOrderAppId("52270015");
+		tradeOrderCreateData.setChannelSource("GRJYCXWXXCX");
+		tradeOrderCreateData.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+		tradeOrderCreateData.setCurrency("RMB");
+		tradeOrderCreateData.setNeedLoginFlag("N");
+		tradeOrderCreateData.setAccessMode("APP");
+		tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> {
+			goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
+			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+			goodsInfoRequest.setAreaInfo("520100");
+			goodsInfoRequest.setPayType("0");
+			goodsInfoRequest.setBusinessType("10408");
+		});
+		
+		
+		TradeRequest request = new TradeRequest<TradeOrderCreateData>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954793280550756352" : "1945688132719169536");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion(1);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(tradeOrderCreateData);
+		
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCreate";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单创建及拉起支付】请求地址:" + url);
+		log.info("【订单创建及拉起支付】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单创建及拉起支付】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单创建及拉起支付】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单创建及拉起支付】失败:" + jsonObject.getString("resMsg"));
+		}
+		TradeOrderCreate busiResp = jsonObject.getObject("busiResp", TradeOrderCreate.class);
+		return busiResp;
+	}
+	
+	/**
+	 * 订单创建
+	 *
+	 * @param createOrderRequest
+	 * @return
+	 */
+	public static OrderInfo tradeOrderCreate(CreateOrderRequest createOrderRequest) {
+		createOrderRequest.setOrderAppId("52270015");
+		createOrderRequest.setScene("TRAFFIC");
+		createOrderRequest.setPartnerId("522700");
+		createOrderRequest.setChannelSource("GRJYCXWXXCX");
+		
+		TradeRequest request = new TradeRequest<CreateOrderRequest>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954792737421942784" : "1948289607125864448");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion(1);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(createOrderRequest);
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCreate";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单创建】请求地址:" + url);
+		log.info("【订单创建】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单创建】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单创建】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单创建】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+		OrderInfo orderInfo = busiResp.getObject("orderInfo", OrderInfo.class);
+		return orderInfo;
+	}
+	
+	/**
+	 * (补偿单)拉起支付
+	 *
+	 * @param tradePayOffData
+	 * @return
+	 */
+	public static PayInfo tradePayOff(TradePayOffData tradePayOffData) {
+		tradePayOffData.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401008" : "5400005");
+		tradePayOffData.setTimeout("72H");
+		tradePayOffData.setScene("TRAFFIC");
+		tradePayOffData.setCurrency("RMB");
+		tradePayOffData.setRetUrl("");
+		InetAddress inetAddress = null;
+		try {
+			inetAddress = InetAddress.getLocalHost();
+		} catch (UnknownHostException e) {
+			throw new RuntimeException(e);
+		}
+		String ip = inetAddress.getHostAddress();
+		tradePayOffData.setClientIp(ip);
+		tradePayOffData.setNeedLoginFlag("N");
+		tradePayOffData.setAccessMode("APP");
+		List<PaymentInfoRequest> paymentInfoRequests = new ArrayList<>();
+		PaymentInfoRequest paymentInfoRequest = new PaymentInfoRequest();
+		paymentInfoRequest.setPayModeId("501212");
+		paymentInfoRequest.setRealFee(tradePayOffData.getTotalFee().toString());
+		paymentInfoRequest.setTradeFee(tradePayOffData.getTotalFee().toString());
+		paymentInfoRequest.setAccountTyp("501");
+		paymentInfoRequests.add(paymentInfoRequest);
+		tradePayOffData.setPaymentInfos(paymentInfoRequests);
+		List<GoodsInfo> goodsInfo = new ArrayList<>();
+		GoodsInfo goodsInfo1 = new GoodsInfo();
+		goodsInfo1.setMerchantCode("B00000905");
+		goodsInfo1.setCustId("CB0000004686");
+		goodsInfo1.setCustName("证联消费平台交易客户");
+		goodsInfo1.setBusinessType("10408");
+		goodsInfo1.setAgreementNo("prod".equals(qianYunTongConfig.getActiveProfile()) ? "00000402485377063581755054680461" : "00000000468618354161754464398681");
+		goodsInfo1.setProfitSharing("1");
+		goodsInfo.add(goodsInfo1);
+		tradePayOffData.setGoodsInfo(goodsInfo);
+		
+		
+		TradeRequest request = new TradeRequest<TradePayOffData>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954794605782913024" : "1774717104844095488");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion("prod".equals(qianYunTongConfig.getActiveProfile()) ? 1 : 2);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(tradePayOffData);
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【(补偿单)拉起支付】请求地址:" + url);
+		log.info("【(补偿单)拉起支付】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【(补偿单)拉起支付】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【(补偿单)拉起支付】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【(补偿单)拉起支付】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+		PayInfo payInfo = busiResp.getObject("payInfo", PayInfo.class);
+		return payInfo;
+	}
+	
+	
+	/**
+	 * 查询支付单信息
+	 *
+	 * @param getPaymentInfoDataRequest
+	 * @return
+	 */
+	public static GetPaymentInfo paymentInfo(GetPaymentInfoDataRequest getPaymentInfoDataRequest) {
+		getPaymentInfoDataRequest.setPartnerId("5400004");
+		
+		GetPaymentInfoRequest request = new GetPaymentInfoRequest();
+		request.setRequstType("POST");
+		request.setBusType(1);
+		request.setData(getPaymentInfoDataRequest);
+		
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentInfo";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【查询支付单信息】请求地址:" + url);
+		log.info("【查询支付单信息】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【查询支付单信息】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("retCode");
+		if (!"0".equals(resCode)) {
+			log.error("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+			throw new RuntimeException("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		String retCode = object.getString("retCode");
+		if (!"000000".equals(retCode)) {
+			log.error("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+			throw new RuntimeException("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+		}
+		GetPaymentInfo payInfo = object.getObject("data", GetPaymentInfo.class);
+		return payInfo;
+	}
+	
+	
+	/**
+	 * (补偿单)支付成功通知
+	 *
+	 * @param request
+	 * @return
+	 */
+	public static OrderInfo paymentOrder(PaymentOrderRequest request) {
+		request.setScene("TRAFFIC");
+		request.setMhltiCenterAppId("52270015");
+		request.setPayType(4);
+		request.setPayChannel(6);
+		request.setIsCompensate(1);
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentOrder";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【(补偿单)支付成功通知】请求地址:" + url);
+		log.info("【(补偿单)支付成功通知】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【(补偿单)支付成功通知】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
+		}
+		OrderInfo orderInfo = jsonObject.getObject("busiResp", OrderInfo.class);
+		return orderInfo;
+	}
+	
+	
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java
new file mode 100644
index 0000000..2201301
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java
@@ -0,0 +1,53 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 9:35
+ */
+@Data
+public class CreateOrderRequest {
+	/**
+	 * 司机id
+	 */
+	private String treatShopId;
+	/**
+	 * 应用场景标识
+	 */
+	private String orderAppId;
+	/**
+	 * 场景标识
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 结算信息json串。其中结算分账标识(profitSharing:0:不分账,1:分账)、是否推广单标识(isPromote:1、是、0、否)必传。例:{"profitSharing":"0",”isPromote”:”0”}
+	 */
+	private String field1;
+	/**
+	 * 订单总金额,单位元
+	 */
+	private BigDecimal charge;
+	/**
+	 * 订单渠道。小程序传GRJYCXWXXCX,贵人家园传GRJY
+	 */
+	private String channelSource;
+	/**
+	 * 行程单ID
+	 */
+	private String orderId;
+	/**
+	 * 业务侧订单号
+	 */
+	private String orderNo;
+	/**
+	 * 下单人ID
+	 */
+	private String customerId;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java
new file mode 100644
index 0000000..8ce9043
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java
@@ -0,0 +1,43 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:31
+ */
+@Data
+public class CreateTravelItineraryRequest {
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 业务侧订单号
+	 */
+	private String orderNo;
+	/**
+	 * 乘客ID
+	 */
+	private String customerId;
+	/**
+	 * 司机ID
+	 */
+	private String driverId;
+	/**
+	 * 推广员ID
+	 */
+	private String promoterId;
+	/**
+	 * 服务商商户ID
+	 */
+	private String supplierShopId;
+	/**
+	 * 场景服务类型。1、出租;2、网约车;3、城际;4、顺风车
+	 */
+	private Integer serviceType;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java
new file mode 100644
index 0000000..7ce17dc
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java
@@ -0,0 +1,53 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 18:24
+ */
+@Data
+public class GetPaymentInfo {
+	/**
+	 * 支付流水号
+	 */
+	private String payId;
+	/**
+	 * 订单中心行程单ID
+	 */
+	private String partnerPayId;
+	/**
+	 * 接入模式:PC H5 APP
+	 */
+	private String accessMode;
+	/**
+	 * 用户标识
+	 */
+	private String customerId;
+	/**
+	 * 商户标识
+	 */
+	private String partnerId;
+	/**
+	 * 币种
+	 */
+	private String currency;
+	/**
+	 * 支付总金额
+	 */
+	private String totalFee;
+	/**
+	 * 支付工单状态
+	 * 0	待支付
+	 * 1	部分支付成功
+	 * 2	支付成功
+	 * 3	支付失败
+	 */
+	private String status;
+	/**
+	 * 商品信息
+	 */
+	private List<GoodsInfoRequest> goodsInfo;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java
new file mode 100644
index 0000000..c7828b8
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 17:08
+ */
+@Data
+public class GetPaymentInfoDataRequest {
+	/**
+	 * 支付单标识。传行程单ID
+	 */
+	private String partnerPayId;
+	/**
+	 * 商户号,由支付中心分配
+	 */
+	private String partnerId;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java
new file mode 100644
index 0000000..dfd62c0
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java
@@ -0,0 +1,23 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 17:03
+ */
+@Data
+public class GetPaymentInfoRequest {
+	/**
+	 * 默认传POST
+	 */
+	private String requstType;
+	/**
+	 * 默认传1
+	 */
+	private Integer busType;
+	/**
+	 * 业务参数
+	 */
+	private GetPaymentInfoDataRequest data;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java
new file mode 100644
index 0000000..fa978a7
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java
@@ -0,0 +1,47 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:31
+ */
+@Data
+public class GetTravelItineraryListRequest {
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 业务侧订单号
+	 */
+	private String orderNo;
+	/**
+	 * 乘客ID
+	 */
+	private String customerId;
+	/**
+	 * 司机ID
+	 */
+	private String driverId;
+	/**
+	 * 推广员ID
+	 */
+	private String promoterId;
+	/**
+	 * 服务商商户ID
+	 */
+	private String supplierShopId;
+	/**
+	 * 每页条数
+	 */
+	private Integer pageSize;
+	/**
+	 * 当前页码
+	 */
+	private Integer pageNum;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java
new file mode 100644
index 0000000..8776fcc
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:35
+ */
+@Data
+public class GoodsInfo {
+	/**
+	 * 商户号
+	 */
+	private String merchantCode;
+	/**
+	 * 付款商户号
+	 */
+	private String custId;
+	/**
+	 * 付款方名称
+	 */
+	private String custName;
+	/**
+	 *交通场景固定值
+	 */
+	private String businessType;
+	/**
+	 * 免密支付协议号
+	 */
+	private String agreementNo;
+	/**
+	 * 分账标识。0:不分账,1:分账
+	 */
+	private String profitSharing;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
new file mode 100644
index 0000000..b3d7f21
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:13
+ */
+@Data
+public class GoodsInfoRequest {
+	/**
+	 * 企业ID(补偿场景新创建的订单支付传备用金企业ID)
+	 */
+	private String id;
+	/**
+	 * 子商户微信appId(证联预下单支付必填)
+	 */
+	private String subAppId;
+	/**
+	 * 付款人的openId(证联预下单支付必填)
+	 */
+	private String subOpenId;
+	/**
+	 * 分账标识。0:不分账,1:分账
+	 */
+	private String profitSharing;
+	/**
+	 * 地区标识,默认传520100
+	 */
+	private String areaInfo;
+	/**
+	 * 是否匿名。默认传0
+	 */
+	private String payType;
+	/**
+	 * 业务类型,默认传10408
+	 */
+	private String businessType;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java
new file mode 100644
index 0000000..eda232f
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:45
+ */
+@Data
+public class ListPage<T> {
+	/**
+	 * 总条数
+	 */
+	private Integer total;
+	/**
+	 * 当前页码
+	 */
+	private Integer pageNum;
+	/**
+	 * 每页条数
+	 */
+	private Integer pageSize;
+	/**
+	 * 数据列表
+	 */
+	private T list;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java
new file mode 100644
index 0000000..f7ff87c
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:31
+ */
+@Data
+public class ModifyTravelItineraryRequest {
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 行程单ID
+	 */
+	private String orderId;
+	/**
+	 * 行程单状态。2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,9=已完成,10=已取消,11=改派中
+	 */
+	private Integer status;
+	/**
+	 * 司机ID
+	 */
+	private String driverId;
+	/**
+	 * 推广员ID
+	 */
+	private String promoterId;
+	/**
+	 * 服务商商户ID
+	 */
+	private String supplierShopId;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java
new file mode 100644
index 0000000..ef627a3
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 9:44
+ */
+@Data
+public class OrderInfo {
+	/**
+	 * 订单id
+	 */
+	private String orderId;
+	/**
+	 * 订单状态
+	 */
+	private String status;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java
new file mode 100644
index 0000000..c990caa
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:18
+ */
+@Data
+public class PayInfo {
+	/**
+	 * 证联返回码000000:请求成功
+	 */
+	private String retCode;
+	/**
+	 * 证联返回信息
+	 */
+	private String retMsg;
+	/**
+	 * true、false
+	 */
+	private String success;
+	/**
+	 * 证联返回数据
+	 */
+	private PayInfoData data;
+	/**
+	 * 签名
+	 */
+	private String sign;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java
new file mode 100644
index 0000000..24cf5e5
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java
@@ -0,0 +1,42 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:18
+ */
+@Data
+public class PayInfoData {
+	/**
+	 * 收银台链接
+	 */
+	private String redirectUrl;
+	/**
+	 * 支付流水号
+	 */
+	private String payId;
+	/**
+	 * 支付工单状态
+	 * 0	待支付
+	 * 1	部分支付成功
+	 * 2	支付成功
+	 * 3	支付失败
+	 */
+	private String status;
+	/**
+	 * 支付时间,格式:yyyy-MM-dd HH:mm:ss
+	 */
+	private String payTime;
+	/**
+	 * 扣款金额 单位分
+	 */
+	private String payFee;
+	/**
+	 * 支付信息
+	 */
+	private List<PaymentInfo> paymentInfos;
+	
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java
new file mode 100644
index 0000000..7db70c7
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:32
+ */
+@Data
+public class PaymentInfo {
+	/**
+	 * 支付模式。此场景下默认传501212(测试和生产一致)
+	 */
+	private String payModeId;
+	/**
+	 * 支付交易明细标识
+	 */
+	private String payItemId;
+	/**
+	 * 支付金额
+	 */
+	private String payFee;
+	/**
+	 * 支付状态
+	 */
+	private String status;
+	/**
+	 * 支付时间
+	 */
+	private String payTime;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
new file mode 100644
index 0000000..5747bf2
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:32
+ */
+@Data
+public class PaymentInfoRequest {
+	/**
+	 * 支付模式。此场景下默认传501212(测试和生产一致)
+	 */
+	private String payModeId;
+	/**
+	 * 支付金额
+	 */
+	private String realFee;
+	/**
+	 *
+	 */
+	private String tradeFee;
+	/**
+	 * 账户类型 501
+	 */
+	private String accountTyp;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
new file mode 100644
index 0000000..4fbf0ce
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
@@ -0,0 +1,57 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 18:29
+ */
+@Data
+public class PaymentOrderRequest {
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 场景应用标识。默认52270015
+	 */
+	private String mhltiCenterAppId;
+	/**
+	 * 支付流水明细
+	 */
+	private String payItemId;
+	/**
+	 * 支付明细json串
+	 */
+	private String paymentInfo;
+	/**
+	 * 订单ID
+	 */
+	private String orderId;
+	/**
+	 * 支付金额,单位元
+	 */
+	private BigDecimal charge;
+	/**
+	 * 支付时间
+	 */
+	private String payTime;
+	/**
+	 * 支付流水号
+	 */
+	private String paymentSerialNumber;
+	/**
+	 * 付款类型,4、线上支付
+	 */
+	private Integer payType;
+	/**
+	 * 付款方式,6:微信  7:支付宝  8:银行卡 9:银联二维码 10银联购物车收银台
+	 */
+	private Integer payChannel;
+	/**
+	 * 是否补偿单。1、是,0、否
+	 */
+	private Integer isCompensate;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java
new file mode 100644
index 0000000..801e14d
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 19:31
+ */
+@Data
+public class QYTPaymentCallback {
+	/**
+	 * 加密字符串
+	 */
+	private String sign;
+	/**
+	 * 时间戳
+	 */
+	private String timeStamp;
+	/**
+	 * 请求调用唯一标识
+	 */
+	private String messageId;
+	/**
+	 * 支付结果信息
+	 */
+	private QYTPaymentCallbackData data;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
new file mode 100644
index 0000000..d817c71
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
@@ -0,0 +1,45 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 19:34
+ */
+@Data
+public class QYTPaymentCallbackData {
+	/**
+	 * 业务侧行程编号
+	 */
+	private String orderNo;
+	/**
+	 * 商户单标识。行程单ID
+	 */
+	private String partnerPayId;
+	/**
+	 * 支付中心商户号
+	 */
+	private String partnerId;
+	/**
+	 * 支付工单标识
+	 */
+	private String payId;
+	/**
+	 * 支付状态。1.未支付 2已支付
+	 */
+	private String status;
+	/**
+	 * 支付时间,格式:YYYY-MM-DD HH:mm:ss
+	 */
+	private String payTime;
+	/**
+	 * 扣款总金额 单位分
+	 */
+	private String payFee;
+	/**
+	 * 支付详细信息
+	 */
+	private List<QYTPaymentInfoCallback> paymentInfos;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java
new file mode 100644
index 0000000..19c03d3
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 19:37
+ */
+@Data
+public class QYTPaymentInfoCallback {
+	/**
+	 * 支付交易明细标识
+	 */
+	private String payItemId;
+	/**
+	 * 支付模式
+	 */
+	private String payModeId;
+	/**
+	 * 支付金额,单位分
+	 */
+	private String payFee;
+	/**
+	 * 实付金额,单位分
+	 */
+	private String realFee;
+	/**
+	 * 支付状态。1.未支付 2已支付
+	 */
+	private String status;
+	/**
+	 * 支付时间,格式:YYYY-MM-DD HH:mm:ss
+	 */
+	private String payTime;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java
new file mode 100644
index 0000000..cf44a4d
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java
@@ -0,0 +1,33 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/2 15:41
+ */
+@Data
+public class SendSmsRequest {
+	/**
+	 * 目标地址
+	 */
+	private String destAddress;
+	/**
+	 * 模板id
+	 */
+	private String templateId;
+	/**
+	 * 参数集合
+	 */
+	private Map<String, String> templateParams;
+	/**
+	 * 模板中占位符key
+	 */
+	private String code;
+	/**
+	 * 签名SPID
+	 */
+	private String spId;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java
new file mode 100644
index 0000000..2afc392
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:17
+ */
+@Data
+public class TradeOrderCreate {
+	/**
+	 * 订单信息
+	 */
+	private OrderInfo orderInfo;
+	/**
+	 * 支付接口调用信息
+	 */
+	private PayInfo payInfo;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
new file mode 100644
index 0000000..288fa67
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
@@ -0,0 +1,99 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:03
+ */
+@Data
+public class TradeOrderCreateData {
+	/**
+	 * 司机id
+	 */
+	private String treatShopId;
+	/**
+	 * 应用场景标识
+	 */
+	private String orderAppId;
+	/**
+	 * 场景标识
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 超时时间
+	 */
+	private String timeout;
+	/**
+	 * 结算信息json串。其中结算分账标识(profitSharing:0:不分账,1:分账)、是否推广单标识(isPromote:1、是、0、否)必传。例:{"profitSharing":"0",”isPromote”:”0”}
+	 */
+	private String field1;
+	/**
+	 * 订单总金额,单位元
+	 */
+	private BigDecimal charge;
+	/**
+	 * 订单渠道。小程序传GRJYCXWXXCX,贵人家园传GRJY
+	 */
+	private String channelSource;
+	/**
+	 * 行程单ID
+	 */
+	private String orderId;
+	/**
+	 * 业务侧订单号
+	 */
+	private String orderNo;
+	/**
+	 * 下单人ID
+	 */
+	private String customerId;
+	/**
+	 * 商户号,由支付中心分配。测试环境5400004
+	 */
+	private String payPartnerId;
+	/**
+	 * 商户单标识。订单中心行程单号,每次请求请保持唯一性。
+	 */
+	private String partnerPayId;
+	/**
+	 * 币种。RMB(人民币);USD(美元)
+	 */
+	private String currency;
+	/**
+	 * 交易总金额,单位分。
+	 */
+	private String totalFee;
+	/**
+	 * 前台通知URL地址。
+	 */
+	private String retUrl;
+	/**
+	 * 用户IP
+	 */
+	private String clientIp;
+	/**
+	 * Y代表要登录,跳到标准收银台
+	 * N代表不需要登录,跳到无支付帐号收银台
+	 */
+	private String needLoginFlag;
+	/**
+	 * 支付单描述
+	 */
+	private String orderDesc;
+	/**
+	 * 接入模式:PC、H5、APP
+	 */
+	private String accessMode;
+	/**
+	 * 支付信息
+	 */
+	private List<GoodsInfoRequest> goodsInfo;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java
new file mode 100644
index 0000000..c35c201
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java
@@ -0,0 +1,62 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:23
+ */
+@Data
+public class TradePayOff1Data {
+	/**
+	 * 商户号,由支付中心分配。测试环境5400004
+	 */
+	private String partnerId;
+	/**
+	 * 超时时间
+	 */
+	private String timeout;
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 商户单标识。订单中心订单号,每次请求请保持唯一性。
+	 */
+	private String partnerPayId;
+	/**
+	 * 币种。RMB(人民币);USD(美元)
+	 */
+	private String currency;
+	/**
+	 * 交易总金额,单位分。
+	 */
+	private String totalFee;
+	/**
+	 * 前台通知URL地址。
+	 */
+	private String retUrl;
+	/**
+	 * 用户IP
+	 */
+	private String clientIp;
+	/**
+	 * Y代表要登录,跳到标准收银台
+	 * N代表不需要登录,跳到无支付帐号收银台
+	 */
+	private String needLoginFlag;
+	/**
+	 * 支付单描述
+	 */
+	private String orderDesc;
+	/**
+	 * 接入模式:PC、H5、APP
+	 */
+	private String accessMode;
+	/**
+	 * 商品描述信息。Json数组
+	 */
+	private List<GoodsInfoRequest> goodsInfo;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java
new file mode 100644
index 0000000..a09e932
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java
@@ -0,0 +1,66 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:23
+ */
+@Data
+public class TradePayOffData {
+	/**
+	 * 商户号,由支付中心分配。测试环境5400004
+	 */
+	private String partnerId;
+	/**
+	 * 超时时间
+	 */
+	private String timeout;
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 商户单标识。订单中心订单号,每次请求请保持唯一性。
+	 */
+	private String partnerPayId;
+	/**
+	 * 币种。RMB(人民币);USD(美元)
+	 */
+	private String currency;
+	/**
+	 * 交易总金额,单位分。
+	 */
+	private String totalFee;
+	/**
+	 * 前台通知URL地址。
+	 */
+	private String retUrl;
+	/**
+	 * 用户IP
+	 */
+	private String clientIp;
+	/**
+	 * Y代表要登录,跳到标准收银台
+	 * N代表不需要登录,跳到无支付帐号收银台
+	 */
+	private String needLoginFlag;
+	/**
+	 * 支付单描述
+	 */
+	private String orderDesc;
+	/**
+	 * 接入模式:PC、H5、APP
+	 */
+	private String accessMode;
+	/**
+	 * 支付信息
+	 */
+	private List<PaymentInfoRequest> paymentInfos;
+	/**
+	 * 商品描述信息。Json数组
+	 */
+	private List<GoodsInfo> goodsInfo;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java
new file mode 100644
index 0000000..b2ce9bb
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:22
+ */
+@Data
+public class TradeRequest<T> {
+	/**
+	 * 场景编号.交易中心提供。测试环境:1948289607125864448
+	 */
+	private String sceneId;
+	/**
+	 * 应用编号。中台应用appKey
+	 */
+	private String appId;
+	/**
+	 * 场景版本。交易中心提供。测试环境1
+	 */
+	private Integer configVersion;
+	/**
+	 * 请求ID。每次调用唯一标识
+	 */
+	private String requestId;
+	/**
+	 * 业务数据
+	 */
+	private T data;
+}
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java
new file mode 100644
index 0000000..27ffc26
--- /dev/null
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java
@@ -0,0 +1,64 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:48
+ */
+@Data
+public class TravelItinerary {
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 业务侧订单号
+	 */
+	private String orderNo;
+	/**
+	 * 乘客ID
+	 */
+	private String customerId;
+	/**
+	 * 司机ID
+	 */
+	private String driverId;
+	/**
+	 * 订单号
+	 */
+	private String orderId;
+	/**
+	 * 推广员ID
+	 */
+	private String promoterId;
+	/**
+	 * 服务商商户ID
+	 */
+	private String supplierShopId;
+	/**
+	 * 场景服务类型。1、出租;2、网约车;3、城际;4、顺风车
+	 */
+	private Integer serviceType;
+	/**
+	 * 订单状态。1、待支付,11、已完结(可结算)
+	 */
+	private Integer orderStatus;
+	/**
+	 * 行程单状态。2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,9=已完成,10=已取消,11=改派中
+	 */
+	private Integer status;
+	/**
+	 * 创建时间
+	 */
+	private String createTime;
+	/**
+	 * 更新时间
+	 */
+	private String updateTime;
+	
+}
diff --git a/MessagePushTravel/src/main/java/com/sinata/push/config/QYTConfig.java b/MessagePushTravel/src/main/java/com/sinata/push/config/QYTConfig.java
index 0cc6281..25de2af 100644
--- a/MessagePushTravel/src/main/java/com/sinata/push/config/QYTConfig.java
+++ b/MessagePushTravel/src/main/java/com/sinata/push/config/QYTConfig.java
@@ -1,33 +1,33 @@
-//package com.sinata.push.config;
-//
-//import com.sinata.push.util.echo.NettyServerController;
-//import lombok.Data;
-//import org.springframework.boot.context.properties.ConfigurationProperties;
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.stereotype.Component;
-//
-//import javax.annotation.PostConstruct;
-//
-///**
-// * @author zhibing.pu
-// * @Date 2025/8/12 13:58
-// */
-//@Data
-//@Configuration
-//@ConfigurationProperties(prefix = "qyt")
-//public class QYTConfig {
-//	/**
-//	 * 出行网关接口地址
-//	 */
-//	private String chuxingUrl;
-//	/**
-//	 * 代驾网关接口地址
-//	 */
-//	private String daijiaurl;
-//
-//
-//	@PostConstruct
-//	public void init() {
-//		NettyServerController.setQytConfig(this);
-//	}
-//}
+package com.sinata.push.config;
+
+import com.sinata.push.util.echo.NettyServerController;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/8/12 13:58
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "qyt")
+public class QYTConfig {
+	/**
+	 * 出行网关接口地址
+	 */
+	private String chuxingUrl;
+	/**
+	 * 代驾网关接口地址
+	 */
+	private String daijiaurl;
+
+
+	@PostConstruct
+	public void init() {
+		NettyServerController.setQytConfig(this);
+	}
+}
diff --git a/MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java b/MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java
index 622171c..cf893ba 100644
--- a/MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java
+++ b/MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java
@@ -5,7 +5,7 @@
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-//import com.sinata.push.config.QYTConfig;
+import com.sinata.push.config.QYTConfig;
 import com.sinata.push.util.*;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -35,7 +35,7 @@
 
 	public static Hashtable<String,String> table;
 	
-//	public static QYTConfig qytConfig;
+	public static QYTConfig qytConfig;
 
 	private RedisUtil redisUtil = SpringUtil.getObject(RedisUtil.class);
 
@@ -51,9 +51,9 @@
 	}
 	
 	
-//	public static void setQytConfig(QYTConfig qytConfig) {
-//		NettyServerController.qytConfig = qytConfig;
-//	}
+	public static void setQytConfig(QYTConfig qytConfig) {
+		NettyServerController.qytConfig = qytConfig;
+	}
 	
 	public static boolean isdebug = false;
 	public static int i = 0;
@@ -207,7 +207,7 @@
 								params.put("lat", String.valueOf(lat));
 								params.put("directionAngle", String.valueOf(computeAzimuth));
 								params.put("altitude", String.valueOf(altitude));
-								HttpRequest post = HttpUtil.createPost("http://10.31.182.11:8010/chuxing/driver-server/base/savePosition");
+								HttpRequest post = HttpUtil.createPost(qytConfig.getChuxingUrl() + "/driver-server/base/savePosition");
 								post.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE);
 								post.form(params);
 								HttpResponse execute = post.execute();
@@ -234,7 +234,7 @@
 							params.put("lat", String.valueOf(lat));
 							params.put("directionAngle", String.valueOf(computeAzimuth));
 							params.put("altitude", String.valueOf(altitude));
-							HttpRequest post = HttpUtil.createPost("http://10.31.182.11:8010/daijia/driver-server/base/driver/addDriverPosition");
+							HttpRequest post = HttpUtil.createPost(qytConfig.getDaijiaurl() + "/driver-server/base/driver/addDriverPosition");
 							post.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE);
 							post.form(params);
 							HttpResponse execute = post.execute();
@@ -247,7 +247,7 @@
 							}
 						}
 						
-						redisUtil.setStrValue(business + "_DRIVER" + driverId, lon + "," + lat, 30);//实时位置存入redis中
+						redisUtil.setStrValue(business + ":DRIVER" + driverId, lon + "," + lat, 30);//实时位置存入redis中
 					}else{
 						this.sendMsgToClient(ctx, "__error__" + msg.toString());
 					}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
index 28ca927..70e2b5d 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -158,7 +158,7 @@
             List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().in("id", driverIds)
                     .eq("authState", 2).eq("state", 2));
             collect = drivers.stream().map(driver -> {
-                String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId()));
+                String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId()));
                 if(ToolUtil.isNotEmpty(value)){
                     Optional<DriverPosition> driverPosition = driverPositions.stream().filter(position -> position.getDriverId().equals(driver.getId())).findFirst();
                     Map<String, Object> map = new HashMap<>();
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index b12b209..ade3c3c 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -526,7 +526,7 @@
                 }
                 orderList = orderPrivateCarService.queryOrderInfo2(orderId, 6, null, null);
                 if (orderInfoWarpper.getState() > 1 && orderInfoWarpper.getDriverId() != 0) {
-                    String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(orderInfoWarpper.getDriverId()));
+                    String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderInfoWarpper.getDriverId()));
                     if (value == null || value.equals("")) {
                         if (orderList.isEmpty()) {
                             orderList = orderPrivateCarService.queryOrderInfo2(orderId, 5, "0", "0");
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
index 646bd0d..259e58a 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -2119,7 +2119,7 @@
 		OrderCrossCity orderCrossCity = this.selectById(orderId);
 		if(null != orderCrossCity){
 			//计算预计距离和剩余时间
-			String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(orderCrossCity.getDriverId()));
+			String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderCrossCity.getDriverId()));
 			if (null == value || "".equals(value)) {
 				System.err.println("司机没有上传位置信息");
 				
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
index 8bb3b3d..360eba2 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
@@ -391,7 +391,8 @@
 		a.abnormalRemark,
 		a.abnormalIntro,
 		a.abnormalImg,
-		a.companyId
+		a.companyId,
+        IF(a.abnormalIntro is not null, 1, 0) as appealButton
         from t_order_private_car a
 		left join t_driver b on (a.driverId = b.id)
 		left join t_car c on (a.carId = c.id)
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 2cd1697..7cee817 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -398,7 +398,7 @@
 								JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
 								//判断时间
 								if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) {
-									String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(order.getDriverId()));
+									String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId()));
 									//                            Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString());
 									//                            Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
 									
@@ -668,7 +668,7 @@
 									JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
 									//判断时间
 									if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) {
-										String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(order.getDriverId()));
+										String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId()));
 										//                            Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString());
 										//                            Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
 										
@@ -869,7 +869,7 @@
 							JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
 							//判断时间
 							if (orderPrivateCar.getTravelTime().getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && orderPrivateCar.getTravelTime().getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) {
-								String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(order.getDriverId()));
+								String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId()));
 //                                Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString());
 //                                Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
 								// TODO: 2023/11/4 已改成计算直线距离
@@ -1279,14 +1279,10 @@
 		if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){
 			map.put("state", map.get("oldState"));
 		}
-		if(Integer.valueOf(String.valueOf(map.get("state"))) ==7 &&  (map.get("responsibilityType")==null || Integer.valueOf(String.valueOf(map.get("responsibilityType")))<4)){
-			map.put("appealButton", 1);
-		}
 		if(map.get("abnormalIntro")!=null){
 			map.put("appealStatus", 1);
 		}
-		
-		
+
 		if(Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9){
 			map.put("redPacketMoney", null);
 			map.put("couponMoney", null);
@@ -1311,7 +1307,7 @@
 			return orderTaxiService.queryOrderServer(orderId, uid);
 		}
 		//计算预计距离和剩余时间
-		String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
+		String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
 		if(null == value || "".equals(value)){
 			System.err.println("司机没有上传位置信息");
 			
@@ -2881,8 +2877,6 @@
 							break;
 						}
 						if (i == querys.size() + 15) {
-							orderPrivateCar1.setState(10);
-							orderPrivateCarMapper.updateById(orderPrivateCar1);
 							pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
 							orderIds.remove(orderPrivateCar.getId());
 						}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
index 3f2b044..58acd5f 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -54,7 +54,7 @@
         List<Driver> drivers = driverMapper.queryIdleDriver(type, companyId);
         List<Driver> list = new ArrayList<>();
         for(Driver driver : drivers){
-            String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId()));
+            String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId()));
             if(null != value){
                 Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value);
                 double d = Double.valueOf(distance1.get("WGS84")).doubleValue();
@@ -83,7 +83,7 @@
         List<Driver> drivers = driverMapper.queryIdleDriver_(type, serverCarModelId, companyId);
         List<Driver> list = new ArrayList<>();
         for(Driver driver : drivers){
-            String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId()));
+            String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId()));
             if(null != value){
                 Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value);
                 double d = Double.valueOf(distance1.get("WGS84")).doubleValue();
@@ -100,7 +100,7 @@
         List<Driver> drivers = driverMapper.queryIdleDriver1(type, companyId);
         List<Driver> list = new ArrayList<>();
         for(Driver driver : drivers){
-            String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId()));
+            String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId()));
             if(null != value){
                 Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value);
                 double d = Double.valueOf(distance1.get("WGS84")).doubleValue();
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
index 6b09421..ac957b0 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
@@ -45,11 +45,13 @@
         // 设置邮件主题和内容
         helper.setSubject(subject);
         helper.setText(text);
-        // 使用显示文件名而非原文件名
-        helper.addAttachment(
-                MimeUtility.encodeWord(displayFileName),  // 编码避免中文乱码
-                attachment
-        );
+        if(null != attachment){
+            // 使用显示文件名而非原文件名
+            helper.addAttachment(
+                    MimeUtility.encodeWord(displayFileName),  // 编码避免中文乱码
+                    attachment
+            );
+        }
 
 
         // 发送邮件
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
index 8774fb2..a356b3c 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
@@ -248,7 +248,7 @@
 		}
 		
 		//计算预计距离和剩余时间
-		String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driverId));
+		String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driverId));
 		if (null == value || "".equals(value)) {
 			return;
 		}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
index 731bfa2..cbddec4 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
@@ -191,7 +191,7 @@
 		tradePayOff1Data.setNeedLoginFlag("N");
 		tradePayOff1Data.setAccessMode("APP");
 		tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> {
-			goodsInfoRequest.setId("981100006005901");
+			goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
 			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
 			
 			goodsInfoRequest.setAreaInfo("520100");
@@ -397,7 +397,7 @@
 		tradeOrderCreateData.setNeedLoginFlag("N");
 		tradeOrderCreateData.setAccessMode("APP");
 		tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> {
-			goodsInfoRequest.setId("981100006005901");
+			goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
 			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
 			goodsInfoRequest.setAreaInfo("520100");
 			goodsInfoRequest.setPayType("0");
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/OrderTaxiMapper.xml b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/OrderTaxiMapper.xml
index b3d87a1..4d47316 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/OrderTaxiMapper.xml
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/OrderTaxiMapper.xml
@@ -264,7 +264,8 @@
         a.abnormalRemark,
         a.abnormalIntro,
         a.abnormalImg,
-        a.companyId
+        a.companyId,
+        IF(a.abnormalIntro is not null, 1, 0) as appealButton
         from t_order_taxi a
 		left join t_driver b on (a.driverId = b.id)
 		left join t_car c on (a.carId = c.id)
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
index 9b5da04..fd93602 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -1896,10 +1896,7 @@
 		if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) {
 			map.put("state", map.get("oldState"));
 		}
-		
-		if (Integer.valueOf(String.valueOf(map.get("state"))) == 7 && (map.get("responsibilityType") == null || Integer.valueOf(String.valueOf(map.get("responsibilityType"))) < 4)) {
-			map.put("appealButton", 1);
-		}
+
 		if (map.get("abnormalIntro") != null) {
 			map.put("appealStatus", 1);
 		}
@@ -1962,7 +1959,7 @@
 		//计算预计距离和剩余时间
 		String value = null;
 		if (null != orderTaxi.getDriverId()) {
-			value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + orderTaxi.getDriverId());
+			value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + orderTaxi.getDriverId());
 			if (null == value || "".equals(value)) {
 				System.err.println("司机没有上传位置信息");
 				
diff --git a/UserQYTTravel/guns-admin/src/main/resources/application-dev.yml b/UserQYTTravel/guns-admin/src/main/resources/application-dev.yml
index 1e5db7d..51de891 100644
--- a/UserQYTTravel/guns-admin/src/main/resources/application-dev.yml
+++ b/UserQYTTravel/guns-admin/src/main/resources/application-dev.yml
@@ -125,7 +125,7 @@
 spring:
   mail:
     host: smtp.163.com
-    port: 993
+    port: 465
     username: QYTJT001@163.com
     password: GPaYdKdsQphDGRJd  # 这里是授权码,不是邮箱登录密码
     properties:
diff --git a/UserQYTTravel/guns-admin/src/main/resources/application-prod.yml b/UserQYTTravel/guns-admin/src/main/resources/application-prod.yml
index 0f84cd1..f15256e 100644
--- a/UserQYTTravel/guns-admin/src/main/resources/application-prod.yml
+++ b/UserQYTTravel/guns-admin/src/main/resources/application-prod.yml
@@ -121,7 +121,7 @@
 spring:
   mail:
     host: smtp.163.com
-    port: 993
+    port: 465
     username: QYTJT001@163.com
     password: GPaYdKdsQphDGRJd  # 这里是授权码,不是邮箱登录密码
     properties:
diff --git a/UserQYTTravel/guns-admin/src/main/resources/application-test.yml b/UserQYTTravel/guns-admin/src/main/resources/application-test.yml
index 1c45ead..24584c8 100644
--- a/UserQYTTravel/guns-admin/src/main/resources/application-test.yml
+++ b/UserQYTTravel/guns-admin/src/main/resources/application-test.yml
@@ -123,7 +123,7 @@
 spring:
   mail:
     host: smtp.163.com
-    port: 993
+    port: 465
     username: QYTJT001@163.com
     password: GPaYdKdsQphDGRJd  # 这里是授权码,不是邮箱登录密码
     properties:
diff --git a/UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java b/UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
index dba4169..5a52f13 100644
--- a/UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
+++ b/UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
@@ -1,59 +1,69 @@
-//package com.stylefeng.guns;
-//
-//import com.alibaba.fastjson.JSON;
-//import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
-//import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
-//import com.stylefeng.guns.modular.system.model.Company;
-//import com.stylefeng.guns.modular.system.model.Driver;
-//import com.stylefeng.guns.modular.system.model.UserInfo;
-//import com.stylefeng.guns.modular.system.service.ICompanyService;
-//import com.stylefeng.guns.modular.system.service.IDriverService;
-//import com.stylefeng.guns.modular.system.service.IUserInfoService;
-//import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
-//import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil;
-//import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
-//import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
-//import lombok.extern.slf4j.Slf4j;
-//import org.junit.Test;
-//import org.junit.runner.RunWith;
-//import org.springframework.beans.BeanUtils;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.boot.test.context.SpringBootTest;
-//import org.springframework.test.context.junit4.SpringRunner;
-//
-//import java.math.BigDecimal;
-//import java.util.List;
-//
-///**
-// * SpringBoot方式启动类
-// *
-// * @author stylefeng
-// * @Date 2017/5/21 12:06
-// */
-//@Slf4j
-//@RunWith(SpringRunner.class)
-//@SpringBootTest
-//public class GunsApplicationTest {
-//
-//	@Autowired
-//	private IOrderPrivateCarService orderPrivateCarService;
-//
-//	@Autowired
-//	private IUserInfoService userInfoService;
-//
-//	@Autowired
-//	private IDriverService driverService;
-//	@Autowired
-//	private ICompanyService companyService;
-//	@Autowired
-//	private IPaymentRecordService paymentRecordService;
-//
-//
-//
-//
-//	@Test
-//	public void test(){
-//		String onconUUIDByMobile = UserUtil.getOnconUUIDByMobile("15828353127");
-//		System.err.println(onconUUIDByMobile);
-//	}
-//}
+package com.stylefeng.guns;
+
+import com.alibaba.fastjson.JSON;
+import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
+import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
+import com.stylefeng.guns.modular.system.model.Company;
+import com.stylefeng.guns.modular.system.model.Driver;
+import com.stylefeng.guns.modular.system.model.UserInfo;
+import com.stylefeng.guns.modular.system.service.ICompanyService;
+import com.stylefeng.guns.modular.system.service.IDriverService;
+import com.stylefeng.guns.modular.system.service.IUserInfoService;
+import com.stylefeng.guns.modular.system.util.EmailUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
+import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.mail.MessagingException;
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * SpringBoot方式启动类
+ *
+ * @author stylefeng
+ * @Date 2017/5/21 12:06
+ */
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class GunsApplicationTest {
+
+	@Autowired
+	private IOrderPrivateCarService orderPrivateCarService;
+
+	@Autowired
+	private IUserInfoService userInfoService;
+
+	@Autowired
+	private IDriverService driverService;
+	@Autowired
+	private ICompanyService companyService;
+	@Autowired
+	private IPaymentRecordService paymentRecordService;
+    @Autowired
+    private EmailUtil emailUtil;
+
+
+
+
+	@Test
+	public void test(){
+        try {
+            emailUtil.sendEmailWithAttachment("393733352@qq.com", "贵人家园出行-行程单", "请查收您的行程单", null, "贵人家园出行-行程单");
+        } catch (MessagingException e) {
+            throw new RuntimeException(e);
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/ZuulQYTTravel/src/main/java/com/sinata/zuul/ZuulApplication.java b/ZuulQYTTravel/src/main/java/com/sinata/zuul/ZuulApplication.java
index 65bf41b..564070d 100644
--- a/ZuulQYTTravel/src/main/java/com/sinata/zuul/ZuulApplication.java
+++ b/ZuulQYTTravel/src/main/java/com/sinata/zuul/ZuulApplication.java
@@ -1,27 +1,17 @@
 package com.sinata.zuul;
 
 import com.spring4all.swagger.EnableSwagger2Doc;
-import org.apache.http.client.HttpClient;
-import org.apache.http.config.SocketConfig;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-import org.springframework.cloud.client.loadbalancer.LoadBalanced;
 import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
-import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Primary;
-import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
-import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
 import springfox.documentation.swagger.web.SwaggerResource;
 import springfox.documentation.swagger.web.SwaggerResourcesProvider;
 
-import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -36,24 +26,6 @@
         SpringApplication.run(ZuulApplication.class, args);
     }
 
-
-    @Bean //SpringCloud内部服务质检使用服务名调用
-    @LoadBalanced
-    public RestTemplate internalRestTemplate() {
-        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
-        connectionManager.setDefaultSocketConfig(SocketConfig.custom().setTcpNoDelay(true).build());
-        connectionManager.setDefaultMaxPerRoute(100);//最大并发连接
-        connectionManager.setMaxTotal(200); // 总的最大连接数
-        HttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connectionManager).build();
-        HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
-        httpRequestFactory.setConnectionRequestTimeout(30 * 1000);
-        httpRequestFactory.setConnectTimeout(30 * 3000);
-        httpRequestFactory.setReadTimeout(30 * 3000);
-        RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
-        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
-        return restTemplate;
-    }
-    
     
     /**
      * 配置Swagger

--
Gitblit v1.7.1