Pu Zhibing
4 天以前 9641d9ebc7b32b7e2cee898c8e9250e798c97e1b
修改bug
31个文件已修改
27个文件已添加
2234 ■■■■ 已修改文件
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/QYTConfig.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushURL.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java 682 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MessagePushTravel/src/main/java/com/sinata/push/config/QYTConfig.java 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/OrderTaxiMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/resources/application-prod.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/resources/application-test.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZuulQYTTravel/src/main/java/com/sinata/zuul/ZuulApplication.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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]);
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());//里程费
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
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();
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);
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());//机动车驾驶证号
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;
        }
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");
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]);
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);
//        }
//    }
//}
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;
}
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;
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;
//    }
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
New file
@@ -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;
    }
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java
New file
@@ -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;
}
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java
New file
@@ -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;
}
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);
    }
}
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());
                    }
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<>();
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");
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("司机没有上传位置信息");
                
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)
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());
                        }
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();
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
            );
        }
        // 发送邮件
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;
        }
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");
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)
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("司机没有上传位置信息");
                
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:
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:
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:
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);
        }
    }
}
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