From d5b1b7d2149c619404b3f02cb5af0d6d992a66ba Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 09 十月 2025 16:49:16 +0800
Subject: [PATCH] 集成中台及正联功能

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/CallbackUtil.java                     |   47 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java                        |  250 ++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java                      |  327 +++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java       |   42 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java                     |   19 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/AddAccountInfoRequest.java    |   45 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java           |   53 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/QianYunTongConfig.java              |    3 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderRefund.java         |   15 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java      |   49 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/TCompany.java                                  |  760 ++++++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java  |   39 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java            |   27 
 user/guns-admin/src/main/resources/application-dev.yml                                                                          |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java                       |   31 
 management/guns-admin/src/main/java/com/stylefeng/guns/core/beetl/ShiroExtUtil.java                                             |  219 ++
 zuul/src/main/java/com/sinata/zuul/ZuulApplication.java                                                                         |    4 
 zuul/src/main/resources/application-dev.yml                                                                                     |    2 
 driver/guns-admin/src/main/resources/application-dev.yml                                                                        |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java         |   23 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/TCompanyMapper.java                              |   77 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZhengLianUtil.java                    |  208 ++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java            |   27 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java |   49 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java             |   19 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java  |   19 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java                            |  272 ++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java          |   99 +
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java                  |   31 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java                   |   42 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/TokenRequest.java               |   46 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZhengLianConfig.java                  |   90 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java              |   39 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java        |   35 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java               |   64 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/OpenAccountCallbackRequest.java |   11 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java |   47 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java              |   62 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/MessageBody.java                |   23 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java            |   53 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java                  |    3 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/ZLUserInfo.java                 |   37 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/SMSUtil.java                             |   68 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java                   |    3 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java                   |   31 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/TokenUtil.java                        |   91 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java                |   33 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java                           |  830 ++++++++
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZLHttpClientUtil.java                 |  129 +
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java  |   43 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EnterpriseUtil.java                 |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java        |   45 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java               |   66 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java                      |   27 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/TCompanyMapper.xml                       |  635 ++++++
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/RefundInfoRequest.java        |   19 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java                     |   35 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java                |   53 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/TradeTerminalInfo.java          |   27 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java     |   19 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LoginUser.java                                    |   43 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java              |   19 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefund.java              |   15 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java  |   42 
 eureka/src/main/resources/application-dev.yml                                                                                   |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UUIDUtil.java                                        |   78 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java       |   19 
 67 files changed, 5,676 insertions(+), 12 deletions(-)

diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/TCompanyMapper.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/TCompanyMapper.java
new file mode 100644
index 0000000..a4cdcba
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/TCompanyMapper.java
@@ -0,0 +1,77 @@
+package com.supersavedriving.driver.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.supersavedriving.driver.modular.system.model.TCompany;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 公司信息表 Mapper 接口
+ * </p>
+ *
+ * @author 吕雪
+ * @since 2020-06-06
+ */
+public interface TCompanyMapper extends BaseMapper<TCompany> {
+
+    /**
+     * 根据条件查询分公司列表
+     * @return
+     */
+    List<Map<String,Object>> getCompanyList(@Param("page") Page<Map<String, Object>> page,
+                                             @Param("beginTime") String beginTime,
+                                             @Param("endTime") String endTime,
+                                             @Param("name") String name,
+                                             @Param("principalName") String principalName,
+                                             @Param("principalPhone") String principalPhone,
+                                             @Param("adminName") String adminName,
+                                             @Param("adminPhone") String adminPhone,
+                                             @Param("serviceStr") String serviceStr,
+                                             @Param("state") Integer state);
+
+    /**
+     * 根据公司ID获取公司经营区域
+     * @param id
+     * @return
+     */
+    List<Map<String,Object>> getCompanyScopeById(@Param("id") Integer id);
+
+    /**
+     * 根据条件查询加盟商列表
+     * @return
+     */
+    List<Map<String,Object>> getFranchiseeList(@Param("page") Page<Map<String, Object>> page,
+                                            @Param("beginTime") String beginTime,
+                                            @Param("endTime") String endTime,
+                                            @Param("name") String name,
+                                            @Param("account") String account,
+                                            @Param("principalName") String principalName,
+                                            @Param("principalPhone") String principalPhone,
+                                            @Param("serviceStr") String serviceStr,
+                                            @Param("state") Integer state,
+                                            @Param("roleType") Integer roleType,
+                                            @Param("nowUserId") Integer nowUserId);
+
+
+    /**
+     * 获取运营汇总数据
+     * @param type
+     * @param start
+     * @param end
+     * @param companyId
+     * @param offset
+     * @param limit
+     * @return
+     */
+    List<Map<String, Object>> queryOperationalData(@Param("type") Integer type, @Param("start") String start,
+                                                   @Param("end") String end, @Param("companyId") Integer companyId,
+                                                   @Param("offset") Integer offset, @Param("limit") Integer limit);
+
+
+    int queryOperationalDataCount(@Param("type") Integer type, @Param("start") String start,
+                                  @Param("end") String end, @Param("companyId") Integer companyId);
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/TCompanyMapper.xml b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/TCompanyMapper.xml
new file mode 100644
index 0000000..fc17864
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/TCompanyMapper.xml
@@ -0,0 +1,635 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.supersavedriving.driver.modular.system.dao.TCompanyMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.supersavedriving.driver.modular.system.model.TCompany">
+        <id column="id" property="id" />
+        <result column="isSpe" property="isSpe" />
+        <result column="isTaxi" property="isTaxi" />
+        <result column="isCross" property="isCross" />
+        <result column="isCrossLogistics" property="isCrossLogistics" />
+        <result column="isSameLogistics" property="isSameLogistics" />
+        <result column="isCharter" property="isCharter" />
+        <result column="isSpeFixedOrProportional" property="isSpeFixedOrProportional" />
+        <result column="isTaxiFixedOrProportional" property="isTaxiFixedOrProportional" />
+        <result column="isCrossLogisticsFixedOrProportional" property="isCrossLogisticsFixedOrProportional" />
+        <result column="isSameLogisticsFixedOrProportional" property="isSameLogisticsFixedOrProportional" />
+        <result column="speMoney" property="speMoney" />
+        <result column="taxiMoney" property="taxiMoney" />
+        <result column="crossLogisticsMoney" property="crossLogisticsMoney" />
+        <result column="sameLogisticsMoney" property="sameLogisticsMoney" />
+        <result column="isNeedFerry" property="isNeedFerry" />
+        <result column="name" property="name" />
+        <result column="type" property="type" />
+        <result column="superiorId" property="superiorId" />
+        <result column="principalName" property="principalName" />
+        <result column="principalPhone" property="principalPhone" />
+        <result column="adminName" property="adminName" />
+        <result column="adminPhone" property="adminPhone" />
+        <result column="urgentPhoen" property="urgentPhoen" />
+        <result column="setupTime" property="setupTime" />
+        <result column="identifier" property="identifier" />
+        <result column="addressCode" property="addressCode" />
+        <result column="businessScope" property="businessScope" />
+        <result column="contactAddress" property="contactAddress" />
+        <result column="documentAddress" property="documentAddress" />
+        <result column="economicType" property="economicType" />
+        <result column="regCapital" property="regCapital" />
+        <result column="legalName" property="legalName" />
+        <result column="legalId" property="legalId" />
+        <result column="legalPhone" property="legalPhone" />
+        <result column="legalPhotoUrl" property="legalPhotoUrl" />
+        <result column="licensingAgency" property="licensingAgency" />
+        <result column="licenseTime" property="licenseTime" />
+        <result column="licenseStartTime" property="licenseStartTime" />
+        <result column="licenseEndTime" property="licenseEndTime" />
+        <result column="licenseNumber" property="licenseNumber" />
+        <result column="carNum" property="carNum" />
+        <result column="driverNum" property="driverNum" />
+        <result column="mac" property="mac" />
+        <result column="state" property="state" />
+        <result column="flag" property="flag" />
+        <result column="upload" property="upload" />
+        <result column="insertTime" property="insertTime" />
+        <result column="detailAddress" property="detailAddress" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, isSpe, isTaxi, isCross, isCrossLogistics, isSameLogistics, isCharter, isSpeFixedOrProportional, isTaxiFixedOrProportional, isCrossLogisticsFixedOrProportional, isSameLogisticsFixedOrProportional, speMoney, taxiMoney, crossLogisticsMoney, sameLogisticsMoney, isNeedFerry, name, type, superiorId, principalName, principalPhone, adminName, adminPhone, urgentPhoen, setupTime, identifier, addressCode, businessScope, contactAddress, documentAddress, economicType, regCapital, legalName, legalId, legalPhone, legalPhotoUrl, licensingAgency, licenseTime, licenseStartTime, licenseEndTime, licenseNumber, carNum, driverNum, mac, state, flag, upload, insertTime, detailAddress
+    </sql>
+
+
+    <!--根据条件查询分公司列表-->
+    <select id="getCompanyList" resultType="map" parameterType="com.baomidou.mybatisplus.plugins.Page">
+        SELECT * FROM (SELECT ui.account,IFNULL(ci.num,0) as franchiseeNum,IFNULL(ca.num,0) as carNumber,IFNULL(di.num,0) as driverNumber,
+        CONCAT(case when cc.isSpe = 1 then '专车,' else '' end,
+        case when cc.isTaxi = 1 then '出租车,' else '' end,
+        case when cc.isCross = 1 then '跨城出行,' else '' end,
+        case when cc.isCrossLogistics = 1 then '跨城小件物流,' else '' end,
+        case when cc.isSameLogistics = 1 then '同城小件物流,' else '' end,
+        case when cc.isCharter = 1 then '包车,' else '' end) as serverStr,
+        cc.* FROM t_company as cc
+        LEFT JOIN (SELECT * FROM sys_user where roleType = 2) as ui on ui.objectId = cc.id
+        LEFT JOIN (SELECT COUNT(id) as num,superiorId FROM t_company where type = 3 and flag != 3 GROUP BY superiorId) as ci on ci.superiorId = cc.id
+        LEFT JOIN (SELECT COUNT(id) as num,companyId FROM t_car where state = 1 GROUP BY companyId) as ca on ca.companyId = cc.id
+        LEFT JOIN (SELECT COUNT(id) as num,companyId FROM t_driver where flag != 3 GROUP BY companyId) as di on di.companyId = cc.id
+        ) as o
+        <where>
+            o.type = 2 and o.flag != 3
+            <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
+                AND (o.insertTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
+            </if>
+            <if test="name != null and name != ''">
+                and o.name  LIKE CONCAT('%',#{name},'%')
+            </if>
+            <if test="principalName != null and principalName != ''">
+                and o.principalName  LIKE CONCAT('%',#{principalName},'%')
+            </if>
+            <if test="principalPhone != null and principalPhone != ''">
+                and o.principalPhone  LIKE CONCAT('%',#{principalPhone},'%')
+            </if>
+            <if test="adminName != null and adminName != ''">
+                and o.adminName  LIKE CONCAT('%',#{adminName},'%')
+            </if>
+            <if test="adminPhone != null and adminPhone != ''">
+                and o.adminPhone  LIKE CONCAT('%',#{adminPhone},'%')
+            </if>
+            <if test="serviceStr != null and serviceStr != ''">
+                and o.serverStr  LIKE CONCAT('%',#{serviceStr},'%')
+            </if>
+            <if test="state != null and state != '' and state == 1">
+                and o.state  = 1
+            </if>
+            <if test="state != null and state != '' and state == 2">
+                and o.state  = 0
+            </if>
+        </where>
+        order by o.id desc
+    </select>
+
+    <!--根据公司ID获取公司经营区域-->
+    <select id="getCompanyScopeById" resultType="map">
+        SELECT CONCAT(case when r1.`name` is not null then r1.`name` else '' end,
+        case when r2.`name` is not null then r2.`name` else '' end,
+        case when r3.`name` is not null then r3.`name` else '' end) as value,cc.* FROM t_company_city as cc
+        LEFT JOIN t_region as r1 on r1.code = cc.provinceCode
+        LEFT JOIN t_region as r2 on r2.code = cc.cityCode
+        LEFT JOIN t_region as r3 on r3.code = cc.areaCode
+        where cc.companyId = #{id} and cc.state = 1 order by id asc
+    </select>
+
+    <!--根据条件查询加盟商列表-->
+    <select id="getFranchiseeList" resultType="map" parameterType="com.baomidou.mybatisplus.plugins.Page">
+        SELECT * FROM (SELECT ui.account,ci.`name` as companyName,IFNULL(ca.num,0) as carNumber,IFNULL(di.num,0) as driverNumber,
+        CONCAT(case when cc.isSpe = 1 then '专车,' else '' end,
+        case when cc.isTaxi = 1 then '出租车,' else '' end,
+        case when cc.isCross = 1 then '跨城出行,' else '' end,
+        case when cc.isCrossLogistics = 1 then '跨城小件物流,' else '' end,
+        case when cc.isSameLogistics = 1 then '同城小件物流,' else '' end,
+        case when cc.isCharter = 1 then '包车,' else '' end) as serverStr,
+        cc.* FROM t_company as cc
+        LEFT JOIN (SELECT * FROM sys_user where roleType = 3) as ui on ui.objectId = cc.id
+        LEFT JOIN (select * from t_company where type = 2 and flag != 3) as ci on ci.id = cc.superiorId
+        LEFT JOIN (SELECT COUNT(id) as num,franchiseeId FROM t_car where state = 1 GROUP BY franchiseeId) as ca on ca.franchiseeId = cc.id
+        LEFT JOIN (SELECT COUNT(id) as num,franchiseeId FROM t_driver where flag != 3 GROUP BY franchiseeId) as di on di.franchiseeId = cc.id) as o
+        <where>
+            o.type = 3 and o.flag != 3
+            <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
+                AND (o.insertTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
+            </if>
+            <if test="name != null and name != ''">
+                and o.name  LIKE CONCAT('%',#{name},'%')
+            </if>
+            <if test="account != null and account != ''">
+                and o.account  LIKE CONCAT('%',#{account},'%')
+            </if>
+            <if test="principalName != null and principalName != ''">
+                and o.principalName  LIKE CONCAT('%',#{principalName},'%')
+            </if>
+            <if test="principalPhone != null and principalPhone != ''">
+                and o.principalPhone  LIKE CONCAT('%',#{principalPhone},'%')
+            </if>
+            <if test="serviceStr != null and serviceStr != ''">
+                and o.serverStr  LIKE CONCAT('%',#{serviceStr},'%')
+            </if>
+            <if test="state != null and state != '' and state == 1">
+                and o.state  = 1
+            </if>
+            <if test="state != null and state != '' and state == 2">
+                and o.state  = 0
+            </if>
+            <if test="roleType != null and roleType != '' and roleType == 2">
+                and o.superiorId = #{nowUserId}
+            </if>
+        </where>
+        order by o.id desc
+    </select>
+
+
+    <select id="queryOperationalData" resultType="map">
+
+        select
+        *,
+        ROUND(if(orderNum != 0, cancelNum / orderNum, 0) * 100, 2) as cancelProportion,
+        (onlinePay + offlinePay) as total,
+        ROUND((onlinePay / (onlinePay + offlinePay)) * 100, 2) as payProportion
+        from (
+            select
+            aa.time,
+            sum(aa.register) as register,
+            sum(aa.`online`) as `online`,
+            sum(aa.orderNum) as orderNum,
+            sum(aa.cancelNum) as cancelNum,
+            sum(aa.onlinePay) as onlinePay,
+            sum(aa.offlinePay) as offlinePay,
+            sum(aa.money) as money,
+            sum(aa.complaint) as complaint
+            from (
+            select DATE_FORMAT(insertTime, '%Y-%m-%d') as time, count(id) as register, 0 as `online`, 0 as orderNum, 0 as cancelNum, 0 as onlinePay, 0 as offlinePay, 0 as money, 0 as complaint
+            from t_user
+            where flag != 3 and state = 1
+            <if test="null != companyId">
+                and companyId = #{companyId}
+            </if>
+            <if test="null != start and '' != start and null != end and '' != end">
+                and DATE_FORMAT(insertTime, '%Y-%m-%d') between #{start} and #{end}
+            </if>
+            group by DATE_FORMAT(insertTime, '%Y-%m-%d')
+            union all
+            select DATE_FORMAT(a.insertTime, '%Y-%m-%d') as time, 0, count(a.id) as `online`, 0 as orderNum, 0 as cancelNum, 0 as onlinePay, 0 as offlinePay, 0 as money, 0 as complaint
+            from t_driver_online a
+            left join t_driver b on (a.driverId = b.id)
+            where 1 = 1
+            <if test="null != companyId">
+                and if(b.franchiseeId is null or b.franchiseeId = 0, b.companyId = #{companyId}, b.franchiseeId = #{companyId})
+            </if>
+            <if test="null != start and '' != start and null != end and '' != end">
+                and DATE_FORMAT(a.insertTime, '%Y-%m-%d') between #{start} and #{end}
+            </if>
+            group by DATE_FORMAT(a.insertTime, '%Y-%m-%d')
+            union all
+            <if test="1 == type">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, count(id), 0, 0, 0, 0, 0 from t_order_private_car where isDelete = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="2 == type">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, count(id), 0, 0, 0, 0, 0 from t_order_taxi where isDelete = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="3 == type">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, count(id), 0, 0, 0, 0, 0 from t_order_cross_city where isDelete = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="4 == type">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, count(id), 0, 0, 0, 0, 0 from t_order_logistics where isDelete = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 1">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, count(id), 0, 0, 0, 0 from t_order_private_car where isDelete = 1 and state in (10, 12)
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 2">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, count(id), 0, 0, 0, 0 from t_order_taxi where isDelete = 1 and state in (10, 12)
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 3">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, count(id), 0, 0, 0, 0 from t_order_cross_city where isDelete = 1 and state in (10, 12)
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 4">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, count(id), 0, 0, 0, 0 from t_order_logistics where isDelete = 1 and state in (10, 12)
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 1">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(payMoney), 0 from t_order_private_car where isDelete = 1 and payManner = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 2">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(payMoney), 0 from t_order_taxi where isDelete = 1 and payManner = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 3">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(payMoney), 0 from t_order_cross_city where isDelete = 1 and payManner = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 4">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(payMoney), 0 from t_order_logistics where isDelete = 1 and payManner = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 1">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, 0, count(id), 0, 0 from t_order_private_car where isDelete = 1 and payManner = 2
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 2">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, 0, count(id), 0, 0 from t_order_taxi where isDelete = 1 and payManner = 2
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 3">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, 0, count(id), 0, 0 from t_order_cross_city where isDelete = 1 and payManner = 2
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 4">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, 0, count(id), 0, 0 from t_order_logistics where isDelete = 1 and payManner = 2
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            select DATE_FORMAT(a.insert_time, '%Y-%m-%d'), 0, 0, 0, 0, 0, 0, 0, count(a.id) from t_complaint a
+            left join t_driver b on (a.driverId = b.id)
+            where 1 = 1
+            <if test="null != companyId">
+                and if(b.franchiseeId is null or b.franchiseeId = 0, b.companyId = #{companyId}, b.franchiseeId = #{companyId})
+            </if>
+            <if test="null != start and '' != start and null != end and '' != end">
+                and DATE_FORMAT(a.insert_time, '%Y-%m-%d') between #{start} and #{end}
+            </if>
+            group by DATE_FORMAT(a.insert_time, '%Y-%m-%d')
+            ) as aa group by aa.time
+        ) as da order by `time` desc
+        <if test="null != offset and null != limit">
+            limit #{offset}, #{limit}
+        </if>
+    </select>
+
+
+
+    <select id="queryOperationalDataCount" resultType="int">
+
+        select
+        count(`time`)
+        from (
+            select
+            aa.time,
+            sum(aa.register) as register,
+            sum(aa.`online`) as `online`,
+            sum(aa.orderNum) as orderNum,
+            sum(aa.cancelNum) as cancelNum,
+            sum(aa.onlinePay) as onlinePay,
+            sum(aa.offlinePay) as offlinePay,
+            sum(aa.money) as money,
+            sum(aa.complaint) as complaint
+            from (
+            select DATE_FORMAT(insertTime, '%Y-%m-%d') as time, count(id) as register, 0 as `online`, 0 as orderNum, 0 as cancelNum, 0 as onlinePay, 0 as offlinePay, 0 as money, 0 as complaint
+            from t_user
+            where flag != 3 and state = 1
+            <if test="null != companyId">
+                and companyId = #{companyId}
+            </if>
+            <if test="null != start and '' != start and null != end and '' != end">
+                and DATE_FORMAT(insertTime, '%Y-%m-%d') between #{start} and #{end}
+            </if>
+            group by DATE_FORMAT(insertTime, '%Y-%m-%d')
+            union all
+            select DATE_FORMAT(a.insertTime, '%Y-%m-%d') as time, 0, count(a.id) as `online`, 0 as orderNum, 0 as cancelNum, 0 as onlinePay, 0 as offlinePay, 0 as money, 0 as complaint from t_driver_online a
+            left join t_driver b on (a.driverId = b.id)
+            where 1 = 1
+            <if test="null != companyId">
+                and if(b.franchiseeId is null or b.franchiseeId = 0, b.companyId = #{companyId}, b.franchiseeId = #{companyId})
+            </if>
+            <if test="null != start and '' != start and null != end and '' != end">
+                and DATE_FORMAT(a.insertTime, '%Y-%m-%d') between #{start} and #{end}
+            </if>
+            group by DATE_FORMAT(a.insertTime, '%Y-%m-%d')
+            union all
+            <if test="1 == type">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, count(id), 0, 0, 0, 0, 0 from t_order_private_car where isDelete = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="2 == type">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, count(id), 0, 0, 0, 0, 0 from t_order_taxi where isDelete = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="3 == type">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, count(id), 0, 0, 0, 0, 0 from t_order_cross_city where isDelete = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="4 == type">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, count(id), 0, 0, 0, 0, 0 from t_order_logistics where isDelete = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 1">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, count(id), 0, 0, 0, 0 from t_order_private_car where isDelete = 1 and state in (10, 12)
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 2">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, count(id), 0, 0, 0, 0 from t_order_taxi where isDelete = 1 and state in (10, 12)
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 3">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, count(id), 0, 0, 0, 0 from t_order_cross_city where isDelete = 1 and state in (10, 12)
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 4">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, count(id), 0, 0, 0, 0 from t_order_logistics where isDelete = 1 and state in (10, 12)
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 1">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(payMoney), 0 from t_order_private_car where isDelete = 1 and payManner = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 2">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(payMoney), 0 from t_order_taxi where isDelete = 1 and payManner = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 3">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(payMoney), 0 from t_order_cross_city where isDelete = 1 and payManner = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 4">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, count(id), 0, sum(payMoney), 0 from t_order_logistics where isDelete = 1 and payManner = 1
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 1">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, 0, count(id), 0, 0 from t_order_private_car where isDelete = 1 and payManner = 2
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 2">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, 0, count(id), 0, 0 from t_order_taxi where isDelete = 1 and payManner = 2
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 3">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, 0, count(id), 0, 0 from t_order_cross_city where isDelete = 1 and payManner = 2
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            <if test="type == 4">
+                select DATE_FORMAT(travelTime, '%Y-%m-%d'), 0, 0, 0, 0, 0, count(id), 0, 0 from t_order_logistics where isDelete = 1 and payManner = 2
+                <if test="null != companyId">
+                    and companyId = #{companyId}
+                </if>
+                <if test="null != start and '' != start and null != end and '' != end">
+                    and DATE_FORMAT(travelTime, '%Y-%m-%d') between #{start} and #{end}
+                </if>
+                group by DATE_FORMAT(travelTime, '%Y-%m-%d')
+                union all
+            </if>
+            select DATE_FORMAT(a.insert_time, '%Y-%m-%d'), 0, 0, 0, 0, 0, 0, 0, count(a.id) from t_complaint a
+            left join t_driver b on (a.driverId = b.id)
+            where 1 = 1
+            <if test="null != companyId">
+                and if(b.franchiseeId is null or b.franchiseeId = 0, b.companyId = #{companyId}, b.franchiseeId = #{companyId})
+            </if>
+            <if test="null != start and '' != start and null != end and '' != end">
+                and DATE_FORMAT(a.insert_time, '%Y-%m-%d') between #{start} and #{end}
+            </if>
+            group by DATE_FORMAT(a.insert_time, '%Y-%m-%d')
+            ) as aa group by aa.time
+        ) as da order by `time` desc
+    </select>
+</mapper>
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/TCompany.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/TCompany.java
new file mode 100644
index 0000000..ef92a53
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/TCompany.java
@@ -0,0 +1,760 @@
+package com.supersavedriving.driver.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 公司信息表
+ * </p>
+ *
+ * @author 吕雪
+ * @since 2020-06-06
+ */
+@TableName("t_company")
+public class TCompany extends Model<TCompany> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 是否经营专车(1=是,2=否)
+     */
+    private Integer isSpe;
+    /**
+     * 是否经营出租车(1=是,2=否)
+     */
+    private Integer isTaxi;
+    /**
+     * 是否经营跨城(1=是,2=否)
+     */
+    private Integer isCross;
+    /**
+     * 是否经营跨城物流(1=是,2=否)
+     */
+    private Integer isCrossLogistics;
+    /**
+     * 是否经营同城物流(1=是,2=否)
+     */
+    private Integer isSameLogistics;
+    /**
+     * 是否经营包车(1=是,2=否)
+     */
+    private Integer isCharter;
+    /**
+     * 专车提成方式(1=比例,2=固定)
+     */
+    private Integer isSpeFixedOrProportional;
+    /**
+     * 出租车提成方式(1=比例,2=固定)
+     */
+    private Integer isTaxiFixedOrProportional;
+    /**
+     * 跨城物流提成方式(1=比例,2=固定)
+     */
+    private Integer isCrossLogisticsFixedOrProportional;
+    /**
+     * 同城物流提成方式(1=比例,2=固定)
+     */
+    private Integer isSameLogisticsFixedOrProportional;
+    /**
+     * 专车提成数值
+     */
+    private BigDecimal speMoney;
+    /**
+     * 出租车提成数值
+     */
+    private BigDecimal taxiMoney;
+    /**
+     * 跨城物流提成数值
+     */
+    private BigDecimal crossLogisticsMoney;
+    /**
+     * 同城物流
+     */
+    private BigDecimal sameLogisticsMoney;
+    /**
+     * 是否需要摆渡车(1=是,2=否)
+     */
+    private Integer isNeedFerry;
+    /**
+     * 企业名称
+     */
+    private String name;
+    /**
+     * 企业类型(1:平台,2:分公司,3:加盟商)
+     */
+    private Integer type;
+    /**
+     * 上级企业id
+     */
+    private Integer superiorId;
+    /**
+     * 负责人姓名
+     */
+    private String principalName;
+    /**
+     * 负责人电话
+     */
+    private String principalPhone;
+    /**
+     * 管理员姓名
+     */
+    private String adminName;
+    /**
+     * 管理员电话
+     */
+    private String adminPhone;
+    /**
+     * 紧急联系电话
+     */
+    private String urgentPhoen;
+    /**
+     * 服务机构设立日期
+     */
+    @DateTimeFormat
+    private Date setupTime;
+    /**
+     * 统一社会信用代码
+     */
+    private String identifier;
+    /**
+     * 注册地行政区划分代码
+     */
+    private String addressCode;
+    /**
+     * 经营范围
+     */
+    private String businessScope;
+    /**
+     * 通信地址
+     */
+    private String contactAddress;
+    /**
+     * 行政文书送达地址
+     */
+    private String documentAddress;
+    /**
+     * 经营业户经济类型
+     */
+    private String economicType;
+    /**
+     * 注册资本
+     */
+    private String regCapital;
+    /**
+     * 法人代表姓名
+     */
+    private String legalName;
+    /**
+     * 法人代表身份证号
+     */
+    private String legalId;
+    /**
+     * 法人代表电话
+     */
+    private String legalPhone;
+    /**
+     * 法人代表身份证扫描件文件地址
+     */
+    private String legalPhotoUrl;
+    /**
+     * 经营许可证发证机构
+     */
+    private String licensingAgency;
+    /**
+     * 经营许可证初次发证日期
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date licenseTime;
+    /**
+     * 经营许可证有效期起
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date licenseStartTime;
+    /**
+     * 经营许可证有效期止
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date licenseEndTime;
+    /**
+     * 网络预约车经营许可证号
+     */
+    private String licenseNumber;
+    /**
+     * 注册网络预约车辆数
+     */
+    private Integer carNum;
+    /**
+     * 注册网络预约车驾驶员数量
+     */
+    private Integer driverNum;
+    /**
+     * 登录MAC地址(多个以逗号分隔)
+     */
+    private String mac;
+    /**
+     * 当前状态(0:正常,1:禁用)
+     */
+    private Integer state;
+    /**
+     * 操作标识(1:新增,2:修改,3:删除)
+     */
+    private String flag;
+    /**
+     * 上传标识(1:未上传,2:已上传)
+     */
+    private String upload;
+    /**
+     * 创建时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date insertTime;
+    /**
+     * 具体地址
+     */
+    private String detailAddress;
+    /**
+     * 分公司代码
+     */
+    private String code;
+    /**
+     * 分公司区划代码
+     */
+    private String scopeCode;
+    /**
+     * 经营区域
+     */
+    private String serviceScope;
+    //身份证正面
+    private String idCardPositive;
+    //身份证反面
+    private String idCardReverse;
+    /**
+     * 中台企业编号
+     */
+    private String enterCode;
+    /**
+     * 中台新增标识(0=否,1=是)
+     */
+    private Integer enterNew;
+
+    public String getIdCardPositive() {
+        return idCardPositive;
+    }
+
+    public void setIdCardPositive(String idCardPositive) {
+        this.idCardPositive = idCardPositive;
+    }
+
+    public String getIdCardReverse() {
+        return idCardReverse;
+    }
+
+    public void setIdCardReverse(String idCardReverse) {
+        this.idCardReverse = idCardReverse;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getScopeCode() {
+        return scopeCode;
+    }
+
+    public void setScopeCode(String scopeCode) {
+        this.scopeCode = scopeCode;
+    }
+
+    public String getServiceScope() {
+        return serviceScope;
+    }
+
+    public void setServiceScope(String serviceScope) {
+        this.serviceScope = serviceScope;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getIsSpe() {
+        return isSpe;
+    }
+
+    public void setIsSpe(Integer isSpe) {
+        this.isSpe = isSpe;
+    }
+
+    public Integer getIsTaxi() {
+        return isTaxi;
+    }
+
+    public void setIsTaxi(Integer isTaxi) {
+        this.isTaxi = isTaxi;
+    }
+
+    public Integer getIsCross() {
+        return isCross;
+    }
+
+    public void setIsCross(Integer isCross) {
+        this.isCross = isCross;
+    }
+
+    public Integer getIsCrossLogistics() {
+        return isCrossLogistics;
+    }
+
+    public void setIsCrossLogistics(Integer isCrossLogistics) {
+        this.isCrossLogistics = isCrossLogistics;
+    }
+
+    public Integer getIsSameLogistics() {
+        return isSameLogistics;
+    }
+
+    public void setIsSameLogistics(Integer isSameLogistics) {
+        this.isSameLogistics = isSameLogistics;
+    }
+
+    public Integer getIsCharter() {
+        return isCharter;
+    }
+
+    public void setIsCharter(Integer isCharter) {
+        this.isCharter = isCharter;
+    }
+
+    public Integer getIsSpeFixedOrProportional() {
+        return isSpeFixedOrProportional;
+    }
+
+    public void setIsSpeFixedOrProportional(Integer isSpeFixedOrProportional) {
+        this.isSpeFixedOrProportional = isSpeFixedOrProportional;
+    }
+
+    public Integer getIsTaxiFixedOrProportional() {
+        return isTaxiFixedOrProportional;
+    }
+
+    public void setIsTaxiFixedOrProportional(Integer isTaxiFixedOrProportional) {
+        this.isTaxiFixedOrProportional = isTaxiFixedOrProportional;
+    }
+
+    public Integer getIsCrossLogisticsFixedOrProportional() {
+        return isCrossLogisticsFixedOrProportional;
+    }
+
+    public void setIsCrossLogisticsFixedOrProportional(Integer isCrossLogisticsFixedOrProportional) {
+        this.isCrossLogisticsFixedOrProportional = isCrossLogisticsFixedOrProportional;
+    }
+
+    public Integer getIsSameLogisticsFixedOrProportional() {
+        return isSameLogisticsFixedOrProportional;
+    }
+
+    public void setIsSameLogisticsFixedOrProportional(Integer isSameLogisticsFixedOrProportional) {
+        this.isSameLogisticsFixedOrProportional = isSameLogisticsFixedOrProportional;
+    }
+
+    public BigDecimal getSpeMoney() {
+        return speMoney;
+    }
+
+    public void setSpeMoney(BigDecimal speMoney) {
+        this.speMoney = speMoney;
+    }
+
+    public BigDecimal getTaxiMoney() {
+        return taxiMoney;
+    }
+
+    public void setTaxiMoney(BigDecimal taxiMoney) {
+        this.taxiMoney = taxiMoney;
+    }
+
+    public BigDecimal getCrossLogisticsMoney() {
+        return crossLogisticsMoney;
+    }
+
+    public void setCrossLogisticsMoney(BigDecimal crossLogisticsMoney) {
+        this.crossLogisticsMoney = crossLogisticsMoney;
+    }
+
+    public BigDecimal getSameLogisticsMoney() {
+        return sameLogisticsMoney;
+    }
+
+    public void setSameLogisticsMoney(BigDecimal sameLogisticsMoney) {
+        this.sameLogisticsMoney = sameLogisticsMoney;
+    }
+
+    public Integer getIsNeedFerry() {
+        return isNeedFerry;
+    }
+
+    public void setIsNeedFerry(Integer isNeedFerry) {
+        this.isNeedFerry = isNeedFerry;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getSuperiorId() {
+        return superiorId;
+    }
+
+    public void setSuperiorId(Integer superiorId) {
+        this.superiorId = superiorId;
+    }
+
+    public String getPrincipalName() {
+        return principalName;
+    }
+
+    public void setPrincipalName(String principalName) {
+        this.principalName = principalName;
+    }
+
+    public String getPrincipalPhone() {
+        return principalPhone;
+    }
+
+    public void setPrincipalPhone(String principalPhone) {
+        this.principalPhone = principalPhone;
+    }
+
+    public String getAdminName() {
+        return adminName;
+    }
+
+    public void setAdminName(String adminName) {
+        this.adminName = adminName;
+    }
+
+    public String getAdminPhone() {
+        return adminPhone;
+    }
+
+    public void setAdminPhone(String adminPhone) {
+        this.adminPhone = adminPhone;
+    }
+
+    public String getUrgentPhoen() {
+        return urgentPhoen;
+    }
+
+    public void setUrgentPhoen(String urgentPhoen) {
+        this.urgentPhoen = urgentPhoen;
+    }
+
+    public Date getSetupTime() {
+        return setupTime;
+    }
+
+    public void setSetupTime(Date setupTime) {
+        this.setupTime = setupTime;
+    }
+
+    public String getIdentifier() {
+        return identifier;
+    }
+
+    public void setIdentifier(String identifier) {
+        this.identifier = identifier;
+    }
+
+    public String getAddressCode() {
+        return addressCode;
+    }
+
+    public void setAddressCode(String addressCode) {
+        this.addressCode = addressCode;
+    }
+
+    public String getBusinessScope() {
+        return businessScope;
+    }
+
+    public void setBusinessScope(String businessScope) {
+        this.businessScope = businessScope;
+    }
+
+    public String getContactAddress() {
+        return contactAddress;
+    }
+
+    public void setContactAddress(String contactAddress) {
+        this.contactAddress = contactAddress;
+    }
+
+    public String getDocumentAddress() {
+        return documentAddress;
+    }
+
+    public void setDocumentAddress(String documentAddress) {
+        this.documentAddress = documentAddress;
+    }
+
+    public String getEconomicType() {
+        return economicType;
+    }
+
+    public void setEconomicType(String economicType) {
+        this.economicType = economicType;
+    }
+
+    public String getRegCapital() {
+        return regCapital;
+    }
+
+    public void setRegCapital(String regCapital) {
+        this.regCapital = regCapital;
+    }
+
+    public String getLegalName() {
+        return legalName;
+    }
+
+    public void setLegalName(String legalName) {
+        this.legalName = legalName;
+    }
+
+    public String getLegalId() {
+        return legalId;
+    }
+
+    public void setLegalId(String legalId) {
+        this.legalId = legalId;
+    }
+
+    public String getLegalPhone() {
+        return legalPhone;
+    }
+
+    public void setLegalPhone(String legalPhone) {
+        this.legalPhone = legalPhone;
+    }
+
+    public String getLegalPhotoUrl() {
+        return legalPhotoUrl;
+    }
+
+    public void setLegalPhotoUrl(String legalPhotoUrl) {
+        this.legalPhotoUrl = legalPhotoUrl;
+    }
+
+    public String getLicensingAgency() {
+        return licensingAgency;
+    }
+
+    public void setLicensingAgency(String licensingAgency) {
+        this.licensingAgency = licensingAgency;
+    }
+
+    public Date getLicenseTime() {
+        return licenseTime;
+    }
+
+    public void setLicenseTime(Date licenseTime) {
+        this.licenseTime = licenseTime;
+    }
+
+    public Date getLicenseStartTime() {
+        return licenseStartTime;
+    }
+
+    public void setLicenseStartTime(Date licenseStartTime) {
+        this.licenseStartTime = licenseStartTime;
+    }
+
+    public Date getLicenseEndTime() {
+        return licenseEndTime;
+    }
+
+    public void setLicenseEndTime(Date licenseEndTime) {
+        this.licenseEndTime = licenseEndTime;
+    }
+
+    public String getLicenseNumber() {
+        return licenseNumber;
+    }
+
+    public void setLicenseNumber(String licenseNumber) {
+        this.licenseNumber = licenseNumber;
+    }
+
+    public Integer getCarNum() {
+        return carNum;
+    }
+
+    public void setCarNum(Integer carNum) {
+        this.carNum = carNum;
+    }
+
+    public Integer getDriverNum() {
+        return driverNum;
+    }
+
+    public void setDriverNum(Integer driverNum) {
+        this.driverNum = driverNum;
+    }
+
+    public String getMac() {
+        return mac;
+    }
+
+    public void setMac(String mac) {
+        this.mac = mac;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public String getFlag() {
+        return flag;
+    }
+
+    public void setFlag(String flag) {
+        this.flag = flag;
+    }
+
+    public String getUpload() {
+        return upload;
+    }
+
+    public void setUpload(String upload) {
+        this.upload = upload;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    public String getDetailAddress() {
+        return detailAddress;
+    }
+
+    public void setDetailAddress(String detailAddress) {
+        this.detailAddress = detailAddress;
+    }
+
+    public String getEnterCode() {
+        return enterCode;
+    }
+
+    public void setEnterCode(String enterCode) {
+        this.enterCode = enterCode;
+    }
+
+    public Integer getEnterNew() {
+        return enterNew;
+    }
+
+    public void setEnterNew(Integer enterNew) {
+        this.enterNew = enterNew;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "TCompany{" +
+        "id=" + id +
+        ", isSpe=" + isSpe +
+        ", isTaxi=" + isTaxi +
+        ", isCross=" + isCross +
+        ", isCrossLogistics=" + isCrossLogistics +
+        ", isSameLogistics=" + isSameLogistics +
+        ", isCharter=" + isCharter +
+        ", isSpeFixedOrProportional=" + isSpeFixedOrProportional +
+        ", isTaxiFixedOrProportional=" + isTaxiFixedOrProportional +
+        ", isCrossLogisticsFixedOrProportional=" + isCrossLogisticsFixedOrProportional +
+        ", isSameLogisticsFixedOrProportional=" + isSameLogisticsFixedOrProportional +
+        ", speMoney=" + speMoney +
+        ", taxiMoney=" + taxiMoney +
+        ", crossLogisticsMoney=" + crossLogisticsMoney +
+        ", sameLogisticsMoney=" + sameLogisticsMoney +
+        ", isNeedFerry=" + isNeedFerry +
+        ", name=" + name +
+        ", type=" + type +
+        ", superiorId=" + superiorId +
+        ", principalName=" + principalName +
+        ", principalPhone=" + principalPhone +
+        ", adminName=" + adminName +
+        ", adminPhone=" + adminPhone +
+        ", urgentPhoen=" + urgentPhoen +
+        ", setupTime=" + setupTime +
+        ", identifier=" + identifier +
+        ", addressCode=" + addressCode +
+        ", businessScope=" + businessScope +
+        ", contactAddress=" + contactAddress +
+        ", documentAddress=" + documentAddress +
+        ", economicType=" + economicType +
+        ", regCapital=" + regCapital +
+        ", legalName=" + legalName +
+        ", legalId=" + legalId +
+        ", legalPhone=" + legalPhone +
+        ", legalPhotoUrl=" + legalPhotoUrl +
+        ", licensingAgency=" + licensingAgency +
+        ", licenseTime=" + licenseTime +
+        ", licenseStartTime=" + licenseStartTime +
+        ", licenseEndTime=" + licenseEndTime +
+        ", licenseNumber=" + licenseNumber +
+        ", carNum=" + carNum +
+        ", driverNum=" + driverNum +
+        ", mac=" + mac +
+        ", state=" + state +
+        ", flag=" + flag +
+        ", upload=" + upload +
+        ", insertTime=" + insertTime +
+        ", detailAddress=" + detailAddress +
+        "}";
+    }
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EnterpriseUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EnterpriseUtil.java
index 8510099..dfa1152 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EnterpriseUtil.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EnterpriseUtil.java
@@ -6,9 +6,7 @@
 import com.open.common.util.OpenApiClient;
 import com.open.common.util.SystemParameterNames;
 import com.supersavedriving.driver.modular.system.util.SpringContextsUtil;
-import com.supersavedriving.driver.modular.system.util.qianyuntong.model.CheckEnterExist;
-import com.supersavedriving.driver.modular.system.util.qianyuntong.model.EnterpriseInfo;
-import com.supersavedriving.driver.modular.system.util.qianyuntong.model.ModifyEnterpriseInfoRequest;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.model.*;
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.SimpleDateFormat;
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/QianYunTongConfig.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/QianYunTongConfig.java
index 2523950..7d9d254 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/QianYunTongConfig.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/QianYunTongConfig.java
@@ -71,7 +71,8 @@
 	public QianYunTongConfig getQianYunTongConfig() {
 		if("dev".equals(activeProfile)){
 			this.appkey = "10001104";
-			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
+//			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
+			this.privateKeyPath = "C:\\Users\\Admin\\Desktop\\private_key_test.pem";
 			this.userName = "xiaofei";
 			this.status = "1";
 			this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/AddAccountInfoRequest.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/AddAccountInfoRequest.java
new file mode 100644
index 0000000..4d95884
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/AddAccountInfoRequest.java
@@ -0,0 +1,45 @@
+package com.supersavedriving.driver.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 18:45
+ */
+@Data
+public class AddAccountInfoRequest {
+	/**
+	 * 易信编号
+	 * (个人帐号传onconuuid,
+	 * 企业帐号传企业编号)
+	 */
+	private String custId;
+	/**
+	 * 帐号编号
+	 */
+	private String accountNo;
+	/**
+	 * 帐户名称
+	 */
+	private String accountName;
+	/**
+	 * 租户标识: 黔南-522700
+	 */
+	private String partnerId;
+	/**
+	 * 场景编号:网约车-100
+	 */
+	private String industryCode;
+	/**
+	 * 支付方式: 501101
+	 */
+	private String payModeId;
+	/**
+	 * 支付模式: APP
+	 */
+	private String accessMode;
+	/**
+	 * 司机手机号
+	 */
+	private String mobile;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java
new file mode 100644
index 0000000..fe260d4
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java
@@ -0,0 +1,49 @@
+package com.supersavedriving.driver.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class OrderRefundNoticeRequest {
+    /**
+     * 场景标识
+     */
+    private String scene;
+    /**
+     * 订单中心订单号
+     */
+    private String orderId;
+    /**
+     * 场景应用标识。默认52270015
+     */
+    private String mhltiCenterAppId;
+    /**
+     * 退款工单标识
+     */
+    private String refundPayNum;
+    /**
+     * 退款类型  1:未发货退款 2:未破损拒收 3:破损拒收 4:部分退款 5:全部退款
+     */
+    private String refundType;
+    /**
+     * 申请退款金额
+     */
+    private BigDecimal applyRefundCharge;
+    /**
+     * 实际退款金额
+     */
+    private BigDecimal actualRefundCharge;
+    /**
+     * 退款人
+     */
+    private String refundPerson;
+    /**
+     * 退款账号
+     */
+    private String refundAccount;
+    /**
+     * 退款理由
+     */
+    private String remark;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/RefundInfoRequest.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/RefundInfoRequest.java
new file mode 100644
index 0000000..a51356e
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/RefundInfoRequest.java
@@ -0,0 +1,19 @@
+package com.supersavedriving.driver.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+@Data
+public class RefundInfoRequest {
+    /**
+     * 支付交易明细标识
+     */
+    private String payItemId;
+    /**
+     * 支付工单标识
+     */
+    private String payId;
+    /**
+     * 交易金额,单位分
+     */
+    private String tradeFee;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java
new file mode 100644
index 0000000..b91e2e9
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java
@@ -0,0 +1,19 @@
+package com.supersavedriving.driver.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+@Data
+public class TradeOrderCancelRequest {
+    /**
+     * 场景标识
+     */
+    private String scene;
+    /**
+     * 订单中心订单号
+     */
+    private String orderId;
+    /**
+     * 场景应用标识。默认52270015
+     */
+    private String mhltiCenterAppId;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderRefund.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderRefund.java
new file mode 100644
index 0000000..aedd00c
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderRefund.java
@@ -0,0 +1,15 @@
+package com.supersavedriving.driver.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+@Data
+public class TradeOrderRefund {
+    /**
+     * 退款总金额
+     */
+    private String refundTotalFee;
+    /**
+     * 退款标识
+     */
+    private String refundId;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java
new file mode 100644
index 0000000..74192a3
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java
@@ -0,0 +1,42 @@
+package com.supersavedriving.driver.modular.system.util.qianyuntong.model;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TradeOrderRefundRequest {
+    /**
+     * 商户号,由支付中心分配。测试环境5400004,生产环境:5401007
+     */
+    private String payPartnerId;
+    /**
+     * 订单中心订单号
+     */
+    private String partnerPayId;
+    /**
+     * 支付工单标识
+     */
+    private String payId;
+    /**
+     * 退款总金额,单位为分
+     * 同一退款单多次发起退款请求时,退款金额必须一致
+     */
+    private String refundTotalFee;
+    /**
+     * 退款原因
+     */
+    private String remark;
+    /**
+     * 退款类型:
+     * RF	退款
+     * BR	部分退款(目前仅集团统一支付支持部分退款)
+     * CZ	冲正
+     */
+    private String refundType;
+    /**
+     * 支付退款单明细集合
+     */
+    private List<RefundInfoRequest> refundInfos;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/CallbackUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/CallbackUtil.java
new file mode 100644
index 0000000..82e3ac5
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/CallbackUtil.java
@@ -0,0 +1,47 @@
+package com.supersavedriving.driver.modular.system.util.zhenglian;
+
+import com.supersavedriving.driver.modular.system.util.SpringContextsUtil;
+import com.supersavedriving.driver.modular.system.util.zhenglian.model.MessageBody;
+import com.zlpay.assist.encrypt.sm4.SM4Util;
+import com.zlpay.assist.sign.sm2.SM2Util;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/28 14:25
+ */
+@Slf4j
+public class CallbackUtil {
+	
+	private static ZhengLianConfig zhengLianConfig = SpringContextsUtil.getBean(ZhengLianConfig.class).getZhengLianConfig();
+	
+	
+	public static String callback(MessageBody messageBody) {
+		try {
+			String data = messageBody.getData();
+			String sign = messageBody.getSign();
+			String secret = messageBody.getSecret();
+			//加密对称加密的秘钥
+			// 获取公钥
+			String publicKey = ZhengLianUtil.getPublicKey();
+			// 验签
+			boolean checkResult = SM2Util.verify(publicKey, zhengLianConfig.getEncrpNo(), sign, data);
+			System.out.println("验签结果:" + checkResult);
+			// 获取私钥
+			String privateKey = ZhengLianUtil.getPrivateKey();
+			// 解密对称秘钥
+			String k = SM2Util.decrypt(privateKey, secret);
+			System.out.println("对称秘钥:" + k);
+			// 解密业务报文
+			String backData = SM4Util.sm4EcbDecrypt(k, data);
+			System.out.println("业务报文:" + backData);
+			return backData;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	
+	
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/TokenUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/TokenUtil.java
new file mode 100644
index 0000000..35fda84
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/TokenUtil.java
@@ -0,0 +1,91 @@
+package com.supersavedriving.driver.modular.system.util.zhenglian;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.supersavedriving.driver.modular.system.util.SpringContextsUtil;
+import com.supersavedriving.driver.modular.system.util.UUIDUtil;
+import com.supersavedriving.driver.modular.system.util.zhenglian.model.MessageBody;
+import com.supersavedriving.driver.modular.system.util.zhenglian.model.TokenRequest;
+import com.zlpay.assist.encrypt.sm4.SM4Util;
+import com.zlpay.assist.sign.sm2.SM2Util;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 14:06
+ */
+@Slf4j
+public class TokenUtil {
+
+	private static ZhengLianConfig zhengLianConfig = SpringContextsUtil.getBean(ZhengLianConfig.class).getZhengLianConfig();
+	
+
+	public static String getToken(TokenRequest tokenRequest) throws Exception {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+		Map<String,String> headerMap = new HashMap<String,String>();
+		MessageBody body = new MessageBody();
+		headerMap.put("msgId", UUIDUtil.getRandomCode());
+		headerMap.put("merchNo", zhengLianConfig.getMerchNo());
+		headerMap.put("txCode", "ZLPAY.ACC.T0001");
+		headerMap.put("version", "1.0.1");
+		headerMap.put("signa", "1");
+		headerMap.put("signNo", zhengLianConfig.getSignNo());
+		headerMap.put("encrp", "1");
+		headerMap.put("encrpNo", zhengLianConfig.getEncrpNo());
+		headerMap.put("timestamp", sdf.format(new Date()));
+		log.info("【证联获取token】请求头报文:"+JSON.toJSONString(headerMap));
+		
+		tokenRequest.setAppId(zhengLianConfig.getAppid());
+		String reqBO = JSON.toJSONString(tokenRequest);
+		log.info("【证联获取token】请求体报文:"+reqBO);
+		// 生成对称加密秘钥
+		String key = ZhengLianUtil.generateKey(16);
+		// 加密数据
+		String jsonData = SM4Util.sm4EcbEncrypt(key, reqBO, "NoPadding");
+		//加密对称加密的秘钥
+		// 获取公钥
+		String publicKey = ZhengLianUtil.getPublicKey();
+		String secrtKey = SM2Util.encrypt(publicKey, key);
+		
+		// 将密文放入body
+		body.setData(jsonData);
+		body.setSign(ZhengLianUtil.sign(jsonData));
+		body.setSecret(secrtKey);
+		log.info("【证联获取token】请求体密文报文:"+JSON.toJSONString(body));
+		String result = ZLHttpClientUtil.doPost(zhengLianConfig.getUrl(), headerMap, JSON.toJSONString(body));
+		
+		log.info("【证联获取token】应答内容:"+ result);
+		MessageBody respBody = JSON.parseObject(result,MessageBody.class);
+		// 验签
+		boolean checkResult = SM2Util.verify(publicKey, zhengLianConfig.getEncrpNo(), respBody.getSign(), respBody.getData());
+		log.info("【证联获取token】验签结果:" + checkResult);
+		// 获取私钥
+		String privateKey = ZhengLianUtil.getPrivateKey();
+		// 解密对称秘钥
+		String k = SM2Util.decrypt(privateKey, respBody.getSecret());
+		log.info("【证联获取token】对称秘钥:" + k);
+		// 解密业务报文
+		String backData = SM4Util.sm4EcbDecrypt(k, respBody.getData());
+		log.info("【证联获取token】返回业务报文:" + backData);
+		JSONObject jsonObject = JSON.parseObject(backData);
+		String sysRtnCode = jsonObject.getString("sysRtnCode");
+		if(!"000000".equals(sysRtnCode)){
+			log.error("【证联获取token】获取token失败!{}", jsonObject.getString("sysRtnMsg"));
+			throw new Exception(jsonObject.getString("sysRtnMsg"));
+		}
+		JSONObject bizData = jsonObject.getJSONObject("bizData");
+		String resCode = bizData.getString("resCode");
+		if(!"S010000".equals(resCode)){
+			log.error("【证联获取token】获取token失败!{}", bizData.getString("resMsg"));
+			throw new Exception(jsonObject.getString("resMsg"));
+		}
+		JSONObject resData = bizData.getJSONObject("resData");
+		return resData.getString("token");
+	}
+	
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZLHttpClientUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZLHttpClientUtil.java
new file mode 100644
index 0000000..86258f7
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZLHttpClientUtil.java
@@ -0,0 +1,129 @@
+package com.supersavedriving.driver.modular.system.util.zhenglian;
+
+import org.apache.http.client.config.AuthSchemes;
+import org.apache.http.client.config.CookieSpecs;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.util.EntityUtils;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.IOException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/28 14:23
+ */
+public class ZLHttpClientUtil {
+	
+	/**
+	 * 连接超时时间
+	 */
+	private final static int CONNECT_TIMEOUT = 30000;
+	/**
+	 * 请求超时时间
+	 */
+	private final static int REQUEST_TIMEOUT = 50000;
+	/**
+	 * socket超时时间
+	 */
+	private final static int SOCKET_TIMEOUT = 50000;
+	/**
+	 * 请求格式
+	 */
+	private final static String FORMAT = "application/json";
+	/**
+	 * 请求类型
+	 */
+	private final static String POST_TYPE = "https://";
+	
+	public static String doPost(String url, Map<String, String> headerMap, String jsonData) {
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+		if (url != null && url.startsWith(POST_TYPE)) {
+			httpClient = sslClient();
+		}
+		HttpPost httpPost = new HttpPost(url);
+		RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT)
+				.setConnectionRequestTimeout(REQUEST_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).setRedirectsEnabled(true)
+				.build();
+		httpPost.setConfig(requestConfig);
+		httpPost.setHeader("Content-Type", "application/json");
+		if (headerMap != null) {
+			Set<String> keys = headerMap.keySet();
+			for (Iterator<String> i = keys.iterator(); i.hasNext();) {
+				String key = (String) i.next();
+				httpPost.addHeader(key, headerMap.get(key));
+			}
+		}
+		try {
+			httpPost.setEntity(new StringEntity(jsonData, ContentType.create(FORMAT, "UTF-8")));
+			CloseableHttpResponse execute = httpClient.execute(httpPost);
+			int statusCode = execute.getStatusLine().getStatusCode();
+			if (statusCode == 200) {
+				return String.valueOf(EntityUtils.toString(execute.getEntity()));
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (null != httpClient) {
+				try {
+					httpClient.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return null;
+	}
+	
+	private static CloseableHttpClient sslClient() {
+		try {
+			X509TrustManager trustManager = new X509TrustManager() {
+				@Override public X509Certificate[] getAcceptedIssuers() {
+					return null;
+				}
+				@Override public void checkClientTrusted(X509Certificate[] xcs, String str) {}
+				@Override public void checkServerTrusted(X509Certificate[] xcs, String str) {}
+			};
+			SSLContext ctx = SSLContext.getInstance(SSLConnectionSocketFactory.TLS);
+			ctx.init(null, new TrustManager[] { trustManager }, null);
+			SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE);
+			// 创建Registry
+			RequestConfig requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD_STRICT)
+					.setExpectContinueEnabled(Boolean.TRUE).setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM,AuthSchemes.DIGEST))
+					.setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build();
+			Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+					.register("http", PlainConnectionSocketFactory.INSTANCE)
+					.register("https",socketFactory).build();
+			// 创建ConnectionManager,添加Connection配置信息
+			PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+			CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(connectionManager)
+					.setDefaultRequestConfig(requestConfig).build();
+			return closeableHttpClient;
+		} catch (KeyManagementException ex) {
+			throw new RuntimeException(ex);
+		} catch (NoSuchAlgorithmException ex) {
+			throw new RuntimeException(ex);
+		}
+	}
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZhengLianConfig.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZhengLianConfig.java
new file mode 100644
index 0000000..14e16e4
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZhengLianConfig.java
@@ -0,0 +1,90 @@
+package com.supersavedriving.driver.modular.system.util.zhenglian;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/8 11:31
+ */
+@Data
+@Component
+public class ZhengLianConfig {
+	
+	@Value("${spring.profiles.active}")
+	private String activeProfile;
+	/**
+	 * 接口地址
+	 */
+	private String url;
+	/**
+	 * appid
+	 */
+	private String appid;
+	/**
+	 * 商户号
+	 */
+	private String merchNo;
+	/**
+	 * 加密证书序列号
+	 */
+	private String encrpNo;
+	/**
+	 * 签名证书序列号
+	 */
+	private String signNo;
+	/**
+	 * 证书
+	 */
+	private String cer;
+	/**
+	 * 证书
+	 */
+	private String sm2;
+	/**
+	 *
+	 */
+	private String password;
+	
+	/**
+	 * 获取不同环境的配置
+	 * @return
+	 */
+	public ZhengLianConfig getZhengLianConfig() {
+		if("dev".equals(activeProfile)){
+			this.url = "https://gatewaytest.zqpay.com";
+			this.appid = "F9BFEEA567196A92E053376010ACF004";
+			this.merchNo = "B00000871";
+			this.encrpNo = "1055490595";
+			this.signNo = "1066348524";
+//			this.cer = "C:\\Users\\39373\\Desktop\\黔云通\\UAT-demo-公用\\1055490595.cer";
+//			this.sm2 = "C:\\Users\\39373\\Desktop\\黔云通\\UAT-demo-公用\\871_111111.sm2";
+			this.cer = "C:\\Users\\Admin\\Desktop\\1055490595.cer";
+			this.sm2 = "C:\\Users\\Admin\\Desktop\\871_111111.sm2";
+			this.password = "111111";
+		}
+		if("test".equals(activeProfile)){
+			this.url = "https://gatewaytest.zqpay.com";
+			this.appid = "F9BFEEA567196A92E053376010ACF004";
+			this.merchNo = "B00000871";
+			this.encrpNo = "1055490595";
+			this.signNo = "1066348524";
+			this.cer = "/etraffic/server/1055490595.cer";
+			this.sm2 = "/etraffic/server/871_111111.sm2";
+			this.password = "111111";
+		}
+		if("prod".equals(activeProfile)){
+			this.url = "https://gateway.zqpay.com";
+			this.appid = "3e06da1751ec1626b30f7703a088f298";
+			this.merchNo = "B00000402";
+			this.encrpNo = "1342935640";
+			this.signNo = "1471742568";
+			this.cer = "/etraffic/server/1342935640.cer";
+			this.sm2 = "/etraffic/server/1342935640.sm2";
+			this.password = "31028Mky";
+		}
+		return this;
+	}
+	
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZhengLianUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZhengLianUtil.java
new file mode 100644
index 0000000..dd3319f
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/ZhengLianUtil.java
@@ -0,0 +1,208 @@
+package com.supersavedriving.driver.modular.system.util.zhenglian;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.supersavedriving.driver.modular.system.util.SpringContextsUtil;
+import com.supersavedriving.driver.modular.system.util.UUIDUtil;
+import com.supersavedriving.driver.modular.system.util.zhenglian.model.MessageBody;
+import com.supersavedriving.driver.modular.system.util.zhenglian.model.TradeTerminalInfo;
+import com.supersavedriving.driver.modular.system.util.zhenglian.model.ZLUserInfo;
+import com.zlpay.assist.encrypt.sm4.SM4Util;
+import com.zlpay.assist.sign.sm2.SM2Cert;
+import com.zlpay.assist.sign.sm2.SM2Util;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.RandomStringUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.security.cert.X509Certificate;
+import java.text.SimpleDateFormat;
+import java.util.Base64;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/28 14:22
+ */
+@Slf4j
+public class ZhengLianUtil {
+	
+	private static ZhengLianConfig zhengLianConfig = SpringContextsUtil.getBean(ZhengLianConfig.class).getZhengLianConfig();
+	
+	
+	
+	
+	
+	/**
+	 * 获取用户详情
+	 * @param appUserId
+	 * @param tradeTerminalInfo
+	 * @return
+	 * @throws Exception
+	 */
+	public static ZLUserInfo getUserInfo(String appUserId, TradeTerminalInfo tradeTerminalInfo) throws Exception {
+		log.info("正联配置信息:{}", JSON.toJSONString(zhengLianConfig));
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+		Map<String,String> headerMap = new HashMap<String,String>();
+		MessageBody body = new MessageBody();
+		headerMap.put("msgId", UUIDUtil.getRandomCode());
+		headerMap.put("merchNo", zhengLianConfig.getMerchNo());
+		headerMap.put("txCode", "ZLPAY.ACC.T0009");
+		headerMap.put("version", "1.0.1");
+		headerMap.put("signa", "1");
+		headerMap.put("signNo", zhengLianConfig.getSignNo());
+		headerMap.put("encrp", "1");
+		headerMap.put("encrpNo", zhengLianConfig.getEncrpNo());
+		headerMap.put("timestamp", sdf.format(new Date()));
+		log.info("【证联获取用户信息】请求头报文:"+JSON.toJSONString(headerMap));
+		
+		Map<String, Object> map = new HashMap<>();
+		map.put("appId", zhengLianConfig.getAppid());
+		map.put("appUserId", appUserId);
+		map.put("tradeTerminalInfo", tradeTerminalInfo);
+		String reqBO = JSON.toJSONString(map);
+		log.info("【证联获取用户信息】请求体报文:"+reqBO);
+		// 生成对称加密秘钥
+		String key = ZhengLianUtil.generateKey(16);
+		// 加密数据
+		String jsonData = SM4Util.sm4EcbEncrypt(key, reqBO, "NoPadding");
+		//加密对称加密的秘钥
+		// 获取公钥
+		String publicKey = ZhengLianUtil.getPublicKey();
+		String secrtKey = SM2Util.encrypt(publicKey, key);
+		
+		// 将密文放入body
+		body.setData(jsonData);
+		body.setSign(ZhengLianUtil.sign(jsonData));
+		body.setSecret(secrtKey);
+		log.info("【证联获取用户信息】请求体密文报文:"+JSON.toJSONString(body));
+		String result = ZLHttpClientUtil.doPost(zhengLianConfig.getUrl(), headerMap, JSON.toJSONString(body));
+		
+		log.info("【证联获取用户信息】应答内容:"+ result);
+		MessageBody respBody = JSON.parseObject(result,MessageBody.class);
+		// 验签
+		boolean checkResult = SM2Util.verify(publicKey, zhengLianConfig.getEncrpNo(), respBody.getSign(), respBody.getData());
+		log.info("【证联获取用户信息】验签结果:" + checkResult);
+		// 获取私钥
+		String privateKey = ZhengLianUtil.getPrivateKey();
+		// 解密对称秘钥
+		String k = SM2Util.decrypt(privateKey, respBody.getSecret());
+		log.info("【证联获取用户信息】对称秘钥:" + k);
+		// 解密业务报文
+		String backData = SM4Util.sm4EcbDecrypt(k, respBody.getData());
+		log.info("【证联获取用户信息】返回业务报文:" + backData);
+		JSONObject jsonObject = JSON.parseObject(backData);
+		String sysRtnCode = jsonObject.getString("sysRtnCode");
+		if(!"000000".equals(sysRtnCode)){
+			log.error("【证联获取用户信息】查询用户信息失败!{}", jsonObject.getString("sysRtnMsg"));
+			throw new Exception(jsonObject.getString("sysRtnMsg"));
+		}
+		JSONObject bizData = jsonObject.getJSONObject("bizData");
+		String resCode = bizData.getString("resCode");
+		if("F010900".equals(resCode)){
+			return null;
+		}
+		if(!"S010000".equals(resCode)){
+			log.error("【证联获取用户信息】查询用户信息失败!{}", bizData.getString("resMsg"));
+			throw new Exception(jsonObject.getString("resMsg"));
+		}
+		JSONObject resData = bizData.getJSONObject("resData");
+		ZLUserInfo zlUserInfo = resData.toJavaObject(ZLUserInfo.class);
+		return zlUserInfo;
+	}
+	
+	
+	
+	
+	
+	
+	
+	/**
+	 * @Description: 从公钥证书获取公钥串
+	 * @return
+	 * @return String
+	 * @throws
+	 * @author: tsl
+	 * @date: 2019年4月19日 下午9:07:56
+	 */
+	public static String getPublicKey() {
+		String publicKey = "";
+		FileInputStream inputStream = null;
+		try {
+			inputStream = new FileInputStream(new File(zhengLianConfig.getCer()));
+			X509Certificate publicCert = SM2Cert.getPublicCert(inputStream);
+			publicKey = Base64.getEncoder().encodeToString(publicCert.getEncoded());
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (inputStream != null) {
+				try {
+					inputStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return publicKey;
+	}
+	
+	/**
+	 * @Description: 从私钥证书获取私钥传
+	 * @return
+	 * @return String
+	 * @throws
+	 * @author: tsl
+	 * @date: 2019年4月19日 下午9:08:00
+	 */
+	public static String getPrivateKey() {
+		String privateKey = "";
+		FileInputStream inputStream = null;
+		try {
+			inputStream = new FileInputStream(new File(zhengLianConfig.getSm2()));
+			byte[] priBytes = SM2Cert.getPrivateCert(inputStream);
+			privateKey = SM2Cert.getPrivateKey(zhengLianConfig.getPassword(), priBytes);
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (inputStream != null) {
+				try {
+					inputStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return privateKey;
+	}
+	/**
+	 * @Description: 生成对称加密秘钥
+	 * @return String
+	 * @throws
+	 * @author: syuf
+	 * @date: 2018年11月8日 下午5:50:05
+	 */
+	public static String generateKey(int length) {
+		return RandomStringUtils.randomAlphanumeric(length);
+	}
+	/**
+	 * @Description: 签名
+	 * @param data
+	 * @return String
+	 * @throws
+	 * @author: syuf
+	 * @date: 2018年11月15日 下午2:19:01
+	 */
+	public static String sign(String data) {
+		try {
+			// 获取私钥
+			String privateKey = getPrivateKey();
+			return com.zlpay.assist.sign.sm2.SM2Util.sign(privateKey, zhengLianConfig.getSignNo(), data);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return "";
+	}
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/MessageBody.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/MessageBody.java
new file mode 100644
index 0000000..2ccb655
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/MessageBody.java
@@ -0,0 +1,23 @@
+package com.supersavedriving.driver.modular.system.util.zhenglian.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/28 14:19
+ */
+@Data
+public class MessageBody {
+	/**
+	 * 业务数据
+	 */
+	private String data;
+	/**
+	 * 签名
+	 */
+	private String sign;
+	/**
+	 * 秘钥
+	 */
+	private String secret;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/OpenAccountCallbackRequest.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/OpenAccountCallbackRequest.java
new file mode 100644
index 0000000..f775e32
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/OpenAccountCallbackRequest.java
@@ -0,0 +1,11 @@
+package com.supersavedriving.driver.modular.system.util.zhenglian.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/28 14:18
+ */
+@Data
+public class OpenAccountCallbackRequest {
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/TokenRequest.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/TokenRequest.java
new file mode 100644
index 0000000..9bf5f1e
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/TokenRequest.java
@@ -0,0 +1,46 @@
+package com.supersavedriving.driver.modular.system.util.zhenglian.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 15:06
+ */
+@Data
+public class TokenRequest {
+	/**
+	 * 应用appid
+	 */
+	private String appId;
+	/**
+	 * APP 端用户唯一标识
+	 */
+	private String appUserId;
+	/**
+	 * 姓名
+	 */
+	private String userName;
+	/**
+	 * 证件号码
+	 */
+	private String certNo;
+	/**
+	 * 手机号码
+	 */
+	private String phone;
+	/**
+	 * 访问类型
+	 * 01 证联收银台支付
+	 * 04 HOME 页
+	 * 06 申请免密签约
+	 * 07 商户收银台支付
+	 * 08 开户(绑卡)
+	 * 09 开通支付账户
+	 * 10 打开付款码
+	 */
+	private String type;
+	/**
+	 * 终端信息域
+	 */
+	private TradeTerminalInfo tradeTerminalInfo;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/TradeTerminalInfo.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/TradeTerminalInfo.java
new file mode 100644
index 0000000..df084f7
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/TradeTerminalInfo.java
@@ -0,0 +1,27 @@
+package com.supersavedriving.driver.modular.system.util.zhenglian.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 15:10
+ */
+@Data
+public class TradeTerminalInfo {
+	/**
+	 * 用于标识交易设 备 公 网 IP地 址
+	 */
+	private String ip;
+	/**
+	 * 终端类型:
+	 * 0:web
+	 * 1:ANDROID
+	 * 2:IOS
+	 * 3:其它
+	 */
+	private String terminal;
+	/**
+	 * 用于标识交易设备 MAC 地址
+	 */
+	private String mac;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/ZLUserInfo.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/ZLUserInfo.java
new file mode 100644
index 0000000..de607ad
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/zhenglian/model/ZLUserInfo.java
@@ -0,0 +1,37 @@
+package com.supersavedriving.driver.modular.system.util.zhenglian.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/8/5 10:10
+ */
+@Data
+public class ZLUserInfo {
+	/**
+	 * appid
+	 */
+	private String appId;
+	/**
+	 * APP端用户唯一标识
+	 */
+	private String appUserId;
+	/**
+	 * 姓名
+	 */
+	private String userName;
+	/**
+	 * 证件号码
+	 */
+	private String certNo;
+	/**
+	 * 证联客户号
+	 */
+	private String custId;
+	/**
+	 * 是否已开通支付账户
+	 * 1:是
+	 * 0:否
+	 */
+	private Integer accOpenFlag;
+}
diff --git a/driver/guns-admin/src/main/resources/application-dev.yml b/driver/guns-admin/src/main/resources/application-dev.yml
index 6352954..63de1e3 100644
--- a/driver/guns-admin/src/main/resources/application-dev.yml
+++ b/driver/guns-admin/src/main/resources/application-dev.yml
@@ -42,7 +42,7 @@
 eureka:
   client:
     service-url: #注册中心地址
-      defaultZone: http://sinata:sinata@127.0.0.1:7000/eureka #启用身份验证的方式连接
+      defaultZone: http://sinata:sinata@127.0.0.1:8001/eureka #启用身份验证的方式连接
     register-with-eureka: true #在注册中心进行注册
     fetch-registry: true #从Eureka中获取注册信息。
 
diff --git a/eureka/src/main/resources/application-dev.yml b/eureka/src/main/resources/application-dev.yml
index 7c64110..95a8cf2 100644
--- a/eureka/src/main/resources/application-dev.yml
+++ b/eureka/src/main/resources/application-dev.yml
@@ -1,5 +1,5 @@
 server:
-  port: 7000  #服务端口号
+  port: 8001  #服务端口号
 
 spring:
   profiles:
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/core/beetl/ShiroExtUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/core/beetl/ShiroExtUtil.java
new file mode 100644
index 0000000..eb41fc2
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/core/beetl/ShiroExtUtil.java
@@ -0,0 +1,219 @@
+/**
+ * Copyright (c) 2015-2017, Chill Zhuang 庄骞 (smallchill@163.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.stylefeng.guns.core.beetl;
+
+import com.alibaba.fastjson.JSON;
+import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
+import com.stylefeng.guns.core.exception.GunsException;
+import com.stylefeng.guns.core.shiro.ShiroUser;
+import com.stylefeng.guns.modular.system.warpper.LoginUser;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+
+@Slf4j
+@Component
+public class ShiroExtUtil {
+    private final String NAMES_DELIMETER = ",";
+    
+    @Resource
+    private RedisTemplate<String, String> redisTemplate;
+    
+    /**
+     * 验证当前用户是否属于以下任意一个角色。
+     *
+     * @param roleNames 角色列表
+     * @return 属于:true,否则false
+     */
+    public boolean hasAnyRoles(String roleNames) {
+        boolean hasAnyRole = false;
+        ShiroUser user = getUser();
+        if (user != null && roleNames != null && roleNames.length() > 0) {
+            List<Integer> roleList = user.getRoleList();
+            for (String role : roleNames.split(NAMES_DELIMETER)) {
+                if (roleList.contains(role.trim())) {
+                    hasAnyRole = true;
+                    break;
+                }
+            }
+        }
+        return hasAnyRole;
+    }
+    
+    /**
+     * 获取封装的 ShiroUser
+     *
+     * @return ShiroUser
+     */
+    public ShiroUser getUser() {
+        ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if (attrs != null) {
+            HttpServletRequest request = attrs.getRequest();
+            HttpSession session = request.getSession();
+            String onconParam = edu.yale.its.tp.cas.client.Util.getOnconParam(session);
+            try {
+                onconParam = new String(Base64.decodeBase64(onconParam), "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+            LoginUser loginUser = JSON.parseObject(onconParam, LoginUser.class);
+            log.debug("当前登录用户:" + JSON.toJSONString(loginUser));
+            String shiroUser = redisTemplate.opsForValue().get(loginUser.getOnconUUID());
+            log.debug("当前登录用户缓存数据:" + shiroUser);
+            return JSON.parseObject(shiroUser, ShiroUser.class);
+        }
+        throw new GunsException(BizExceptionEnum.TOKEN_ERROR);
+    }
+    
+    /**
+     * 与hasRole标签逻辑相反,当用户不属于该角色时验证通过。
+     *
+     * @param roleName 角色名
+     * @return 不属于该角色:true,否则false
+     */
+    public boolean lacksRole(String roleName) {
+        return !hasRole(roleName);
+    }
+    
+    /**
+     * 验证当前用户是否属于该角色?,使用时与lacksRole 搭配使用
+     *
+     * @param roleName 角色名
+     * @return 属于该角色:true,否则false
+     */
+    public boolean hasRole(String roleName) {
+        return getSubject() != null && roleName != null
+                && roleName.length() > 0 && getSubject().hasRole(roleName);
+    }
+    
+    /**
+     * 获取当前 Subject
+     *
+     * @return Subject
+     */
+    protected Subject getSubject() {
+        return SecurityUtils.getSubject();
+    }
+    
+    /**
+     * 验证当前用户是否属于以下所有角色。
+     *
+     * @param roleNames 角色列表
+     * @return 属于:true,否则false
+     */
+    public boolean hasAllRoles(String roleNames) {
+        boolean hasAllRole = true;
+        Subject subject = getSubject();
+        if (subject != null && roleNames != null && roleNames.length() > 0) {
+            for (String role : roleNames.split(NAMES_DELIMETER)) {
+                if (!subject.hasRole(role.trim())) {
+                    hasAllRole = false;
+                    break;
+                }
+            }
+        }
+        return hasAllRole;
+    }
+    
+    /**
+     * 验证当前用户是否拥有指定权限,使用时与lacksPermission 搭配使用
+     *
+     * @param permission 权限名
+     * @return 拥有权限:true,否则false
+     */
+    public boolean hasPermission(String permission) {
+        ShiroUser user = getUser();
+        if (null == user) {
+            return false;
+        }
+        if (user.isAdmin()) {
+            return true;
+        }
+        return user.getMenuIds().contains(permission);
+    }
+    
+    /**
+     * 与hasPermission标签逻辑相反,当前用户没有制定权限时,验证通过。
+     *
+     * @param permission 权限名
+     * @return 拥有权限:true,否则false
+     */
+    public boolean lacksPermission(String permission) {
+        return !hasPermission(permission);
+    }
+    
+    /**
+     * 已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在。与notAuthenticated搭配使用
+     *
+     * @return 通过身份验证:true,否则false
+     */
+    public boolean authenticated() {
+        return getSubject() != null && getSubject().isAuthenticated();
+    }
+    
+    /**
+     * 未认证通过用户,与authenticated标签相对应。与guest标签的区别是,该标签包含已记住用户。。
+     *
+     * @return 没有通过身份验证:true,否则false
+     */
+    public boolean notAuthenticated() {
+        return !authenticated();
+    }
+    
+    /**
+     * 认证通过或已记住的用户。与guset搭配使用。
+     *
+     * @return 用户:true,否则 false
+     */
+    public boolean isUser() {
+        return getSubject() != null && getSubject().getPrincipal() != null;
+    }
+    
+    /**
+     * 验证当前用户是否为“访客”,即未认证(包含未记住)的用户。用user搭配使用
+     *
+     * @return 访客:true,否则false
+     */
+    public boolean isGuest() {
+        return !isUser();
+    }
+    
+    /**
+     * 输出当前用户信息,通常为登录帐号信息。
+     *
+     * @return 当前用户信息
+     */
+    public String principal() {
+        if (getSubject() != null) {
+            Object principal = getSubject().getPrincipal();
+            return principal.toString();
+        }
+        return "";
+    }
+    
+    
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UUIDUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UUIDUtil.java
new file mode 100644
index 0000000..0f9b2be
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UUIDUtil.java
@@ -0,0 +1,78 @@
+package com.stylefeng.guns.modular.system.util;
+
+
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+
+/**
+ * 定义生成随机码的工具类
+ */
+public class UUIDUtil {
+
+    private int i = 1;
+
+
+    /**
+     * 定义生成原生的UUID随机码
+     * @return
+     */
+    public static String getNativeUUID(){
+        return UUID.randomUUID().toString();
+    }
+
+
+    /**
+     * 生成32位随机码
+     * @return
+     */
+    public static String getRandomCode(){
+        return UUIDUtil.getNativeUUID().replaceAll("-", "");
+    }
+
+
+    /**
+     * 获取给定长度的随机码
+     * @param num
+     * @return
+     * @throws Exception
+     */
+    public static String getRandomCode(Integer num) throws Exception{
+        String str = null;
+        if(0 < num){
+            if(num % 32 > 0){
+                Integer s = num / 32;
+                Integer l = num % 32;
+                StringBuffer sb = new StringBuffer();
+                for(int i = 0; i < s; i++){
+                    sb.append(UUIDUtil.getRandomCode());
+                }
+                sb.append(UUIDUtil.getRandomCode().substring(0, l));
+                str = sb.toString();
+            }else if(num % 32 == 0){
+                Integer s = num / 32;
+                StringBuffer sb = new StringBuffer();
+                for(int i = 0; i < s; i++){
+                    sb.append(UUIDUtil.getRandomCode());
+                }
+                str = sb.toString();
+            }else{
+                str = UUIDUtil.getRandomCode().substring(0, num);
+            }
+        }else{
+            throw new Exception("参数只能大于0");
+        }
+        return str;
+    }
+
+
+    /**
+     * 获取根据当前时间的字符串数据
+     * @return
+     */
+    public synchronized static String getTimeStr(){
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddhhmmssS");
+        return simpleDateFormat.format(new Date());
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
new file mode 100644
index 0000000..28c2683
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
@@ -0,0 +1,250 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+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.ResultUtil;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 企业员工工具类
+ * @author zhibing.pu
+ * @Date 2025/6/6 16:17
+ */
+@Slf4j
+public class EmployeeUtil {
+	
+	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
+	
+	public static void main(String[] args) {
+//		SaveStaffNodeRequest request = new SaveStaffNodeRequest();
+//		request.setMobile("18798410042");
+//		request.setEntercode("9811000039358999");
+//		request.setEmpName("莫萍");
+//		request.setEmpNickname("莫萍");
+//		request.setLoginNo("15180824124");
+//		request.setEmpSex("女");
+//		request.setMphone("15180824124");
+//		request.setEmail("15180824124" + "@qyt.com");
+//		request.setDeptId(0);
+//		request.setPositionId(1);
+//		request.setSuperLevel(0);
+//		request.setHideMobile(0);
+//		SaveStaffNode saveStaffNode = EmployeeUtil.saveStaffNode(request);
+//		System.out.println(saveStaffNode);
+		
+		
+		
+//		DeleteStafNodeRequest deleteStafNodeRequest = new DeleteStafNodeRequest();
+//		deleteStafNodeRequest.setEmpId(11451968L);
+//		deleteStafNodeRequest.setEntercode("981100006318563");
+//		deleteStafNodeRequest.setMobile("13688394165");
+//		EmployeeUtil.ecrmDeleteStafNode(deleteStafNodeRequest);
+	}
+	
+	
+	/**
+	 * 企业修改员工信息
+	 * @param request
+	 * @return
+	 */
+	public static ResultUtil editStaffNode(EditStaffNodeRequest request){
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/editStaffNode";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【企业修改员工信息】请求地址:" + url);
+		log.info("【企业修改员工信息】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【企业修改员工信息】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【企业修改员工信息】请求失败:" + 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());
+			return ResultUtil.error("【企业修改员工信息】失败:" + object.toJSONString());
+		}
+		return ResultUtil.success();
+	}
+	
+	
+	/**
+	 * 企业删除人员
+	 * @param request
+	 * @return
+	 */
+	public static ResultUtil ecrmDeleteStafNode(DeleteStafNodeRequest request){
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/ecrmDeleteStafNode";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		String content = "";//业务参数
+		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(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【企业删除人员】请求地址:" + url);
+		log.info("【企业删除人员】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【企业删除人员】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【企业删除人员】请求失败:" + 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());
+			return ResultUtil.error("【企业删除人员】失败:" + object.getString("desc"));
+		}
+		return ResultUtil.success();
+	}
+	
+	
+	/**
+	 * 根据员工ID获取人员信息
+	 * @param request
+	 * @return
+	 */
+	public static StaffNodeInfo getStaffNode(GetStaffNodeRequest request){
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getStaffNode";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【根据员工ID获取人员信息】请求地址:" + url);
+		log.info("【根据员工ID获取人员信息】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "GET", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【根据员工ID获取人员信息】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【根据员工ID获取人员信息】请求失败:" + result);
+			return null;
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		String status = object.getString("status");
+		if (!"0".equals(status)) {
+			log.error("【根据员工ID获取人员信息】失败:" + object.toJSONString());
+			return null;
+		}
+		StaffNodeInfo staffNodeInfo = object.getObject("data", StaffNodeInfo.class);
+		return staffNodeInfo;
+	}
+	
+	/**
+	 * 企业增加员工
+	 * @param request
+	 * @return
+	 */
+	public static ResultUtil<SaveStaffNode> saveStaffNode(SaveStaffNodeRequest request){
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/saveStaffNode";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+        log.info("【企业增加员工】请求地址:{}", url);
+        log.info("【企业增加员工】请求参数:{}", JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+        log.info("【企业增加员工】请求结果:{}", result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+            log.error("【企业增加员工】请求失败:{}", result);
+			String retMsg = jsonObject.getString("retMsg");
+			if(retMsg.contains("员工昵称已存在")){
+				request.setEmpName(request.getEmpName() + Double.valueOf(Math.random() * 100).intValue());
+				request.setEmpNickname(request.getEmpName());
+				return saveStaffNode(request);
+			}
+			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());
+			return ResultUtil.error("【企业增加员工】失败:" + object.getString("desc"));
+		}
+		SaveStaffNode saveStaffNode = object.getObject("data", SaveStaffNode.class);
+		return ResultUtil.success(saveStaffNode);
+	}
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java
new file mode 100644
index 0000000..f5ac4ae
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java
@@ -0,0 +1,327 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+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.ResultUtil;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 企业工具类
+ *
+ * @author zhibing.pu
+ * @Date 2025/6/6 17:06
+ */
+@Slf4j
+public class EnterpriseUtil {
+	
+	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
+	
+	/**
+	 * 根据社会信用代码判断企业是否已存在
+	 *
+	 * @param uscc
+	 * @return
+	 */
+	public static CheckEnterExist checkEnterExistByEnterIdCardNo(String uscc) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/check_enter_exist_by_enterIdCardNo";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> map = new HashMap<>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		map.put(SystemParameterNames.getAppKey(), appKey);
+		map.put(SystemParameterNames.getMessage_id(), messageId);
+		map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		map.put("content", "{\"uscc\":\"" + uscc + "\"}");
+		log.info("【根据社会信用代码判断企业是否已存在】请求地址:" + url);
+		log.info("【根据社会信用代码判断企业是否已存在】请求参数:" + JSON.toJSONString(map));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+		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;
+		}
+		return jsonObject.getObject("object", CheckEnterExist.class);
+	}
+	
+	
+	/**
+	 * 根据企业名称判断企业是否已存在
+	 *
+	 * @param enterName
+	 * @return
+	 */
+	public static CheckEnterExist checkEnterNameExist(String enterName) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/checkEnterNameExist";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> map = new HashMap<>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		map.put(SystemParameterNames.getAppKey(), appKey);
+		map.put(SystemParameterNames.getMessage_id(), messageId);
+		map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		map.put("content", "{\"enterName\":\"" + enterName + "\"}");
+		log.info("【根据企业名称判断企业是否已存在】请求地址:" + url);
+		log.info("【根据企业名称判断企业是否已存在】请求参数:" + JSON.toJSONString(map));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+		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;
+		}
+		return jsonObject.getObject("object", CheckEnterExist.class);
+	}
+	
+	
+	/**
+	 * 查询企业详情
+	 *
+	 * @param enter_code 企业编号
+	 * @return
+	 */
+	public static EnterpriseInfo getEnterpriseDetail(String enter_code) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getEnterpriseDetail";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> map = new HashMap<>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		map.put(SystemParameterNames.getAppKey(), appKey);
+		map.put(SystemParameterNames.getMessage_id(), messageId);
+		map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		map.put("content", "{\"enter_code\":\"" + enter_code + "\"}");
+		log.info("【查询企业详情】请求地址:" + url);
+		log.info("【查询企业详情】请求参数:" + JSON.toJSONString(map));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+		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;
+		}
+		EnterpriseInfo enterpriseInfo = jsonObject.getObject("object", EnterpriseInfo.class);
+		return enterpriseInfo;
+	}
+	
+	
+	/**
+	 * 修改企业基本信息
+	 *
+	 * @param request
+	 * @return
+	 */
+	public static Boolean modifyEnterpriseInfo(ModifyEnterpriseInfoRequest request) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/modifyEnterpriseInfo";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> map = new HashMap<>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		map.put(SystemParameterNames.getAppKey(), appKey);
+		map.put(SystemParameterNames.getMessage_id(), messageId);
+		map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		map.put("content", new Gson().toJson(request));
+		log.info("【修改企业基本信息】请求地址:" + url);
+		log.info("【修改企业基本信息】请求参数:" + JSON.toJSONString(map));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "GET", skprivateKeyFile, timeStamp, map);
+		log.info("【修改企业基本信息】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String status = jsonObject.getString("retCode");
+		if (!"0".equals(status)) {
+			log.error("【修改企业基本信息】请求失败:" + result);
+			throw new RuntimeException("【修改企业基本信息】请求失败:" + result);
+		}
+		return true;
+	}
+	
+	
+	/**
+	 * 创建企业
+	 *
+	 * @param request
+	 * @return
+	 */
+	public static CreateEnterprise createEnterprise(CreateEnterpriseRequest request) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/createEnterprise";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> map = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		map.put(SystemParameterNames.getAppKey(), appKey);
+		map.put(SystemParameterNames.getMessage_id(), messageId);
+		map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		map.put("content", new Gson().toJson(request));
+		
+		log.info("【创建企业】请求地址:" + url);
+		log.info("【创建企业】请求参数:" + JSON.toJSONString(map));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+		log.info("【创建企业】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【创建企业】请求失败:" + result);
+			String retMsg = jsonObject.getString("retMsg");
+			retMsg = retMsg.substring(retMsg.indexOf("{"));
+			jsonObject = JSON.parseObject(retMsg);
+			throw new RuntimeException("【创建企业】请求失败:" + 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 object.getObject("data", CreateEnterprise.class);
+	}
+	
+	
+	/**
+	 * 删除企业信息
+	 *
+	 * @param enterNum 企业编号
+	 * @param operator 管理员手机号码
+	 * @return
+	 */
+	public static ResultUtil delEnterprise(String enterNum, String operator) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/delCompany";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> map = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		map.put(SystemParameterNames.getAppKey(), appKey);
+		map.put(SystemParameterNames.getMessage_id(), messageId);
+		map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		map.put("content", "{\"enterNum\":\"" + enterNum + "\",\"operator\":\"" + operator + "\"}");
+		
+		log.info("【删除企业信息】请求地址:" + url);
+		log.info("【删除企业信息】请求参数:" + JSON.toJSONString(map));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+		log.info("【删除企业信息】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【删除企业信息】请求失败:" + 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());
+			return ResultUtil.error("【删除企业信息】请求失败:" + object.getString("desc"));
+		}
+		return ResultUtil.success();
+	}
+	
+	
+	public static void main(String[] args) {
+//		CreateEnterpriseRequest request = new CreateEnterpriseRequest();
+//		request.setName("黔南云码通数字产业运营有限公司");
+//		request.setNickName("黔南云码通");
+//		request.setIndustry_code("123456789");
+//		request.setMobile("15180824124");
+//		request.setMobileFlag("1");
+//		CreateEnterprise enterprise = EnterpriseUtil.createEnterprise(request);
+//		System.out.println(enterprise);
+//
+		
+//		CheckEnterExist checkEnterExist = EnterpriseUtil.checkEnterNameExist("黔南云码通数字产业运营有限公司");
+//		System.out.println(checkEnterExist);
+		
+		
+		EnterpriseUtil.delEnterprise("981100006318563", "13688394165");
+	}
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
new file mode 100644
index 0000000..5e57d68
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
@@ -0,0 +1,830 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.open.common.util.OpenApiClient;
+import com.open.common.util.SystemParameterNames;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.UUIDUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 9:34
+ */
+@Slf4j
+public class OrderUtil {
+	
+	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
+	
+	
+	public static void main(String[] args) {
+		//创建行程
+//		CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
+//		request.setScene("TRAFFIC");
+//		request.setPartnerId("522700");
+//		request.setOrderNo("3456789012345678");
+//		request.setCustomerId("11448156");
+//		request.setDriverId("11448158");
+//		request.setSupplierShopId("981100006005951");
+//		request.setServiceType(1);
+//		String travelItinerary = createTravelItinerary(request);
+//		System.err.println(travelItinerary);//1951088602595872768
+		
+		//修改行程状态
+//		ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+//		request.setScene("TRAFFIC");
+//		request.setPartnerId("522700");
+//		request.setOrderId("1951088602595872768");
+//		request.setStatus(7);
+//		request.setDriverId("11448158");
+//		request.setSupplierShopId("981100006005951");
+//		Boolean aBoolean = modifyTravelItinerary(request);
+		
+		//订单创建及拉起支付
+//		TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData();
+//		tradeOrderCreateData.setScene("TRAFFIC");
+//		tradeOrderCreateData.setPartnerId("522700");
+//		tradeOrderCreateData.setTreatShopId("11448158");
+//		tradeOrderCreateData.setOrderAppId("52270015");
+//		tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isPromote\":\"0\"}");
+//		tradeOrderCreateData.setCharge(new BigDecimal("0.01"));
+//		tradeOrderCreateData.setChannelSource("GRJYCXWXXCX");
+//		tradeOrderCreateData.setOrderId("1951088602595872768");
+//		tradeOrderCreateData.setOrderNo("3456789012345678");
+//		tradeOrderCreateData.setCustomerId("11448156");
+//		tradeOrderCreateData.setPayPartnerId("5400004");
+//		tradeOrderCreateData.setPartnerPayId("1951088602595872768");
+//		tradeOrderCreateData.setCurrency("RMB");
+//		tradeOrderCreateData.setTotalFee("1");
+//		tradeOrderCreateData.setRetUrl("pages/advoad-city-search/advoad-message/electronic-wait-pay/electronic-wait-pay");
+//		tradeOrderCreateData.setClientIp("127.0.0.1");
+//		tradeOrderCreateData.setNeedLoginFlag("N");
+//		tradeOrderCreateData.setOrderDesc("出行订单支付");
+//		tradeOrderCreateData.setAccessMode("APP");
+//
+//		List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+//		GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+//		goodsInfoRequest.setId("981100006005901");
+//		goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+//		goodsInfoRequest.setSubOpenId("oVLur61wBKJEO7QPR1dsmzS5TSfs");
+//		goodsInfoRequest.setProfitSharing("1");
+//		goodsInfoRequest.setAreaInfo("520100");
+//		goodsInfoRequest.setPayType("0");
+//		goodsInfoRequest.setBusinessType("10408");
+//		goodsInfo.add(goodsInfoRequest);
+//		tradeOrderCreateData.setGoodsInfo(goodsInfo);
+//		TradeOrderCreate tradeOrderCreate = tradeOrderCreate1(tradeOrderCreateData);
+//		System.err.println(tradeOrderCreate);
+		//TradeOrderCreate(orderInfo=OrderInfo(orderId=1950072223939842048, status=null), payInfo=PayInfo(retCode=000000, retMsg=success, success=true, data=PayInfoData(redirectUrl=https://qhsctest.qytzt.cn/gray/mobile/index.html?f=allCashDesk&accessToken=It5FPM1DUjzwIAin7zwiHvUANWKC6I5USCLE8EKoRkg%3D, payId=540000420250729000135600, status=null, payTime=null, payFee=null, paymentInfos=null), sign=525cb843b1eeb5a0451eeb5fbbe02f0f))
+		
+		//查询支付单信息
+//		GetPaymentInfoDataRequest getPaymentInfoDataRequest = new GetPaymentInfoDataRequest();
+//		getPaymentInfoDataRequest.setPartnerId("5400004");
+//		getPaymentInfoDataRequest.setPartnerPayId("1948685426689200128");
+//		GetPaymentInfo getPaymentInfo = paymentInfo(getPaymentInfoDataRequest);
+//		System.err.println(getPaymentInfo);
+		
+		//拉起支付
+//		TradePayOff1Data tradePayOff1Data = new TradePayOff1Data();
+//		tradePayOff1Data.setPartnerId("5400004");
+//		tradePayOff1Data.setScene("TRAFFIC");
+//		tradePayOff1Data.setPartnerPayId("1951088602595872768");
+//		tradePayOff1Data.setCurrency("RMB");
+//		tradePayOff1Data.setTotalFee("1");
+//		tradePayOff1Data.setRetUrl("pages/advoad-city-search/advoad-message/electronic-wait-pay/electronic-wait-pay");
+//		tradePayOff1Data.setClientIp("127.0.0.1");
+//		tradePayOff1Data.setNeedLoginFlag("N");
+//		tradePayOff1Data.setOrderDesc("出行订单支付");
+//		tradePayOff1Data.setAccessMode("APP");
+//		List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+//		GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+//		goodsInfoRequest.setId("981100006005901");
+//		goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+//		goodsInfoRequest.setSubOpenId("oVLur61wBKJEO7QPR1dsmzS5TSfs");
+//		goodsInfoRequest.setProfitSharing("1");
+//		goodsInfoRequest.setAreaInfo("520100");
+//		goodsInfoRequest.setPayType("0");
+//		goodsInfoRequest.setBusinessType("10408");
+//		goodsInfo.add(goodsInfoRequest);
+//		tradePayOff1Data.setGoodsInfo(goodsInfo);
+//		PayInfo payInfo = tradePayOff1(tradePayOff1Data);
+//		System.err.println(payInfo);
+		//PayInfo(retCode=000000, retMsg=success, success=true, data=PayInfoData(redirectUrl=https://qhsctest.qytzt.cn/gray/mobile/index.html?f=allCashDesk&accessToken=5nUBXayFpfZz%2FXUZiMu9LzeRXmqmlqaCS%2BHfu5udIt4%3D, payId=540000420250725000135549, status=null, payTime=null, payFee=null, paymentInfos=null), sign=8154ba2728280900b122c56352c1c7fe)
+		
+		
+		// (补偿单)拉起支付
+//		TradePayOffData tradePayOffData = new TradePayOffData();
+//		tradePayOffData.setPartnerId("5400004");
+//		tradePayOffData.setScene("TRAFFIC");
+//		tradePayOffData.setPartnerPayId("1948685426689200128");
+//		tradePayOffData.setCurrency("RMB");
+//		tradePayOffData.setTotalFee("1");
+//		tradePayOffData.setRetUrl("/home/");
+//		tradePayOffData.setClientIp("127.0.0.1");
+//		tradePayOffData.setNeedLoginFlag("N");
+//		tradePayOffData.setOrderDesc("出行订单支付");
+//		tradePayOffData.setAccessMode("APP");
+//		List<PaymentInfoRequest> paymentInfoRequests = new ArrayList<>();
+//		PaymentInfoRequest paymentInfoRequest = new PaymentInfoRequest();
+//		paymentInfoRequest.setPayModeId("501212");
+//		paymentInfoRequests.add(paymentInfoRequest);
+//		tradePayOffData.setPaymentInfos(paymentInfoRequests);
+//		List<GoodsInfo> goodsInfo = new ArrayList<>();
+//		GoodsInfo goodsInfo1 = new GoodsInfo();
+//		goodsInfo1.setMerchantCode("");
+//		goodsInfo1.setCustId("");
+//		goodsInfo1.setCustName("");
+//		goodsInfo1.setProfitSharing("1");
+//		goodsInfo.add(goodsInfo1);
+//		tradePayOffData.setGoodsInfo(goodsInfo);
+//		PayInfo payInfo1 = tradePayOff(tradePayOffData);
+//		System.err.println(payInfo1);
+		
+		//订单创建
+//		CreateOrderRequest createOrderRequest = new CreateOrderRequest();
+//		createOrderRequest.setTreatShopId("11448158");
+//		createOrderRequest.setOrderAppId("52270015");
+//		createOrderRequest.setScene("TRAFFIC");
+//		createOrderRequest.setPartnerId("522700");
+//		createOrderRequest.setField1("{\"profitSharing\":\"1\",\"isPromote\":\"0\"}");
+//		createOrderRequest.setCharge(new BigDecimal("0.01"));
+//		createOrderRequest.setChannelSource("GRJYCXWXXCX");
+//		createOrderRequest.setOrderId("1948685426689200128");
+//		createOrderRequest.setOrderNo("0123456");
+//		createOrderRequest.setCustomerId("11448156");
+//		OrderInfo orderInfo = tradeOrderCreate(createOrderRequest);
+//		System.err.println(orderInfo);
+		
+		//行程单列表查询
+//		GetTravelItineraryListRequest request = new GetTravelItineraryListRequest();
+//		request.setScene("TRAFFIC");
+//		request.setPartnerId("522700");
+//		request.setCustomerId("11448156");
+//		request.setOrderNo("0123456");
+//		request.setDriverId("11448158");
+//		ListPage<TravelItinerary> travelItineraryList = getTravelItineraryList(request);
+//		System.err.println(travelItineraryList);
+	
+	}
+	
+	/**
+	 * 拉起支付
+	 *
+	 * @param tradePayOff1Data
+	 * @return
+	 */
+	public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data) {
+		tradePayOff1Data.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+		tradePayOff1Data.setTimeout("72H");
+		tradePayOff1Data.setScene("TRAFFIC");
+		tradePayOff1Data.setCurrency("RMB");
+		tradePayOff1Data.setNeedLoginFlag("N");
+		tradePayOff1Data.setAccessMode("APP");
+		tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> {
+			goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
+			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+			
+			goodsInfoRequest.setAreaInfo("520100");
+			goodsInfoRequest.setPayType("0");
+			goodsInfoRequest.setBusinessType("10408");
+		});
+		
+		
+		TradeRequest request = new TradeRequest<TradePayOff1Data>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954795404533583872" : "1911676727023968256");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion(1);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(tradePayOff1Data);
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【拉起支付】请求地址:" + url);
+		log.info("【拉起支付】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【拉起支付】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【拉起支付】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【拉起支付】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+		PayInfo payInfo = busiResp.getObject("payInfo", PayInfo.class);
+		return payInfo;
+	}
+	
+	/**
+	 * 创建行程单
+	 *
+	 * @param request
+	 * @return 行程单ID
+	 */
+	public static String createTravelItinerary(CreateTravelItineraryRequest request) {
+		request.setScene("TRAFFIC");
+		request.setPartnerId("522700");
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/createTravelItinerary";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【创建行程单】请求地址:" + url);
+		log.info("【创建行程单】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【创建行程单】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【创建行程单】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【创建行程单】失败:" + jsonObject.getString("resMsg"));
+		}
+		return jsonObject.getString("busiResp");
+	}
+	
+	
+	/**
+	 * 修改行程单
+	 *
+	 * @param request
+	 */
+	public static Boolean modifyTravelItinerary(ModifyTravelItineraryRequest request) {
+		request.setScene("TRAFFIC");
+		request.setPartnerId("522700");
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/modifyTravelItinerary";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【修改行程单】请求地址:" + url);
+		log.info("【修改行程单】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【修改行程单】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【修改行程单】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【修改行程单】失败:" + jsonObject.getString("resMsg"));
+		}
+		return true;
+	}
+	
+	
+	/**
+	 * 行程单列表查询
+	 *
+	 * @param request
+	 * @return
+	 */
+	public static ListPage<List<TravelItinerary>> getTravelItineraryList(GetTravelItineraryListRequest request) {
+		request.setScene("TRAFFIC");
+		request.setPartnerId("522700");
+		
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getTravelItineraryList";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【行程单列表查询】请求地址:" + url);
+		log.info("【行程单列表查询】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【行程单列表查询】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【行程单列表查询】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【行程单列表查询】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+		Integer total = busiResp.getInteger("total");
+		Integer pageNum = busiResp.getInteger("pageNum");
+		Integer pageSize = busiResp.getInteger("pageSize");
+		JSONArray list = busiResp.getJSONArray("list");
+		List<TravelItinerary> travelItineraryList = new ArrayList<>();
+		for (int i = 0; i < list.size(); i++) {
+			TravelItinerary object = list.getObject(i, TravelItinerary.class);
+			travelItineraryList.add(object);
+		}
+		ListPage listPage = new ListPage<List<TravelItinerary>>();
+		listPage.setTotal(total);
+		listPage.setPageNum(pageNum);
+		listPage.setPageSize(pageSize);
+		listPage.setList(travelItineraryList);
+		return listPage;
+	}
+	
+	/**
+	 * 订单创建及拉起支付
+	 *
+	 * @param tradeOrderCreateData
+	 * @return
+	 */
+	public static TradeOrderCreate tradeOrderCreate1(TradeOrderCreateData tradeOrderCreateData) {
+		tradeOrderCreateData.setScene("TRAFFIC");
+		tradeOrderCreateData.setPartnerId("522700");
+		tradeOrderCreateData.setTimeout("72H");
+		tradeOrderCreateData.setOrderAppId("52270015");
+		tradeOrderCreateData.setChannelSource("GRJYCXWXXCX");
+		tradeOrderCreateData.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+		tradeOrderCreateData.setCurrency("RMB");
+		tradeOrderCreateData.setNeedLoginFlag("N");
+		tradeOrderCreateData.setAccessMode("APP");
+		tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> {
+			goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
+			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+			goodsInfoRequest.setAreaInfo("520100");
+			goodsInfoRequest.setPayType("0");
+			goodsInfoRequest.setBusinessType("10408");
+		});
+		
+		
+		TradeRequest request = new TradeRequest<TradeOrderCreateData>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954793280550756352" : "1945688132719169536");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion(1);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(tradeOrderCreateData);
+		
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCreate";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单创建及拉起支付】请求地址:" + url);
+		log.info("【订单创建及拉起支付】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单创建及拉起支付】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单创建及拉起支付】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单创建及拉起支付】失败:" + jsonObject.getString("resMsg"));
+		}
+		TradeOrderCreate busiResp = jsonObject.getObject("busiResp", TradeOrderCreate.class);
+		return busiResp;
+	}
+	
+	/**
+	 * 订单创建
+	 *
+	 * @param createOrderRequest
+	 * @return
+	 */
+	public static OrderInfo tradeOrderCreate(CreateOrderRequest createOrderRequest) {
+		createOrderRequest.setOrderAppId("52270015");
+		createOrderRequest.setScene("TRAFFIC");
+		createOrderRequest.setPartnerId("522700");
+		createOrderRequest.setChannelSource("GRJYCXWXXCX");
+		
+		TradeRequest request = new TradeRequest<CreateOrderRequest>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954792737421942784" : "1948289607125864448");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion(1);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(createOrderRequest);
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCreate";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单创建】请求地址:" + url);
+		log.info("【订单创建】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单创建】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单创建】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单创建】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+		OrderInfo orderInfo = busiResp.getObject("orderInfo", OrderInfo.class);
+		return orderInfo;
+	}
+	
+	/**
+	 * (补偿单)拉起支付
+	 *
+	 * @param tradePayOffData
+	 * @return
+	 */
+	public static PayInfo tradePayOff(TradePayOffData tradePayOffData) {
+		tradePayOffData.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401008" : "5400005");
+		tradePayOffData.setTimeout("72H");
+		tradePayOffData.setScene("TRAFFIC");
+		tradePayOffData.setCurrency("RMB");
+		tradePayOffData.setRetUrl("");
+		InetAddress inetAddress = null;
+		try {
+			inetAddress = InetAddress.getLocalHost();
+		} catch (UnknownHostException e) {
+			throw new RuntimeException(e);
+		}
+		String ip = inetAddress.getHostAddress();
+		tradePayOffData.setClientIp(ip);
+		tradePayOffData.setNeedLoginFlag("N");
+		tradePayOffData.setAccessMode("APP");
+		List<PaymentInfoRequest> paymentInfoRequests = new ArrayList<>();
+		PaymentInfoRequest paymentInfoRequest = new PaymentInfoRequest();
+		paymentInfoRequest.setPayModeId("501212");
+		paymentInfoRequest.setRealFee(tradePayOffData.getTotalFee().toString());
+		paymentInfoRequest.setTradeFee(tradePayOffData.getTotalFee().toString());
+		paymentInfoRequest.setAccountTyp("501");
+		paymentInfoRequests.add(paymentInfoRequest);
+		tradePayOffData.setPaymentInfos(paymentInfoRequests);
+		List<GoodsInfo> goodsInfo = new ArrayList<>();
+		GoodsInfo goodsInfo1 = new GoodsInfo();
+		goodsInfo1.setMerchantCode("prod".equals(qianYunTongConfig.getActiveProfile()) ? "B00001404" : "B00000905");
+		goodsInfo1.setCustId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "CB0000004853" : "CB0000004686");
+		goodsInfo1.setCustName("prod".equals(qianYunTongConfig.getActiveProfile()) ? "黔南云码通数字产业运营有限公司" : "证联消费平台交易客户");
+		goodsInfo1.setBusinessType("10408");
+		goodsInfo1.setAgreementNo("prod".equals(qianYunTongConfig.getActiveProfile()) ? "00000402485377063581755054680461" : "00000000468618354161754464398681");
+		goodsInfo1.setProfitSharing("1");
+		goodsInfo.add(goodsInfo1);
+		tradePayOffData.setGoodsInfo(goodsInfo);
+		
+		
+		TradeRequest request = new TradeRequest<TradePayOffData>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954794605782913024" : "1774717104844095488");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion("prod".equals(qianYunTongConfig.getActiveProfile()) ? 1 : 2);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(tradePayOffData);
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【(补偿单)拉起支付】请求地址:" + url);
+		log.info("【(补偿单)拉起支付】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【(补偿单)拉起支付】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【(补偿单)拉起支付】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【(补偿单)拉起支付】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+		PayInfo payInfo = busiResp.getObject("payInfo", PayInfo.class);
+		return payInfo;
+	}
+	
+	
+	/**
+	 * 查询支付单信息
+	 *
+	 * @param getPaymentInfoDataRequest
+	 * @return
+	 */
+	public static GetPaymentInfo paymentInfo(GetPaymentInfoDataRequest getPaymentInfoDataRequest) {
+		getPaymentInfoDataRequest.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+		
+		GetPaymentInfoRequest request = new GetPaymentInfoRequest();
+		request.setRequstType("POST");
+		request.setBusType(1);
+		request.setData(getPaymentInfoDataRequest);
+		
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentInfo";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【查询支付单信息】请求地址:" + url);
+		log.info("【查询支付单信息】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【查询支付单信息】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("retCode");
+		if (!"0".equals(resCode)) {
+			log.error("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+			throw new RuntimeException("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		String retCode = object.getString("retCode");
+		if (!"000000".equals(retCode)) {
+			log.error("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+			throw new RuntimeException("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+		}
+		GetPaymentInfo payInfo = object.getObject("data", GetPaymentInfo.class);
+		return payInfo;
+	}
+	
+	
+	/**
+	 * (补偿单)支付成功通知
+	 *
+	 * @param request
+	 * @return
+	 */
+	public static OrderInfo paymentOrder(PaymentOrderRequest request) {
+		request.setScene("TRAFFIC");
+		request.setMhltiCenterAppId("52270015");
+		request.setPayType(4);
+		request.setPayChannel(6);
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentOrder";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【(补偿单)支付成功通知】请求地址:" + url);
+		log.info("【(补偿单)支付成功通知】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【(补偿单)支付成功通知】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
+		}
+		OrderInfo orderInfo = jsonObject.getObject("busiResp", OrderInfo.class);
+		return orderInfo;
+	}
+
+
+	/**
+	 * 订单退款
+	 * @param request1
+	 * @return
+	 */
+	public static TradeOrderRefund tradeOrderRefund(TradeOrderRefundRequest request1) {
+		request1.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderRefund";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+		TradeRequest request = new TradeRequest<TradeOrderRefundRequest>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1968487381046722560" : "1726529285264269312");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion("prod".equals(qianYunTongConfig.getActiveProfile()) ? 1 : 6);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(request1);
+
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单退款】请求地址:" + url);
+		log.info("【订单退款】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单退款】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单退款】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单退款】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject refundInfo = jsonObject.getJSONObject("busiResp").getJSONObject("refundInfo");
+		String retCode = refundInfo.getString("retCode");
+		if(!"0".equals(retCode)){
+			log.error("【订单退款】失败:" + refundInfo.getString("retMsg"));
+			throw new RuntimeException("【订单退款】失败:" + refundInfo.getString("retMsg"));
+		}
+		JSONObject object = refundInfo.getJSONObject("object");
+		String retCode1 = object.getString("retCode");
+		if(!"000000".equals(retCode1)){
+			log.error("【订单退款】失败:" + object.getString("retMsg"));
+			throw new RuntimeException("【订单退款】失败:" + object.getString("retMsg"));
+		}
+
+		TradeOrderRefund tradeOrderRefund = object.getObject("data", TradeOrderRefund.class);
+		return tradeOrderRefund;
+	}
+
+
+	/**
+	 * 订单退款通知
+	 * @param request
+	 */
+	public static void orderRefundNotice(OrderRefundNoticeRequest request) {
+		request.setScene("TRAFFIC");
+		request.setMhltiCenterAppId("52270015");
+
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/orderRefundNotice";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单退款通知】请求地址:" + url);
+		log.info("【订单退款通知】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单退款通知】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单退款通知】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单退款通知】失败:" + jsonObject.getString("resMsg"));
+		}
+	}
+
+
+
+	/**
+	 * 订单取消
+	 * @param orderId
+	 */
+	public static void tradeOrderCancel(String orderId) {
+		TradeOrderCancelRequest request1 = new TradeOrderCancelRequest();
+		request1.setScene("TRAFFIC");
+		request1.setMhltiCenterAppId("52270015");
+		request1.setOrderId(orderId);
+
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCancel";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+		TradeRequest request = new TradeRequest<TradeOrderRefundRequest>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1968487841979760640" : "1963507067318833152");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion(1);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(request1);
+
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单取消】请求地址:" + url);
+		log.info("【订单取消】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单取消】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单取消】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单取消】失败:" + jsonObject.getString("resMsg"));
+		}
+	}
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
index 48de991..ee07ba8 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
@@ -160,7 +160,8 @@
 	public QianYunTongConfig getQianYunTongConfig() {
 		if("dev".equals(activeProfile)){
 			this.appkey = "10001104";
-			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
+//			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
+			this.privateKeyPath = "C:\\Users\\Admin\\Desktop\\private_key_test.pem";
 			this.userName = "xiaofei";
 			this.status = "1";
 			this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/SMSUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/SMSUtil.java
new file mode 100644
index 0000000..30f3850
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/SMSUtil.java
@@ -0,0 +1,68 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.open.common.util.OpenApiClient;
+import com.open.common.util.SystemParameterNames;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 短信工具类
+ * @author zhibing.pu
+ * @Date 2025/6/10 10:48
+ */
+@Slf4j
+public class SMSUtil {
+	
+	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();;
+	/**
+	 * 获取易信验证码
+	 * @param mobile
+	 * @return
+	 */
+	public static String sendVerifyCode(String mobile) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/sendVerifyCode";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", "{\"mobile\":\"" + mobile + "\"}");
+		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 retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【获取易信验证码】请求失败:" + result);
+			throw new RuntimeException("【获取易信验证码】请求失败:" + result);
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		String status = object.getString("status");
+		if (!"0".equals(status)) {
+			log.error("【获取易信验证码】失败:" + object.toJSONString());
+			throw new RuntimeException("【获取易信验证码】失败:" + object.toJSONString());
+		}
+		return object.getString("code");
+	}
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java
new file mode 100644
index 0000000..bf8db42
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java
@@ -0,0 +1,272 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.open.common.util.OpenApiClient;
+import com.open.common.util.SystemParameterNames;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 用户工具类
+ *
+ * @author zhibing.pu
+ * @Date 2025/6/6 14:47
+ */
+@Slf4j
+public class UserUtil {
+	
+	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
+	
+	/**
+	 * 根据手机号码获取人员信息
+	 *
+	 * @param mobile   手机号码
+	 * @param enterNum 企业编号
+	 */
+	public static List<QYTUserInfo> getUserInfoByPhone(String mobile, String enterNum) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getUserInfoByPhone";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		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;
+	}
+	
+	
+	/**
+	 * 根据手机号注册用户
+	 *
+	 * @param request
+	 * @return
+	 */
+	public static RegisterViaMobile registerViaMobile(RegisterViaMobileRequest request) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/m1_register_via_mobile";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【根据手机号注册用户】请求地址:" + url);
+		log.info("【根据手机号注册用户】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【根据手机号注册用户】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【根据手机号注册用户】请求失败:" + result);
+			throw new RuntimeException("【根据手机号注册用户】请求失败:" + result);
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		String status = object.getString("status");
+		if (!"0".equals(status)) {
+			log.error("【根据手机号注册用户】失败:" + object.toJSONString());
+			throw new RuntimeException("【根据手机号注册用户】失败:" + object.toJSONString());
+		}
+		return jsonObject.getObject("object", RegisterViaMobile.class);
+	}
+	
+	
+	/**
+	 * 易信用户修改密码
+	 *
+	 * @param request
+	 * @return
+	 */
+	public static Boolean modifyPwd(ModifyPwdRequest request) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/modifyPwd";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【易信用户修改密码】请求地址:" + url);
+		log.info("【易信用户修改密码】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【易信用户修改密码】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【易信用户修改密码】请求失败:" + result);
+			throw new RuntimeException("【易信用户修改密码】请求失败:" + result);
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		String status = object.getString("status");
+		if (!"0".equals(status)) {
+			log.error("【易信用户修改密码】失败:" + object.toJSONString());
+			throw new RuntimeException("【易信用户】失败:" + object.toJSONString());
+		}
+		return true;
+	}
+	
+	
+	/**
+	 * 易信重置密码
+	 *
+	 * @param request
+	 * @return
+	 */
+	public static Boolean resetPwd(ResetPwdRequest request) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/resetPwd";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【易信重置密码】请求地址:" + url);
+		log.info("【易信重置密码】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【易信重置密码】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【易信重置密码】请求失败:" + result);
+			throw new RuntimeException("【易信重置密码】请求失败:" + result);
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		String status = object.getString("status");
+		if (!"0".equals(status)) {
+			log.error("【易信重置密码】失败:" + object.toJSONString());
+			throw new RuntimeException("【易信重置密码】失败:" + object.toJSONString());
+		}
+		return true;
+	}
+
+
+
+
+	/**
+	 * 实名认证
+	 * @param realName
+	 * @param cardNo
+	 * @return
+	 */
+	public static Boolean idCardAuth(String realName, String cardNo) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/idCardAuth";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		Map<String, String> map = new HashMap<>();
+		map.put("realName", realName);
+		map.put("cardNo", cardNo);
+		contentMap.put("content", JSON.toJSONString(map));
+		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 retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【身份证实名认证】请求失败:" + result);
+			throw new RuntimeException("【身份证实名认证】请求失败:" + result);
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		return object.getBoolean("isok");
+	}
+	
+	public static void main(String[] args) {
+		List<QYTUserInfo> userInfoByPhone = getUserInfoByPhone("13688394165", "981100006318563");
+		System.out.println(userInfoByPhone);
+	}
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java
new file mode 100644
index 0000000..2201301
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java
@@ -0,0 +1,53 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 9:35
+ */
+@Data
+public class CreateOrderRequest {
+	/**
+	 * 司机id
+	 */
+	private String treatShopId;
+	/**
+	 * 应用场景标识
+	 */
+	private String orderAppId;
+	/**
+	 * 场景标识
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 结算信息json串。其中结算分账标识(profitSharing:0:不分账,1:分账)、是否推广单标识(isPromote:1、是、0、否)必传。例:{"profitSharing":"0",”isPromote”:”0”}
+	 */
+	private String field1;
+	/**
+	 * 订单总金额,单位元
+	 */
+	private BigDecimal charge;
+	/**
+	 * 订单渠道。小程序传GRJYCXWXXCX,贵人家园传GRJY
+	 */
+	private String channelSource;
+	/**
+	 * 行程单ID
+	 */
+	private String orderId;
+	/**
+	 * 业务侧订单号
+	 */
+	private String orderNo;
+	/**
+	 * 下单人ID
+	 */
+	private String customerId;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java
new file mode 100644
index 0000000..8ce9043
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java
@@ -0,0 +1,43 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:31
+ */
+@Data
+public class CreateTravelItineraryRequest {
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 业务侧订单号
+	 */
+	private String orderNo;
+	/**
+	 * 乘客ID
+	 */
+	private String customerId;
+	/**
+	 * 司机ID
+	 */
+	private String driverId;
+	/**
+	 * 推广员ID
+	 */
+	private String promoterId;
+	/**
+	 * 服务商商户ID
+	 */
+	private String supplierShopId;
+	/**
+	 * 场景服务类型。1、出租;2、网约车;3、城际;4、顺风车
+	 */
+	private Integer serviceType;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java
new file mode 100644
index 0000000..7ce17dc
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java
@@ -0,0 +1,53 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 18:24
+ */
+@Data
+public class GetPaymentInfo {
+	/**
+	 * 支付流水号
+	 */
+	private String payId;
+	/**
+	 * 订单中心行程单ID
+	 */
+	private String partnerPayId;
+	/**
+	 * 接入模式:PC H5 APP
+	 */
+	private String accessMode;
+	/**
+	 * 用户标识
+	 */
+	private String customerId;
+	/**
+	 * 商户标识
+	 */
+	private String partnerId;
+	/**
+	 * 币种
+	 */
+	private String currency;
+	/**
+	 * 支付总金额
+	 */
+	private String totalFee;
+	/**
+	 * 支付工单状态
+	 * 0	待支付
+	 * 1	部分支付成功
+	 * 2	支付成功
+	 * 3	支付失败
+	 */
+	private String status;
+	/**
+	 * 商品信息
+	 */
+	private List<GoodsInfoRequest> goodsInfo;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java
new file mode 100644
index 0000000..c7828b8
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 17:08
+ */
+@Data
+public class GetPaymentInfoDataRequest {
+	/**
+	 * 支付单标识。传行程单ID
+	 */
+	private String partnerPayId;
+	/**
+	 * 商户号,由支付中心分配
+	 */
+	private String partnerId;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java
new file mode 100644
index 0000000..dfd62c0
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java
@@ -0,0 +1,23 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 17:03
+ */
+@Data
+public class GetPaymentInfoRequest {
+	/**
+	 * 默认传POST
+	 */
+	private String requstType;
+	/**
+	 * 默认传1
+	 */
+	private Integer busType;
+	/**
+	 * 业务参数
+	 */
+	private GetPaymentInfoDataRequest data;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java
new file mode 100644
index 0000000..fa978a7
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java
@@ -0,0 +1,47 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:31
+ */
+@Data
+public class GetTravelItineraryListRequest {
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 业务侧订单号
+	 */
+	private String orderNo;
+	/**
+	 * 乘客ID
+	 */
+	private String customerId;
+	/**
+	 * 司机ID
+	 */
+	private String driverId;
+	/**
+	 * 推广员ID
+	 */
+	private String promoterId;
+	/**
+	 * 服务商商户ID
+	 */
+	private String supplierShopId;
+	/**
+	 * 每页条数
+	 */
+	private Integer pageSize;
+	/**
+	 * 当前页码
+	 */
+	private Integer pageNum;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java
new file mode 100644
index 0000000..8776fcc
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:35
+ */
+@Data
+public class GoodsInfo {
+	/**
+	 * 商户号
+	 */
+	private String merchantCode;
+	/**
+	 * 付款商户号
+	 */
+	private String custId;
+	/**
+	 * 付款方名称
+	 */
+	private String custName;
+	/**
+	 *交通场景固定值
+	 */
+	private String businessType;
+	/**
+	 * 免密支付协议号
+	 */
+	private String agreementNo;
+	/**
+	 * 分账标识。0:不分账,1:分账
+	 */
+	private String profitSharing;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
new file mode 100644
index 0000000..b3d7f21
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:13
+ */
+@Data
+public class GoodsInfoRequest {
+	/**
+	 * 企业ID(补偿场景新创建的订单支付传备用金企业ID)
+	 */
+	private String id;
+	/**
+	 * 子商户微信appId(证联预下单支付必填)
+	 */
+	private String subAppId;
+	/**
+	 * 付款人的openId(证联预下单支付必填)
+	 */
+	private String subOpenId;
+	/**
+	 * 分账标识。0:不分账,1:分账
+	 */
+	private String profitSharing;
+	/**
+	 * 地区标识,默认传520100
+	 */
+	private String areaInfo;
+	/**
+	 * 是否匿名。默认传0
+	 */
+	private String payType;
+	/**
+	 * 业务类型,默认传10408
+	 */
+	private String businessType;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java
new file mode 100644
index 0000000..eda232f
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:45
+ */
+@Data
+public class ListPage<T> {
+	/**
+	 * 总条数
+	 */
+	private Integer total;
+	/**
+	 * 当前页码
+	 */
+	private Integer pageNum;
+	/**
+	 * 每页条数
+	 */
+	private Integer pageSize;
+	/**
+	 * 数据列表
+	 */
+	private T list;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java
new file mode 100644
index 0000000..f7ff87c
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:31
+ */
+@Data
+public class ModifyTravelItineraryRequest {
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 行程单ID
+	 */
+	private String orderId;
+	/**
+	 * 行程单状态。2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,9=已完成,10=已取消,11=改派中
+	 */
+	private Integer status;
+	/**
+	 * 司机ID
+	 */
+	private String driverId;
+	/**
+	 * 推广员ID
+	 */
+	private String promoterId;
+	/**
+	 * 服务商商户ID
+	 */
+	private String supplierShopId;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java
new file mode 100644
index 0000000..ef627a3
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 9:44
+ */
+@Data
+public class OrderInfo {
+	/**
+	 * 订单id
+	 */
+	private String orderId;
+	/**
+	 * 订单状态
+	 */
+	private String status;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java
new file mode 100644
index 0000000..b6aff86
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java
@@ -0,0 +1,49 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class OrderRefundNoticeRequest {
+    /**
+     * 场景标识
+     */
+    private String scene;
+    /**
+     * 订单中心订单号
+     */
+    private String orderId;
+    /**
+     * 场景应用标识。默认52270015
+     */
+    private String mhltiCenterAppId;
+    /**
+     * 退款工单标识
+     */
+    private String refundPayNum;
+    /**
+     * 退款类型  1:未发货退款 2:未破损拒收 3:破损拒收 4:部分退款 5:全部退款
+     */
+    private String refundType;
+    /**
+     * 申请退款金额
+     */
+    private BigDecimal applyRefundCharge;
+    /**
+     * 实际退款金额
+     */
+    private BigDecimal actualRefundCharge;
+    /**
+     * 退款人
+     */
+    private String refundPerson;
+    /**
+     * 退款账号
+     */
+    private String refundAccount;
+    /**
+     * 退款理由
+     */
+    private String remark;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java
new file mode 100644
index 0000000..c990caa
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:18
+ */
+@Data
+public class PayInfo {
+	/**
+	 * 证联返回码000000:请求成功
+	 */
+	private String retCode;
+	/**
+	 * 证联返回信息
+	 */
+	private String retMsg;
+	/**
+	 * true、false
+	 */
+	private String success;
+	/**
+	 * 证联返回数据
+	 */
+	private PayInfoData data;
+	/**
+	 * 签名
+	 */
+	private String sign;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java
new file mode 100644
index 0000000..24cf5e5
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java
@@ -0,0 +1,42 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:18
+ */
+@Data
+public class PayInfoData {
+	/**
+	 * 收银台链接
+	 */
+	private String redirectUrl;
+	/**
+	 * 支付流水号
+	 */
+	private String payId;
+	/**
+	 * 支付工单状态
+	 * 0	待支付
+	 * 1	部分支付成功
+	 * 2	支付成功
+	 * 3	支付失败
+	 */
+	private String status;
+	/**
+	 * 支付时间,格式:yyyy-MM-dd HH:mm:ss
+	 */
+	private String payTime;
+	/**
+	 * 扣款金额 单位分
+	 */
+	private String payFee;
+	/**
+	 * 支付信息
+	 */
+	private List<PaymentInfo> paymentInfos;
+	
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java
new file mode 100644
index 0000000..7db70c7
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:32
+ */
+@Data
+public class PaymentInfo {
+	/**
+	 * 支付模式。此场景下默认传501212(测试和生产一致)
+	 */
+	private String payModeId;
+	/**
+	 * 支付交易明细标识
+	 */
+	private String payItemId;
+	/**
+	 * 支付金额
+	 */
+	private String payFee;
+	/**
+	 * 支付状态
+	 */
+	private String status;
+	/**
+	 * 支付时间
+	 */
+	private String payTime;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
new file mode 100644
index 0000000..5747bf2
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:32
+ */
+@Data
+public class PaymentInfoRequest {
+	/**
+	 * 支付模式。此场景下默认传501212(测试和生产一致)
+	 */
+	private String payModeId;
+	/**
+	 * 支付金额
+	 */
+	private String realFee;
+	/**
+	 *
+	 */
+	private String tradeFee;
+	/**
+	 * 账户类型 501
+	 */
+	private String accountTyp;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
new file mode 100644
index 0000000..ee05019
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
@@ -0,0 +1,53 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 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;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java
new file mode 100644
index 0000000..801e14d
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 19:31
+ */
+@Data
+public class QYTPaymentCallback {
+	/**
+	 * 加密字符串
+	 */
+	private String sign;
+	/**
+	 * 时间戳
+	 */
+	private String timeStamp;
+	/**
+	 * 请求调用唯一标识
+	 */
+	private String messageId;
+	/**
+	 * 支付结果信息
+	 */
+	private QYTPaymentCallbackData data;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
new file mode 100644
index 0000000..d817c71
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
@@ -0,0 +1,45 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 19:34
+ */
+@Data
+public class QYTPaymentCallbackData {
+	/**
+	 * 业务侧行程编号
+	 */
+	private String orderNo;
+	/**
+	 * 商户单标识。行程单ID
+	 */
+	private String partnerPayId;
+	/**
+	 * 支付中心商户号
+	 */
+	private String partnerId;
+	/**
+	 * 支付工单标识
+	 */
+	private String payId;
+	/**
+	 * 支付状态。1.未支付 2已支付
+	 */
+	private String status;
+	/**
+	 * 支付时间,格式:YYYY-MM-DD HH:mm:ss
+	 */
+	private String payTime;
+	/**
+	 * 扣款总金额 单位分
+	 */
+	private String payFee;
+	/**
+	 * 支付详细信息
+	 */
+	private List<QYTPaymentInfoCallback> paymentInfos;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java
new file mode 100644
index 0000000..19c03d3
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 19:37
+ */
+@Data
+public class QYTPaymentInfoCallback {
+	/**
+	 * 支付交易明细标识
+	 */
+	private String payItemId;
+	/**
+	 * 支付模式
+	 */
+	private String payModeId;
+	/**
+	 * 支付金额,单位分
+	 */
+	private String payFee;
+	/**
+	 * 实付金额,单位分
+	 */
+	private String realFee;
+	/**
+	 * 支付状态。1.未支付 2已支付
+	 */
+	private String status;
+	/**
+	 * 支付时间,格式:YYYY-MM-DD HH:mm:ss
+	 */
+	private String payTime;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java
new file mode 100644
index 0000000..4b7ff36
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+@Data
+public class RefundInfoRequest {
+    /**
+     * 支付交易明细标识
+     */
+    private String payItemId;
+    /**
+     * 支付工单标识
+     */
+    private String payId;
+    /**
+     * 交易金额,单位分
+     */
+    private String tradeFee;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java
new file mode 100644
index 0000000..cf44a4d
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java
@@ -0,0 +1,33 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/2 15:41
+ */
+@Data
+public class SendSmsRequest {
+	/**
+	 * 目标地址
+	 */
+	private String destAddress;
+	/**
+	 * 模板id
+	 */
+	private String templateId;
+	/**
+	 * 参数集合
+	 */
+	private Map<String, String> templateParams;
+	/**
+	 * 模板中占位符key
+	 */
+	private String code;
+	/**
+	 * 签名SPID
+	 */
+	private String spId;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java
new file mode 100644
index 0000000..9586188
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+@Data
+public class TradeOrderCancelRequest {
+    /**
+     * 场景标识
+     */
+    private String scene;
+    /**
+     * 订单中心订单号
+     */
+    private String orderId;
+    /**
+     * 场景应用标识。默认52270015
+     */
+    private String mhltiCenterAppId;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java
new file mode 100644
index 0000000..2afc392
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:17
+ */
+@Data
+public class TradeOrderCreate {
+	/**
+	 * 订单信息
+	 */
+	private OrderInfo orderInfo;
+	/**
+	 * 支付接口调用信息
+	 */
+	private PayInfo payInfo;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
new file mode 100644
index 0000000..288fa67
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
@@ -0,0 +1,99 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:03
+ */
+@Data
+public class TradeOrderCreateData {
+	/**
+	 * 司机id
+	 */
+	private String treatShopId;
+	/**
+	 * 应用场景标识
+	 */
+	private String orderAppId;
+	/**
+	 * 场景标识
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 超时时间
+	 */
+	private String timeout;
+	/**
+	 * 结算信息json串。其中结算分账标识(profitSharing:0:不分账,1:分账)、是否推广单标识(isPromote:1、是、0、否)必传。例:{"profitSharing":"0",”isPromote”:”0”}
+	 */
+	private String field1;
+	/**
+	 * 订单总金额,单位元
+	 */
+	private BigDecimal charge;
+	/**
+	 * 订单渠道。小程序传GRJYCXWXXCX,贵人家园传GRJY
+	 */
+	private String channelSource;
+	/**
+	 * 行程单ID
+	 */
+	private String orderId;
+	/**
+	 * 业务侧订单号
+	 */
+	private String orderNo;
+	/**
+	 * 下单人ID
+	 */
+	private String customerId;
+	/**
+	 * 商户号,由支付中心分配。测试环境5400004
+	 */
+	private String payPartnerId;
+	/**
+	 * 商户单标识。订单中心行程单号,每次请求请保持唯一性。
+	 */
+	private String partnerPayId;
+	/**
+	 * 币种。RMB(人民币);USD(美元)
+	 */
+	private String currency;
+	/**
+	 * 交易总金额,单位分。
+	 */
+	private String totalFee;
+	/**
+	 * 前台通知URL地址。
+	 */
+	private String retUrl;
+	/**
+	 * 用户IP
+	 */
+	private String clientIp;
+	/**
+	 * Y代表要登录,跳到标准收银台
+	 * N代表不需要登录,跳到无支付帐号收银台
+	 */
+	private String needLoginFlag;
+	/**
+	 * 支付单描述
+	 */
+	private String orderDesc;
+	/**
+	 * 接入模式:PC、H5、APP
+	 */
+	private String accessMode;
+	/**
+	 * 支付信息
+	 */
+	private List<GoodsInfoRequest> goodsInfo;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefund.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefund.java
new file mode 100644
index 0000000..8f8cc58
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefund.java
@@ -0,0 +1,15 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+@Data
+public class TradeOrderRefund {
+    /**
+     * 退款总金额
+     */
+    private String refundTotalFee;
+    /**
+     * 退款标识
+     */
+    private String refundId;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java
new file mode 100644
index 0000000..f171ce6
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java
@@ -0,0 +1,42 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TradeOrderRefundRequest {
+    /**
+     * 商户号,由支付中心分配。测试环境5400004,生产环境:5401007
+     */
+    private String payPartnerId;
+    /**
+     * 订单中心订单号
+     */
+    private String partnerPayId;
+    /**
+     * 支付工单标识
+     */
+    private String payId;
+    /**
+     * 退款总金额,单位为分
+     * 同一退款单多次发起退款请求时,退款金额必须一致
+     */
+    private String refundTotalFee;
+    /**
+     * 退款原因
+     */
+    private String remark;
+    /**
+     * 退款类型:
+     * RF	退款
+     * BR	部分退款(目前仅集团统一支付支持部分退款)
+     * CZ	冲正
+     */
+    private String refundType;
+    /**
+     * 支付退款单明细集合
+     */
+    private List<RefundInfoRequest> refundInfos;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java
new file mode 100644
index 0000000..c35c201
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java
@@ -0,0 +1,62 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:23
+ */
+@Data
+public class TradePayOff1Data {
+	/**
+	 * 商户号,由支付中心分配。测试环境5400004
+	 */
+	private String partnerId;
+	/**
+	 * 超时时间
+	 */
+	private String timeout;
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 商户单标识。订单中心订单号,每次请求请保持唯一性。
+	 */
+	private String partnerPayId;
+	/**
+	 * 币种。RMB(人民币);USD(美元)
+	 */
+	private String currency;
+	/**
+	 * 交易总金额,单位分。
+	 */
+	private String totalFee;
+	/**
+	 * 前台通知URL地址。
+	 */
+	private String retUrl;
+	/**
+	 * 用户IP
+	 */
+	private String clientIp;
+	/**
+	 * Y代表要登录,跳到标准收银台
+	 * N代表不需要登录,跳到无支付帐号收银台
+	 */
+	private String needLoginFlag;
+	/**
+	 * 支付单描述
+	 */
+	private String orderDesc;
+	/**
+	 * 接入模式:PC、H5、APP
+	 */
+	private String accessMode;
+	/**
+	 * 商品描述信息。Json数组
+	 */
+	private List<GoodsInfoRequest> goodsInfo;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java
new file mode 100644
index 0000000..a09e932
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java
@@ -0,0 +1,66 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:23
+ */
+@Data
+public class TradePayOffData {
+	/**
+	 * 商户号,由支付中心分配。测试环境5400004
+	 */
+	private String partnerId;
+	/**
+	 * 超时时间
+	 */
+	private String timeout;
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 商户单标识。订单中心订单号,每次请求请保持唯一性。
+	 */
+	private String partnerPayId;
+	/**
+	 * 币种。RMB(人民币);USD(美元)
+	 */
+	private String currency;
+	/**
+	 * 交易总金额,单位分。
+	 */
+	private String totalFee;
+	/**
+	 * 前台通知URL地址。
+	 */
+	private String retUrl;
+	/**
+	 * 用户IP
+	 */
+	private String clientIp;
+	/**
+	 * Y代表要登录,跳到标准收银台
+	 * N代表不需要登录,跳到无支付帐号收银台
+	 */
+	private String needLoginFlag;
+	/**
+	 * 支付单描述
+	 */
+	private String orderDesc;
+	/**
+	 * 接入模式:PC、H5、APP
+	 */
+	private String accessMode;
+	/**
+	 * 支付信息
+	 */
+	private List<PaymentInfoRequest> paymentInfos;
+	/**
+	 * 商品描述信息。Json数组
+	 */
+	private List<GoodsInfo> goodsInfo;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java
new file mode 100644
index 0000000..b2ce9bb
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:22
+ */
+@Data
+public class TradeRequest<T> {
+	/**
+	 * 场景编号.交易中心提供。测试环境:1948289607125864448
+	 */
+	private String sceneId;
+	/**
+	 * 应用编号。中台应用appKey
+	 */
+	private String appId;
+	/**
+	 * 场景版本。交易中心提供。测试环境1
+	 */
+	private Integer configVersion;
+	/**
+	 * 请求ID。每次调用唯一标识
+	 */
+	private String requestId;
+	/**
+	 * 业务数据
+	 */
+	private T data;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java
new file mode 100644
index 0000000..27ffc26
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java
@@ -0,0 +1,64 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:48
+ */
+@Data
+public class TravelItinerary {
+	/**
+	 * 场景标识。交通场景传”TRAFFIC”
+	 */
+	private String scene;
+	/**
+	 * 租户ID。地区行政编码。黔南州传522700
+	 */
+	private String partnerId;
+	/**
+	 * 业务侧订单号
+	 */
+	private String orderNo;
+	/**
+	 * 乘客ID
+	 */
+	private String customerId;
+	/**
+	 * 司机ID
+	 */
+	private String driverId;
+	/**
+	 * 订单号
+	 */
+	private String orderId;
+	/**
+	 * 推广员ID
+	 */
+	private String promoterId;
+	/**
+	 * 服务商商户ID
+	 */
+	private String supplierShopId;
+	/**
+	 * 场景服务类型。1、出租;2、网约车;3、城际;4、顺风车
+	 */
+	private Integer serviceType;
+	/**
+	 * 订单状态。1、待支付,11、已完结(可结算)
+	 */
+	private Integer orderStatus;
+	/**
+	 * 行程单状态。2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,9=已完成,10=已取消,11=改派中
+	 */
+	private Integer status;
+	/**
+	 * 创建时间
+	 */
+	private String createTime;
+	/**
+	 * 更新时间
+	 */
+	private String updateTime;
+	
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LoginUser.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LoginUser.java
new file mode 100644
index 0000000..c10796f
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/LoginUser.java
@@ -0,0 +1,43 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/10 20:24
+ */
+@Data
+public class LoginUser {
+	/**
+	 * 密码
+	 */
+	private String imPwd;
+	/**
+	 * 权限编号
+	 */
+	private String authCode;
+	/**
+	 * 登录时间
+	 */
+	private Long loginTime;
+	/**
+	 * 企业编号
+	 */
+	private String enterCode;
+	/**
+	 * 用户唯一码
+	 */
+	private String onconUUID;
+	/**
+	 * 手机号
+	 */
+	private String mobile;
+	/**
+	 * 登录账号
+	 */
+	private String imUser;
+	/**
+	 * 工作角色ID
+	 */
+	private String workId;
+}
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java
index 29b102e..ce5fd66 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java
@@ -160,7 +160,8 @@
 	public QianYunTongConfig getQianYunTongConfig() {
 		if("dev".equals(activeProfile)){
 			this.appkey = "10001104";
-			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
+//			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
+			this.privateKeyPath = "C:\\Users\\Admin\\Desktop\\private_key_test.pem";
 			this.userName = "xiaofei";
 			this.status = "1";
 			this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
diff --git a/user/guns-admin/src/main/resources/application-dev.yml b/user/guns-admin/src/main/resources/application-dev.yml
index 4726fee..58b92bd 100644
--- a/user/guns-admin/src/main/resources/application-dev.yml
+++ b/user/guns-admin/src/main/resources/application-dev.yml
@@ -47,7 +47,7 @@
 eureka:
   client:
     service-url: #注册中心地址
-      defaultZone: http://sinata:sinata@192.168.110.106:8001/eureka #启用身份验证的方式连接
+      defaultZone: http://sinata:sinata@127.0.0.1:8001/eureka #启用身份验证的方式连接
     register-with-eureka: true #在注册中心进行注册
     fetch-registry: true #从Eureka中获取注册信息。
 
diff --git a/zuul/src/main/java/com/sinata/zuul/ZuulApplication.java b/zuul/src/main/java/com/sinata/zuul/ZuulApplication.java
index 0ba4092..f206ad3 100644
--- a/zuul/src/main/java/com/sinata/zuul/ZuulApplication.java
+++ b/zuul/src/main/java/com/sinata/zuul/ZuulApplication.java
@@ -97,8 +97,8 @@
         public List<SwaggerResource> get() {
             List resource=new ArrayList<>();
             //name可以随便写,location前缀要与zuul配置的path一致。zuul开了token验证,要加上token,否则不用加?token=1
-//            resource.add(swaggerResource("user","/user-server/v2/api-docs","1.0"));
-//            resource.add(swaggerResource("driver","/driver-server/v2/api-docs","1.0"));
+            resource.add(swaggerResource("user","/user-server/v2/api-docs","1.0"));
+            resource.add(swaggerResource("driver","/driver-server/v2/api-docs","1.0"));
             return resource;
         }
 
diff --git a/zuul/src/main/resources/application-dev.yml b/zuul/src/main/resources/application-dev.yml
index 5fc7314..86173e6 100644
--- a/zuul/src/main/resources/application-dev.yml
+++ b/zuul/src/main/resources/application-dev.yml
@@ -18,7 +18,7 @@
 eureka:
   client:
     service-url: #注册中心地址
-      defaultZone: http://sinata:sinata@192.168.110.106:8001/eureka #启用身份验证的方式连接
+      defaultZone: http://sinata:sinata@127.0.0.1:8001/eureka #启用身份验证的方式连接
     register-with-eureka: true #在注册中心进行注册
     fetch-registry: true #从Eureka中获取注册信息。
 

--
Gitblit v1.7.1