Pu Zhibing
9 天以前 db9460ab195479bfd7fbfe26cab030d3668e4195
开发三方订单及支付相关接口对接
5个文件已修改
26个文件已添加
1683 ■■■■■ 已修改文件
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java 471 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -17,6 +17,7 @@
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.model.QYTPaymentCallback;
import com.stylefeng.guns.modular.system.warpper.*;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
import com.stylefeng.guns.modular.taxi.model.PaymentRecord;
@@ -28,13 +29,11 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -47,7 +46,7 @@
 * 订单控制器(综合)
 */
@Api
//@CrossOrigin
@Slf4j
@RestController
@RequestMapping("")
public class OrderController {
@@ -1988,29 +1987,46 @@
            e.printStackTrace();
        }
    }
    /**
     * 管理后台推单
     *
     * @param orderType
     * @return
     */
    @ResponseBody
    @PostMapping("/base/taxi/pushOrder")
    public ResultUtil pushOrder(Integer orderId, Integer orderType){
    public ResultUtil pushOrder(Integer orderId, Integer orderType) {
        try {
            switch (orderType){
            switch (orderType) {
                case 1:
                    return orderPrivateCarService.pushOrderPrivateCar(orderId);
                case 2:
                    return orderTaxiService.pushOrderTaxi(orderId);
            }
            return ResultUtil.success();
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    
    
    /**
     * 黔云通支付回调通知
     *
     * @param qytPaymentCallback
     * @return
     */
    @ResponseBody
    @PostMapping("/base/order/qytPaymentCallback")
    public String qytPaymentCallback(@RequestBody QYTPaymentCallback qytPaymentCallback) {
        log.info("【黔云通支付回调通知】请求参数:" + JSON.toJSONString(qytPaymentCallback));
        if (null == qytPaymentCallback) {
            return "error";
        }
        return "success";
    }
}
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
@@ -5,6 +5,7 @@
import com.google.gson.Gson;
import com.open.common.util.OpenApiClient;
import com.open.common.util.SystemParameterNames;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
import lombok.extern.slf4j.Slf4j;
@@ -16,19 +17,39 @@
/**
 * 企业员工工具类
 *
 * @author zhibing.pu
 * @Date 2025/6/6 16:17
 */
@Slf4j
public class EmployeeUtil {
    
    public static void main(String[] args) {
        SaveStaffNodeRequest request = new SaveStaffNodeRequest();
        request.setMobile("15828353127");
        request.setEntercode("981100006005951");
        request.setEmpName("蒲");
        request.setEmpNickname("蒲");
        request.setLoginNo("15828353125");
        request.setEmpSex("男");
        request.setMphone("15828353125");
        request.setEmail("15828353125@qyt.com");
        request.setDeptId(0);
        request.setPositionId(1);
        request.setSuperLevel(0);
        request.setHideMobile(0);
        ResultUtil<SaveStaffNode> resultUtil = EmployeeUtil.saveStaffNode(request);
        System.out.println(resultUtil.getData());
    }
    
    /**
     * 企业增加员工
     *
     * @param request
     * @return
     */
    public static SaveStaffNode saveStaffNode(SaveStaffNodeRequest request){
    public static ResultUtil<SaveStaffNode> saveStaffNode(SaveStaffNodeRequest request) {
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/saveStaffNode";
        //私钥文件
@@ -56,16 +77,19 @@
        String retCode = jsonObject.getString("retCode");
        if (!"0".equals(retCode)) {
            log.error("【企业增加员工】请求失败:" + result);
            throw new RuntimeException("【企业增加员工】请求失败:" + result);
            String retMsg = jsonObject.getString("retMsg");
            retMsg = retMsg.substring(retMsg.indexOf("{"));
            jsonObject = JSON.parseObject(retMsg);
            return ResultUtil.error("【企业增加员工】请求失败:" + jsonObject.getString("msg"));
        }
        JSONObject object = jsonObject.getJSONObject("object");
        String status = object.getString("status");
        if (!"0".equals(status)) {
            log.error("【企业增加员工】失败:" + object.toJSONString());
            throw new RuntimeException("【企业增加员工】失败:" + object.toJSONString());
            return ResultUtil.error("【企业增加员工】失败:" + object.getString("desc"));
        }
        SaveStaffNode saveStaffNode = jsonObject.getObject("object", SaveStaffNode.class);
        return saveStaffNode;
        SaveStaffNode saveStaffNode = object.getObject("data", SaveStaffNode.class);
        return ResultUtil.success(saveStaffNode);
    }
    
    
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java
@@ -24,6 +24,20 @@
public class EnterpriseUtil {
    
    
    public static void main(String[] args) {
//        CheckEnterExist checkEnterNameExist = checkEnterNameExist("黔南云码通数字产业运营有限公司");
//        System.err.println(checkEnterNameExist);
        CreateEnterpriseRequest request = new CreateEnterpriseRequest();
        request.setName("成都喜望科技有限公司");
        request.setNickName("成都喜望");
        request.setIndustry_code("123456");
        request.setMobile("15828353127");
        CreateEnterprise enterprise = EnterpriseUtil.createEnterprise(request);
        System.out.println(enterprise);
    }
    /**
     * 根据社会信用代码判断企业是否已存在
     *
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
New file
@@ -0,0 +1,471 @@
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(QianYunTongProperties.sceneId);
        request.setPartnerId("522700");
        request.setOrderNo("123456");
        request.setCustomerId("11448156");
        request.setDriverId("11448158");
        request.setSupplierShopId("981100006005951");
        request.setServiceType(1);
        String travelItinerary = createTravelItinerary(request);
        System.err.println(travelItinerary);
//        CreateOrderRequest createOrderRequest = new CreateOrderRequest();
//        createOrderRequest.setTreatShopId("");
//        createOrderRequest.setOrderAppId("52270015");
//        createOrderRequest.setScene("TRAFFIC");
//        createOrderRequest.setPartnerId("522700");
//        createOrderRequest.setField1("{\"profitSharing\":\"0\",\"isPromote\":\"0\"}");
//        createOrderRequest.setCharge(new BigDecimal("0.01"));
//        createOrderRequest.setChannelSource("GRJYCXWXXCX");
//        createOrderRequest.setOrderId("");
//        createOrderRequest.setOrderNo("");
//        createOrderRequest.setCustomerId("");
//        OrderInfo orderInfo = tradeOrderCreate(createOrderRequest);
    }
    /**
     * 订单创建
     * @param createOrderRequest
     * @return
     */
    public static OrderInfo tradeOrderCreate(CreateOrderRequest createOrderRequest){
        TradeRequest request = new TradeRequest<CreateOrderRequest>();
        request.setSceneId(QianYunTongProperties.sceneId);
        request.setAppId(QianYunTongProperties.appId);
        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 request
     * @return 行程单ID
     */
    public static String createTravelItinerary(CreateTravelItineraryRequest request){
        //请求路径
        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(QianYunTongProperties.sceneId);
        request.setAppId(QianYunTongProperties.appId);
        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 tradePayOffData
     * @return
     */
    public static PayInfo tradePayOff(TradePayOffData tradePayOffData){
        TradeRequest request = new TradeRequest<TradePayOffData>();
        request.setSceneId(QianYunTongProperties.sceneId);
        request.setAppId(QianYunTongProperties.appId);
        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 tradePayOff1Data
     * @return
     */
    public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data){
        TradeRequest request = new TradeRequest<TradePayOff1Data>();
        request.setSceneId(QianYunTongProperties.sceneId);
        request.setAppId(QianYunTongProperties.appId);
        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 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;
    }
}
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java
@@ -8,41 +8,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,54 @@
    /**
     * 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";
//    /**
//     * 场景编号
//     */
//    String sceneId = "1948289607125864448";
    
    /************************************生产end***********************************/
    
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java
@@ -22,6 +22,12 @@
public class UserUtil {
    
    
    public static void main(String[] args) {
        List<QYTUserInfo> userInfoByPhone = getUserInfoByPhone("15828353127", "981100006005951");
        System.out.println(userInfoByPhone);
    }
    /**
     * 根据手机号码获取人员信息
     *
@@ -72,6 +78,63 @@
        return list;
    }
    
    /**
     * 根据手机号码获取人员信息
     *
     * @param mobile   手机号码
     * @param enterNum 企业编号
     */
    public static List<QYTUserInfo> getUserInfoByPhone(String mobile, String enterNum) {
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/getUserInfoByPhone";
        //私钥文件
        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 = UUID.randomUUID().toString().replaceAll("-", "");
        contentMap.put(SystemParameterNames.getAppKey(), appKey);
        contentMap.put(SystemParameterNames.getMessage_id(), messageId);
        contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName);
        contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
        Map<String, String> map = new HashMap<>();
        map.put("mobile", mobile);
        if (null != enterNum) {
            map.put("enterNum", enterNum);
        }
        contentMap.put("content", JSON.toJSONString(map));
        log.info("【根据手机号码获取人员信息】请求地址:" + url);
        log.info("【根据手机号码获取人员信息】请求参数:" + JSON.toJSONString(contentMap));
        String result = OpenApiClient.sendCommonHttpRequst(url, headers, "GET", skprivateKeyFile, timeStamp, contentMap);
        log.info("【根据手机号码获取人员信息】请求结果:" + result);
        JSONObject jsonObject = JSON.parseObject(result);
        String retCode = jsonObject.getString("retCode");
        if (!"0".equals(retCode)) {
            log.error("【根据手机号码获取人员信息】请求失败:" + result);
            return null;
        }
        JSONObject object = jsonObject.getJSONObject("object");
        String status = object.getString("status");
        if (!"0".equals(status)) {
            log.error("【根据手机号码获取人员信息】失败:" + object.toJSONString());
            return null;
        }
        JSONArray data = object.getJSONArray("data");
        List<QYTUserInfo> list = new ArrayList<>();
        for (int i = 0; i < data.size(); i++) {
            data.getJSONObject(i).getString("enter_code");
            QYTUserInfo userInfo = data.getObject(i, QYTUserInfo.class);
            list.add(userInfo);
        }
        return list;
    }
    
    /**
     * 根据手机号注册用户
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.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:35
 */
@Data
public class GoodsInfo {
    /**
     * 商户号
     */
    private String merchantCode;
    /**
     * 付款商户号
     */
    private String custId;
    /**
     * 付款方名称
     */
    private String custName;
    /**
     * 分账标识。0:不分账,1:分账
     */
    private String profitSharing;
}
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.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:13
 */
@Data
public class GoodsInfoRequest {
    /**
     * 企业ID(补偿场景新创建的订单支付传备用金企业ID)
     */
    private String id;
    /**
     * 子商户微信appId(证联预下单支付必填)
     */
    private String subAppId;
    /**
     * 付款人的openId(证联预下单支付必填)
     */
    private String subOpenId;
    /**
     * 分账标识。0:不分账,1:分账
     */
    private String profitSharing;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}
UserQYTTravel/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;
}