Pu Zhibing
2025-07-30 410e261a251e07b17bba8aa9b098eb21c34de5cb
添加证联集成
12个文件已修改
25个文件已添加
1861 ■■■■■ 已修改文件
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | 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 595 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverPosition.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/resources/application.yml 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MessagePushTravel/src/main/java/com/sinata/push/util/echo/DiscardServerHandler.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -746,6 +746,7 @@
            if(null == position){
                position = new DriverPosition();
            }
            position.setDriverId(orderPosition.getDriverId());
            position.setPoint(point);
            mongoTemplate.save(position);
            //处理业务上的功能
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -16,6 +16,8 @@
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.CreateTravelItineraryRequest;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -239,7 +241,14 @@
        // 是否推广订单
        Integer promotion = isPromotion(uid);
        orderPrivateCar.setPromotion(promotion);
        UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId());
        //调三方订单中心创建行程单
        CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
        request.setOrderNo("PR" + orderPrivateCar.getId());
        request.setCustomerId(userInfo.getOnconUUID());
        request.setDriverId(driver.getEmpId().toString());
        String travelItinerary = OrderUtil.createTravelItinerary(request);
//        orderPrivateCar.set
        this.updateById(orderPrivateCar);
        //处理摆渡车的情况
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserInfo.java
@@ -146,6 +146,11 @@
     */
    private Date bindExpireDate;
    /**
     * 中台用户ID
     */
    @TableField("onconUUID")
    private String onconUUID;
    public Integer getBindDriverId() {
        return bindDriverId;
@@ -355,6 +360,14 @@
        this.appletsOpenId = appletsOpenId;
    }
    public String getOnconUUID() {
        return onconUUID;
    }
    public void setOnconUUID(String onconUUID) {
        this.onconUUID = onconUUID;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -509,10 +509,10 @@
    public ResultUtil grabOrder(Integer orderId, Integer orderType, Integer uid) throws Exception {
        //专车和出租是批量下单,所以这里需要将两种类型的抢单操作通过一个锁来一起控制
        if(1 == orderType || 2 == orderType){
//            RLock lock = redissonClient.getLock("grabOrder:" + orderId);
//            if(!lock.tryLock()){
//                return ResultUtil.error("抢单失败,请稍后重试");
//            }
            Boolean lock = redisTemplate.opsForValue().setIfAbsent("grabOrder:" + orderId, "1");
            if(!lock){
                return ResultUtil.error("抢单失败,请稍后重试");
            }
            try {
                if(1 == orderType){
                    return orderPrivateCarService.grabOrder(orderId, uid);
@@ -523,7 +523,7 @@
            }catch (Exception e){
                e.printStackTrace();
            }finally {
//                lock.unlock();
                redisTemplate.delete("grabOrder:" + orderId);
            }
        }
        switch (orderType){
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
@@ -57,7 +57,7 @@
    
    private Map<String, Timer> taskMap = new HashMap<>();//存储定时推送的定时器
    
    private final String socket_uri = "http://172.21.35.142:6000";
    private final String socket_uri = "http://127.0.0.1:6000";
    // qyt 改派重新推单
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
New file
@@ -0,0 +1,595 @@
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.UUIDUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
import lombok.extern.slf4j.Slf4j;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * @author zhibing.pu
 * @Date 2025/7/24 9:34
 */
@Slf4j
public class OrderUtil {
    public static void main(String[] args) {
        //创建行程
//        CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
//        request.setScene("TRAFFIC");
//        request.setPartnerId("522700");
//        request.setOrderNo("01234567890");
//        request.setCustomerId("11448156");
//        request.setDriverId("11448158");
//        request.setSupplierShopId("981100006005951");
//        request.setServiceType(1);
//        String travelItinerary = createTravelItinerary(request);
//        System.err.println(travelItinerary);//1950363840206753792
        //修改行程状态
//        ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
//        request.setScene("TRAFFIC");
//        request.setPartnerId("522700");
//        request.setOrderId("1950363840206753792");
//        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("1950363840206753792");
//        tradeOrderCreateData.setOrderNo("01234567890");
//        tradeOrderCreateData.setCustomerId("11448156");
//        tradeOrderCreateData.setPayPartnerId("5400004");
//        tradeOrderCreateData.setPartnerPayId("1950363840206753792");
//        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("wxcbad113185a243e1");
//        goodsInfoRequest.setSubOpenId("oVLur6yFtED8ruXBWUFKXjzXJ_BQ");
//        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("1948685426689200128");
//        tradePayOff1Data.setCurrency("RMB");
//        tradePayOff1Data.setTotalFee("1");
//        tradePayOff1Data.setRetUrl("/home/");
//        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("wxcbad113185a243e1");
//        goodsInfoRequest.setSubOpenId("oVLur6yFtED8ruXBWUFKXjzXJ_BQ");
//        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) {
        TradeRequest request = new TradeRequest<TradePayOff1Data>();
        request.setSceneId("1911676727023968256");
        request.setAppId(QianYunTongProperties.appkey);
        request.setConfigVersion(1);
        request.setRequestId(UUIDUtil.getRandomCode());
        request.setData(tradePayOff1Data);
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradePayOff";
        //私钥文件
        String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName);
        contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
        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");
        request.setSupplierShopId("981100006005951");
        request.setServiceType(1);
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/createTravelItinerary";
        //私钥文件
        String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName);
        contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
        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){
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/modifyTravelItinerary";
        //私钥文件
        String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName);
        contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
        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<TravelItinerary> getTravelItineraryList(GetTravelItineraryListRequest request){
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/getTravelItineraryList";
        //私钥文件
        String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName);
        contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
        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<TravelItinerary>();
        listPage.setTotal(total);
        listPage.setPageNum(pageNum);
        listPage.setPageSize(pageSize);
        listPage.setList(travelItineraryList);
        return listPage;
    }
    /**
     * 订单创建及拉起支付
     *
     * @param tradeOrderCreateData
     * @return
     */
    public static TradeOrderCreate tradeOrderCreate1(TradeOrderCreateData tradeOrderCreateData) {
        TradeRequest request = new TradeRequest<TradeOrderCreateData>();
        request.setSceneId("1945688132719169536");
        request.setAppId(QianYunTongProperties.appkey);
        request.setConfigVersion(1);
        request.setRequestId(UUIDUtil.getRandomCode());
        request.setData(tradeOrderCreateData);
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradeOrderCreate";
        //私钥文件
        String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName);
        contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
        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) {
        TradeRequest request = new TradeRequest<CreateOrderRequest>();
        request.setSceneId(QianYunTongProperties.sceneId);
        request.setAppId(QianYunTongProperties.appkey);
        request.setConfigVersion(1);
        request.setRequestId(UUIDUtil.getRandomCode());
        request.setData(createOrderRequest);
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradeOrderCreate";
        //私钥文件
        String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName);
        contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
        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) {
        TradeRequest request = new TradeRequest<TradePayOffData>();
        request.setSceneId("1774717104844095488");
        request.setAppId(QianYunTongProperties.appkey);
        request.setConfigVersion(1);
        request.setRequestId(UUIDUtil.getRandomCode());
        request.setData(tradePayOffData);
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradePayOff";
        //私钥文件
        String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName);
        contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
        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){
        GetPaymentInfoRequest request = new GetPaymentInfoRequest();
        request.setRequstType("POST");
        request.setBusType(1);
        request.setData(getPaymentInfoDataRequest);
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/paymentInfo";
        //私钥文件
        String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName);
        contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
        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){
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/paymentOrder";
        //私钥文件
        String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName);
        contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
        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(!"0".equals(resCode)){
            log.error("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
            throw new RuntimeException("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
        }
        OrderInfo orderInfo = jsonObject.getObject("busiResp", OrderInfo.class);
        return orderInfo;
    }
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
@@ -62,6 +62,10 @@
     * 向UAAS服务请求到的secret_key
     */
    private String secretKey;
    /**
     * 场景编号
     */
    String sceneId;
    
    
    public QianYunTongConfig getQianYunTongConfig() {
@@ -77,6 +81,7 @@
            this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
            this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
            this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
            this.sceneId = "1948289607125864448";
        }
        if("test".equals(activeProfile)){
            this.setAppkey("10001104");
@@ -90,6 +95,7 @@
            this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
            this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
            this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
            this.sceneId = "1948289607125864448";
        }
        if("prod".equals(activeProfile)){
            this.setAppkey("10001104");
@@ -103,6 +109,7 @@
            this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
            this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
            this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
            this.sceneId = "";
        }
        return this;
    }
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java
@@ -9,41 +9,6 @@
public interface QianYunTongProperties {
    /************************************开发/测试start***********************************/
//    /**
//     * appkey
//     */
//    String appkey = "10001104";
//    /**
//     * 私钥地址
//     */
//    String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
//    /**
//     * 私钥地址
//     */
//    String privateKeyPath = "/root/server/app/key/private_key_test.pem";
//    /**
//     * 消费者账号
//     */
//    String userName = "xiaofei";
//    /**
//     * 状态
//     * 1:生产环境
//     * 2:测试环境
//     */
//    String status = "1";
//    /**
//     * API地址
//     */
//    String apiUrl = "https://test-zhongtai.stqcloud.com:10070";
//    /**
//     * 桶名
//     */
//    String bucketName = "bucuTest0625";
    /************************************开发/测试end***********************************/
    /************************************生产start***********************************/
    /**
     * appkey
     */
@@ -51,15 +16,15 @@
    /**
     * 私钥地址
     */
//    String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key.pem";
    String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
    /**
     * 私钥地址
     */
    String privateKeyPath = "/root/server/app/key/private_key.pem";
//    String privateKeyPath = "/root/server/app/key/private_key_test.pem";
    /**
     * 消费者账号
     */
    String userName = "xiwang";
    String userName = "xiaofei";
    /**
     * 状态
     * 1:生产环境
@@ -69,11 +34,50 @@
    /**
     * API地址
     */
    String apiUrl = "http://jjzhongtai.stqcloud.com:10010";
    String apiUrl = "https://test-zhongtai.stqcloud.com:10070";
    /**
     * 桶名
     */
    String bucketName = "qyt20250702";
    String bucketName = "bucuTest0625";
    /**
     * 场景编号
     */
    String sceneId = "1948289607125864448";
    /************************************开发/测试end***********************************/
    /************************************生产start***********************************/
//    /**
//     * appkey
//     */
//    String appkey = "10001104";
//    /**
//     * 私钥地址
//     */
////    String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key.pem";
//    /**
//     * 私钥地址
//     */
//    String privateKeyPath = "/root/server/app/key/private_key.pem";
//    /**
//     * 消费者账号
//     */
//    String userName = "xiwang";
//    /**
//     * 状态
//     * 1:生产环境
//     * 2:测试环境
//     */
//    String status = "1";
//    /**
//     * API地址
//     */
//    String apiUrl = "http://jjzhongtai.stqcloud.com:10010";
//    /**
//     * 桶名
//     */
//    String bucketName = "qyt20250702";
    
    /************************************生产end***********************************/
    
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.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 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;
    /**
     * 商品信息
     */
    private List<GoodsInfoRequest> goodsInfo;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
New file
@@ -0,0 +1,15 @@
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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
New file
@@ -0,0 +1,41 @@
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 {
    /**
     * 商户单标识。行程单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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
New file
@@ -0,0 +1,95 @@
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;
    /**
     * 结算信息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;
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java
New file
@@ -0,0 +1,58 @@
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;
    /**
     * 场景标识。交通场景传”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;
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.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 TradePayOffData {
    /**
     * 商户号,由支付中心分配。测试环境5400004
     */
    private String partnerId;
    /**
     * 场景标识。交通场景传”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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/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;
}
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverPosition.java
@@ -13,6 +13,10 @@
@Document(collection = "driver_position")
public class DriverPosition {
    @Id
    private String id;
    /**
     * 司机id
     */
    private Integer driverId;
    /**
     * 点位
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -212,7 +212,7 @@
//        }
        // 是否推广订单
        Integer promotion = isPromotion(uid);
        Integer promotion = isPromotion(orderTaxi.getUserId());
        orderTaxi.setPromotion(promotion);
        this.updateById(orderTaxi);
DriverQYTTravel/guns-admin/src/main/resources/application.yml
@@ -1,3 +1,120 @@
server:
    port: 8007
guns:
    swagger-open: true              #是否开启swagger (true/false)
    kaptcha-open: false             #是否开启登录时验证码 (true/false)
    file-upload-path: d:/tmp       #文件上传目录(不配置的话为java.io.tmpdir目录)
    picture-server-address: http://192.168.0.43/resources/  #图片服务器地址
    spring-session-open: false      #是否开启spring session,如果是多机环境需要开启(true/false)
    session-invalidate-time: 1800     #session失效时间(只在单机环境下生效,多机环境在SpringSessionConfig类中配置) 单位:秒
    session-validation-interval: 900  #多久检测一次失效的session(只在单机环境下生效) 单位:秒
spring:
    application:
        name: driver-server
    profiles:
        active: "@spring.active@"
        active: dev
    mvc:
        static-path-pattern: /static/**
        view:
            prefix: /WEB-INF/view
        devtools:
            restart:
                enabled: false
                additional-paths: src/main/java
                exclude: static/**,WEB-INF/view/**
        servlet:
            multipart:
                max-request-size: 100MB
                max-file-size: 100MB
    redis:
        host: 192.168.110.80
        port: 6379
        password: 123456
        database: 0
        timeout: 1000
#        cluster:
#            nodes: 127.0.0.1:6379
mybatis-plus:
    typeAliasesPackage: com.stylefeng.guns.modular
    global-config:
        id-type: 0  #0:数据库ID自增   1:用户输入id  2:全局唯一id(IdWorker)  3:全局唯一ID(uuid)
        db-column-underline: false
    configuration:
        configuration.map-underscore-to-camel-case: true #是否开启自动驼峰命名规则(camel case)映射
        log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #输出Sql,如需打印Sql注释该配置
eureka:
    client:
        service-url: #注册中心地址
            defaultZone: http://sinata:sinata@127.0.0.1:8000/eureka #启用身份验证的方式连接
        register-with-eureka: true #在注册中心进行注册
        fetch-registry: true #从Eureka中获取注册信息。
---
spring:
    datasource:
        url: jdbc:mysql://192.168.110.80:3306/qyttravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        db-name: qyttravel #用来搜集数据库的所有表
        filters: wall,mergeStat
---
spring:
    data:
        mongodb:
            uri: mongodb://192.168.110.80:27017/traveling_track
---
wx:
    grantType: authorization_code #填authorization_code
    appid: 111 #应用唯一标识,在微信开放平台提交应用审核通过后获得
    appSecret: 111 #应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
    appletsAppid: wxcc3c9058e2b294db #小程序APPid
    appletsAppSecret: 5610fc6126255ca5f7bd9fa4330338b6 #
    mchId: 111 #微信支付分配的商户号
    key: 111 #key为商户平台设置的密钥key:
    url: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}
---
alipay:
    appid: 111  #应用程序唯一标识
    appPrivateKey: 111 #开发者应用私钥
    alipayPublicKey: 1 #应用公钥
    alipay_public_key: 111 #支付宝公钥
---
juhe: #聚合数据
    appKey: 111 #
---
jiguang:
    appKey-driver: 111 #极光推送应用唯一标识
    masterSecret-driver: 111 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的
    appKey-dispatch: 111 #极光推送应用唯一标识
    masterSecret-dispatch: 111 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的
---
#支付回调地址
#正式环境
callbackPath: https://traffic.qytzt.cn/driver
---
#交通部推送数据功能开关
pushMinistryOfTransport: false
---
rongyun:
    app_key: 111
    app_secret: 111
DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
@@ -1,11 +1,36 @@
//package com.stylefeng.guns;
//
//import org.junit.runner.RunWith;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.test.context.junit4.SpringRunner;
//
//@RunWith(SpringRunner.class)
//@SpringBootTest
//public class GunsApplicationTest {
//
package com.stylefeng.guns;
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;
    @Test
    public void test(){
//        GeoJsonPoint point = new GeoJsonPoint(new Point(Double.parseDouble("104.043149"),
//                Double.parseDouble("30.642483")));
//        DriverPosition position = mongoTemplate.findOne(Query.query(Criteria.where("driverId")
//                .is(14)), DriverPosition.class);
//        if(null == position){
//            position = new DriverPosition();
//}
//        position.setDriverId(14);
//        position.setPoint(point);
//        mongoTemplate.save(position);
//        Query query = Query.query(Criteria.where("point").nearSphere(new Point(Double.parseDouble("104.043149"), Double.parseDouble("30.642483"))).maxDistance(5000));
//        List<DriverPosition> driverPositions = mongoTemplate.find(query, DriverPosition.class);
//        System.err.println(driverPositions);
    }
}
MessagePushTravel/src/main/java/com/sinata/push/util/echo/DiscardServerHandler.java
@@ -23,7 +23,7 @@
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress();
        if(isdebug) {
//            System.err.println(insocket.getAddress() + ": 收到客户端数据.......");
            System.err.println(insocket.getAddress() + ": 收到客户端数据.......");
        }
        try {
            // 调用service
@@ -39,7 +39,7 @@
    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
        InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress();
        if(isdebug) {
//            System.err.println(insocket.getAddress() + ": 收到客户端数据.......");
            System.err.println(insocket.getAddress() + ": 收到客户端数据.......");
        }
        try {
            // 调用service
@@ -70,7 +70,7 @@
    public void channelActive(final ChannelHandlerContext ctx) throws Exception {
        InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress();
        if(isdebug) {
//            System.err.println(insocket.getAddress() + ": Connect successful......");
            System.err.println(insocket.getAddress() + ": Connect successful......");
        }
    }