Pu Zhibing
2 天以前 e5bdd46a51ebfda768262ff51c17879241ea2b14
更换三方账号和添加环境配置
13个文件已修改
1 文件已重命名
55个文件已添加
5711 ■■■■■ 已修改文件
user/guns-admin/pom.xml 573 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/config/SwaggerConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/OrderMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/DriverServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/ALiSendSms.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/GaoDe/MapConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/MiniAppPay.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/OssUploadUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/SpringContextsUtil.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/huawei/HWSMSUtil.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/huawei/OBSUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/AESUtils.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/EmployeeUtil.java 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/EnterpriseUtil.java 316 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/NCOSSUtil.java 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/OrderUtil.java 682 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/SMSUtil.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/UserUtil.java 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/CheckEnterExist.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/CreateEnterprise.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/CreateOrderRequest.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/DeleteStafNodeRequest.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/EnterpriseInfo.java 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GetPaymentInfo.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GetStaffNodeRequest.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GoodsInfo.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GoodsInfoRequest.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/ListPage.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/LoginWeChatXiao.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/ModifyEnterpriseInfoRequest.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/ModifyPwdRequest.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/OrderInfo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PayInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PayInfoData.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentInfo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentInfoRequest.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentOrderRequest.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/QYTPaymentCallback.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/QYTUserInfo.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/RegisterViaMobile.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/RegisterViaMobileRequest.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/ResetPwdRequest.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/SaveStaffNode.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/SaveStaffNodeRequest.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/SendSmsRequest.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/StaffNodeInfo.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeOrderCreate.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeOrderCreateData.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradePayOff1Data.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradePayOffData.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeRequest.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TravelItinerary.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/resources/application-dev.yml 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/resources/application-produce.yml 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/resources/application-test.yml 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/resources/application.yml 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/pom.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/pom.xml
@@ -1,278 +1,305 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.stylefeng</groupId>
        <artifactId>guns-parent</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>user</artifactId>
    <name>guns-admin</name>
    <description>guns 的spring boot版本</description>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--整合hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>com.stylefeng</groupId>
            <artifactId>guns-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.stylefeng</groupId>
            <artifactId>guns-generator</artifactId>
        </dependency>
        <!--spring boot依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.11.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--shiro依赖-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-ehcache</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.3.10</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.8.10.ALL</version>
        </dependency>
        <!-- obs对象存储 -->
        <dependency>
            <groupId>com.huaweicloud</groupId>
            <artifactId>esdk-obs-java-bundle</artifactId>
            <version>[3.21.11,)</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.4.3</version>
        </dependency>
        <!-- 计算两坐标间的直线距离 -->
        <dependency>
            <groupId>org.gavaghan</groupId>
            <artifactId>geodesy</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.13</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.7</version>
        </dependency>
        <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>2.5.0</version>
    </dependency>
    </dependencies>
    <build>
        <!--打包jar包方式-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork><!-- 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart -->
                </configuration>
            </plugin>
        </plugins>
        <!--打包war包引入本地jar的打包方式-->
        <!--<plugins>-->
            <!--<plugin>-->
                <!--<groupId>org.apache.maven.plugins</groupId>-->
                <!--<artifactId>maven-war-plugin</artifactId>-->
                <!--<configuration>-->
                    <!--&lt;!&ndash; 设置成false,否则检查web.xml是否存在。因为springboot是没有web.xml的 &ndash;&gt;-->
                    <!--<failOnMissingWebXml>false</failOnMissingWebXml>-->
                    <!--&lt;!&ndash;打包后的项目名&ndash;&gt;-->
                    <!--&lt;!&ndash;<warName>example</warName>&ndash;&gt;-->
                    <!--<webResources>-->
                        <!--<resource>-->
                            <!--&lt;!&ndash;把本地lib里面的jar复制到lib&ndash;&gt;-->
                            <!--<directory>${project.basedir}/lib</directory>-->
                            <!--<targetPath>WEB-INF/lib/</targetPath>-->
                            <!--<includes>-->
                                <!--<include>**/*.jar</include>-->
                            <!--</includes>-->
                        <!--</resource>-->
                    <!--</webResources>-->
                <!--</configuration>-->
            <!--</plugin>-->
        <!--</plugins>-->
        <resources>
            <resource>
                <directory>lib</directory>
                <targetPath>/BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/webapp</directory>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.stylefeng</groupId>
        <artifactId>guns-parent</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>user</artifactId>
    <name>guns-admin</name>
    <description>guns 的spring boot版本</description>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--整合hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>com.stylefeng</groupId>
            <artifactId>guns-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.stylefeng</groupId>
            <artifactId>guns-generator</artifactId>
        </dependency>
        <!--spring boot依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.11.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--shiro依赖-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-ehcache</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.3.10</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.8.10.ALL</version>
        </dependency>
        <!-- obs对象存储 -->
        <dependency>
            <groupId>com.huaweicloud</groupId>
            <artifactId>esdk-obs-java-bundle</artifactId>
            <version>[3.21.11,)</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.4.3</version>
        </dependency>
        <!-- 计算两坐标间的直线距离 -->
        <dependency>
            <groupId>org.gavaghan</groupId>
            <artifactId>geodesy</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.13</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.7</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>2.5.0</version>
        </dependency>
        <!--中台sdk-->
        <dependency>
            <groupId>com.zhongtai</groupId>
            <artifactId>zhongtai-sdk</artifactId>
            <version>1.0.0</version>
            <scope>system</scope>
            <systemPath>${pom.basedir}/lib/openApiClient-1.0.0.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>it.sauronsoftware</groupId>
            <artifactId>base64</artifactId>
            <version>1.3.1</version>
            <scope>system</scope>
            <systemPath>${pom.basedir}/lib/javabase64-1.3.1.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.ncoss</groupId>
            <artifactId>ncoss-java-sdk</artifactId>
            <version>1.0.5</version>
            <scope>system</scope>
            <systemPath>${pom.basedir}/lib/ncoss-java-sdk-1.0.5.jar</systemPath>
        </dependency>
    </dependencies>
    <build>
        <!--打包jar包方式-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork><!-- 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart -->
                </configuration>
            </plugin>
        </plugins>
        <!--打包war包引入本地jar的打包方式-->
        <!--<plugins>-->
        <!--<plugin>-->
        <!--<groupId>org.apache.maven.plugins</groupId>-->
        <!--<artifactId>maven-war-plugin</artifactId>-->
        <!--<configuration>-->
        <!--&lt;!&ndash; 设置成false,否则检查web.xml是否存在。因为springboot是没有web.xml的 &ndash;&gt;-->
        <!--<failOnMissingWebXml>false</failOnMissingWebXml>-->
        <!--&lt;!&ndash;打包后的项目名&ndash;&gt;-->
        <!--&lt;!&ndash;<warName>example</warName>&ndash;&gt;-->
        <!--<webResources>-->
        <!--<resource>-->
        <!--&lt;!&ndash;把本地lib里面的jar复制到lib&ndash;&gt;-->
        <!--<directory>${project.basedir}/lib</directory>-->
        <!--<targetPath>WEB-INF/lib/</targetPath>-->
        <!--<includes>-->
        <!--<include>**/*.jar</include>-->
        <!--</includes>-->
        <!--</resource>-->
        <!--</webResources>-->
        <!--</configuration>-->
        <!--</plugin>-->
        <!--</plugins>-->
        <resources>
            <resource>
                <directory>lib</directory>
                <targetPath>/BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/webapp</directory>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>
user/guns-admin/src/main/java/com/supersavedriving/user/config/SwaggerConfig.java
@@ -36,7 +36,7 @@
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("超省新代驾")
                .title("黔云通代驾")
                .description("所有接口前需要加 /user 前缀,例如:/user/base/agreement/queryByType <br>所有以 /api/*** 路径的接口需要上传签名参数sign")
//                .termsOfServiceUrl("http://git.oschina.net/naan1993/guns")
                .contact("stylefeng")
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.heredata.hos.model.bucket.Bucket;
import com.sun.xml.internal.bind.v2.TODO;
import com.supersavedriving.user.core.common.annotion.ServiceLog;
import com.supersavedriving.user.core.util.ToolUtil;
@@ -14,7 +15,10 @@
import com.supersavedriving.user.modular.system.util.MallBook.model.InterfaceResponse;
import com.supersavedriving.user.modular.system.util.MallBook.util.RSASignature;
import com.supersavedriving.user.modular.system.util.huawei.OBSUtil;
import com.supersavedriving.user.modular.system.util.huawei.SMSUtil;
import com.supersavedriving.user.modular.system.util.qianyuntong.NCOSSUtil;
import com.supersavedriving.user.modular.system.util.qianyuntong.QianYunTongConfig;
import com.supersavedriving.user.modular.system.util.qianyuntong.SMSUtil;
import com.supersavedriving.user.modular.system.util.qianyuntong.model.SendSmsRequest;
import com.supersavedriving.user.modular.system.util.weChat.WeChatUtil;
import com.supersavedriving.user.modular.system.warpper.*;
import io.swagger.annotations.ApiImplicitParam;
@@ -25,6 +29,7 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
@@ -73,6 +78,9 @@
    private TCheckCarActivityService  checkCarActivityService;
    @Autowired
    private ITBranchOfficeAreaService branchOfficeAreaService;
    @Resource
    private QianYunTongConfig qianYunTongConfig;
@@ -279,8 +287,29 @@
            String name = file.getOriginalFilename();
            name = UUIDUtil.getRandomCode() + name.substring(name.lastIndexOf("."));
//            String s = OBSUtil.putObjectToBucket(inputStream, name);
            String s = OssUploadUtil.ossUpload(file);
            return ResponseWarpper.success(s);
//            String s = OssUploadUtil.ossUpload(file);
            String bucketName = qianYunTongConfig.getBucketName();
            Bucket grjyTest = NCOSSUtil.getBucketInfo(bucketName);
            if (null == grjyTest) {
                //创建桶
                Boolean bucket = NCOSSUtil.createBucket(bucketName);
                if (!bucket) {
                    throw new RuntimeException("创建存储桶失败");
                }
                //设置桶策略
                String policyText = "{\"Version\":\"2025-06-23\",\"Statement\":[{\"Sid\":\"Stmt20250623\",\"Action\":[\"GetObject\"],\"Effect\":\"Allow\",\"Resource\":\"" + bucketName + "/*\",\"Principal\":\"*\"}]}";
                Boolean bucketPolicy = NCOSSUtil.setBucketPolicy(bucketName, policyText);
                if (!bucketPolicy) {
                    throw new RuntimeException("设置桶策略失败");
                }
            }
            //上传对象
            String key = "imgs/daijia/user/" + name;
            String object = NCOSSUtil.putObject(bucketName, key, inputStream);
            if (null == object) {
                throw new RuntimeException("上传图片失败");
            }
            return ResponseWarpper.success("https://traffic.qytzt.cn/v1/AUTH_" + qianYunTongConfig.getAccount() + "/" + bucketName + "/" + key);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
@@ -448,7 +477,7 @@
    }
    @ResponseBody
    @PostMapping("/api/appUser/queryUsedCouponNum")
    @PostMapping("/api/appUser/queryCheckUsedCouponNum")
    @ApiOperation(value = "获取已使用车检优惠券数量", tags = {"用户端-个人中心(车检)"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
@@ -624,9 +653,16 @@
            return ResponseWarpper.success(ResultUtil.paranErr("phone"));
        }
        try {
            String numberRandom = UUIDUtil.getNumberRandom(5);
//            SMSUtil.send(phone, "1d0f0cbe5b214b0d8efa891730eb532a", "[\"" + numberRandom + "\"]");
            String sData = aLiSendSms.sendSms(phone,"SMS_154775435", "{\"code\":\"" + numberRandom + "\"}");
            String numberRandom = UUIDUtil.getNumberRandom(4);
            SendSmsRequest request = new SendSmsRequest();
            request.setDestAddress(phone);
            request.setTemplateId("TPL202410290001");
            Map<String, String> templateParams = new HashMap<>();
            templateParams.put("code", numberRandom);
            request.setTemplateParams(templateParams);
            request.setCode("code");
            request.setSpId("T8d5hdfg");
            SMSUtil.sendSms(request);
            redisUtil.setStrValue(receiver + phone, numberRandom, 300);//5分钟有效期
            return ResponseWarpper.success(ResultUtil.success());
        }catch (Exception e){
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/OrderMapper.xml
@@ -98,7 +98,7 @@
    <select id="queryMyOrder" resultType="com.supersavedriving.user.modular.system.warpper.OrderListWarpper">
        select
        id,
        '超省新代驾订单' as title,
        '黔云通代驾订单' as title,
        startAddress,
        endAddress,
        state,
@@ -112,7 +112,7 @@
    <select id="queryNotInvoiceOrder" resultType="com.supersavedriving.user.modular.system.warpper.OrderListWarpper">
        select
        id,
        '超省新代驾' as title,
        '黔云通代驾' as title,
        startAddress,
        endAddress,
        state,
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java
@@ -189,7 +189,7 @@
            if(null == appUser){
                appUser = new AppUser();
                appUser.setNickname("亲爱的用户");
                appUser.setAvatar("https://csxdj.obs.cn-south-1.myhuaweicloud.com:443/9af2cadb5d0d42d5b9da37f0c6789a66.png");
                appUser.setAvatar("https://traffic.qytzt.cn/v1/AUTH_d8bef0a04db511f0b79d01a3e2b7587e/qyt20250702/imgs/management/d081e7a9-13d4-4eec-afb6-afd10885a664.png");
                appUser.setPhone(purePhoneNumber);
                appUser.setOpenid(openid);
                appUser.setUnionid(code2Session.getUnionid());
@@ -271,7 +271,7 @@
            if(null == appUser){
                appUser = new AppUser();
                appUser.setNickname("亲爱的用户");
                appUser.setAvatar("https://csxdj.obs.cn-south-1.myhuaweicloud.com:443/9af2cadb5d0d42d5b9da37f0c6789a66.png");
                appUser.setAvatar("https://traffic.qytzt.cn/v1/AUTH_d8bef0a04db511f0b79d01a3e2b7587e/qyt20250702/imgs/management/d081e7a9-13d4-4eec-afb6-afd10885a664.png");
                appUser.setPhone(phone);
                appUser.setOpenid(openid);
                appUser.setUnionid(code2Session.getUnionid());
@@ -538,7 +538,7 @@
                    //创建新的用户
                    appUser = new AppUser();
                    appUser.setNickname("亲爱的用户");
                    appUser.setAvatar("https://csxdj.obs.cn-south-1.myhuaweicloud.com:443/9af2cadb5d0d42d5b9da37f0c6789a66.png");
                    appUser.setAvatar("https://traffic.qytzt.cn/v1/AUTH_d8bef0a04db511f0b79d01a3e2b7587e/qyt20250702/imgs/management/d081e7a9-13d4-4eec-afb6-afd10885a664.png");
                    appUser.setPhone(userPhone);
                    appUser.setAccountBalance(0D);
                    appUser.setStatus(1);
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/DriverServiceImpl.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.heredata.hos.model.bucket.Bucket;
import com.supersavedriving.user.core.util.ToolUtil;
import com.supersavedriving.user.modular.system.dao.DriverMapper;
import com.supersavedriving.user.modular.system.model.*;
@@ -13,6 +14,8 @@
import com.supersavedriving.user.modular.system.util.UUIDUtil;
import com.supersavedriving.user.modular.system.util.huawei.OBSUtil;
import com.supersavedriving.user.modular.system.util.mongodb.model.Location;
import com.supersavedriving.user.modular.system.util.qianyuntong.NCOSSUtil;
import com.supersavedriving.user.modular.system.util.qianyuntong.QianYunTongConfig;
import com.supersavedriving.user.modular.system.util.weChat.WeChatUtil;
import com.supersavedriving.user.modular.system.warpper.DriverRegisterWarpper;
import com.supersavedriving.user.modular.system.warpper.NearbyDriverWarpper;
@@ -26,12 +29,10 @@
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -68,6 +69,9 @@
    @Autowired
    private ITBranchOfficeAreaService branchOfficeAreaService;
    @Resource
    private QianYunTongConfig qianYunTongConfig;
@@ -250,7 +254,30 @@
    //生成小程序二维码
    public String wechatMiniProgramORCode(Integer driverId) throws Exception{
        InputStream release = weChatUtil.getwxacodeunlimit("pages/index/index", "driverId=" + driverId, "release");
        String s = OBSUtil.putObjectToBucket(release, "driver_" + driverId);
        return s;
//        String s = OBSUtil.putObjectToBucket(release, "driver_" + driverId);
        String pictureName = "driver_" + driverId + ".png";
        String bucketName = qianYunTongConfig.getBucketName();
        Bucket grjyTest = NCOSSUtil.getBucketInfo(bucketName);
        if (null == grjyTest) {
            //创建桶
            Boolean bucket = NCOSSUtil.createBucket(bucketName);
            if (!bucket) {
                throw new RuntimeException("创建存储桶失败");
            }
            //设置桶策略
            String policyText = "{\"Version\":\"2025-06-23\",\"Statement\":[{\"Sid\":\"Stmt20250623\",\"Action\":[\"GetObject\"],\"Effect\":\"Allow\",\"Resource\":\"" + bucketName + "/*\",\"Principal\":\"*\"}]}";
            Boolean bucketPolicy = NCOSSUtil.setBucketPolicy(bucketName, policyText);
            if (!bucketPolicy) {
                throw new RuntimeException("设置桶策略失败");
            }
        }
        //上传对象
        String key = "imgs/daijia/driver/" + pictureName;
        String object = NCOSSUtil.putObject(bucketName, key, release);
        if (null == object) {
            throw new RuntimeException("上传图片失败");
        }
        return "https://traffic.qytzt.cn/v1/AUTH_" + qianYunTongConfig.getAccount() + "/" + bucketName + "/" + key;
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/ALiSendSms.java
@@ -21,8 +21,8 @@
    // 设置鉴权参数,初始化客户端
    private DefaultProfile profile = DefaultProfile.getProfile(
            "cn-hangzhou",// 地域ID
            "LTAI5tLPQCnW4CWk9hd1uxSM",// 您的AccessKey ID
            "Efm7ZgHQ0136Dyf8a7KxnmfQtchEt7");// 您的AccessKey Secret
            "111",// 您的AccessKey ID
            "111");// 您的AccessKey Secret
    private IAcsClient client = new DefaultAcsClient(profile);
    private static void log_print(String functionName, Object result) {
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/GaoDe/MapConfig.java
@@ -10,5 +10,5 @@
    /**
     * 高德key
     */
    String key = "5053ca611c0106e01a665ce7ab84ff26";
    String key = "ea7326a77175aba0e9435859b17bca36";
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/MiniAppPay.java
@@ -19,7 +19,7 @@
    public static final String MD5_KEY = "qdg4v9uxeszd8ljtod7yy51hh1xahrj1zfmrwvo1dapdasi968rg2rg59bibl5xnxn3nrbziuwfuw1lax2r040pcc7cdgwx0v9w8sxtku2k7ckt6cyoqvobmj77f6im5";
    public static final String MCH_NO = "M1718787621";
    public static final String APP_ID = "66729e25e4b013c52e29d8d2";
    public static final String APP_ID = "1111";
    @Value("${callbackPath}")
    private static String callbackPath;//支付回调网关地址
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/OssUploadUtil.java
@@ -13,9 +13,9 @@
public class OssUploadUtil {
    //OSS图片访问域名
    public static String oss_domain = "https://newok.oss-cn-shenzhen.aliyuncs.com/";
    public static String accessKeyId = "LTAI5tLPQCnW4CWk9hd1uxSM";
    public static String accessKeySecret = "Efm7ZgHQ0136Dyf8a7KxnmfQtchEt7";
    public static String bucketName="newok";
    public static String accessKeyId = "111";
    public static String accessKeySecret = "111";
    public static String bucketName="111";
    public static String endpoint = "oss-cn-shenzhen.aliyuncs.com";
    
    public static OSSClient ossClient = new OSSClient(endpoint, accessKeyId,accessKeySecret);
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/SpringContextsUtil.java
New file
@@ -0,0 +1,37 @@
package com.supersavedriving.user.modular.system.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContextsUtil implements ApplicationContextAware{
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (SpringContextsUtil.applicationContext == null) {
            SpringContextsUtil.applicationContext = applicationContext;
        }
    }
    // 获取applicationContext
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
    // 通过name获取 Bean.
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }
    // 通过class获取Bean.
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }
    // 通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name, Class<T> clazz) {
        System.out.println(getApplicationContext().getBean(name, clazz));
        return getApplicationContext().getBean(name, clazz);
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/huawei/HWSMSUtil.java
File was renamed from user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/huawei/SMSUtil.java
@@ -16,7 +16,7 @@
 * @author zhibing.pu
 * @date 2023/3/15 11:23
 */
public class SMSUtil {
public class HWSMSUtil {
    //无需修改,用于格式化鉴权头域,给"X-WSSE"参数赋值
    private static final String WSSE_HEADER_FORMAT = "UsernameToken Username=\"%s\",PasswordDigest=\"%s\",Nonce=\"%s\",Created=\"%s\"";
    //无需修改,用于格式化鉴权头域,给"Authorization"参数赋值
@@ -32,14 +32,14 @@
    public static void send(String phones, String templateId, String templateParas) throws Exception {
        //必填,请参考"开发准备"获取如下数据,替换为实际值
        String url = "https://smsapi.cn-south-1.myhuaweicloud.com:443/sms/batchSendSms/v1"; //APP接入地址(在控制台"应用管理"页面获取)+接口访问URI
        String appKey = "9I0xrhdGXthf1fv9nn8G3glZ6Zng"; //APP_Key
        String appSecret = "U7WxwX2LVk2YD6KAHxjc9tdnXoM9"; //APP_Secret
        String sender = "8823031523874"; //国内短信签名通道号或国际/港澳台短信通道号
        String appKey = "111"; //APP_Key
        String appSecret = "111"; //APP_Secret
        String sender = "111"; //国内短信签名通道号或国际/港澳台短信通道号
//        String templateId = "8ff55eac1d0b478ab3c06c3c6a492300"; //模板ID
        //条件必填,国内短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称
        //国际/港澳台短信不用关注该参数
        String signature = "超省新代驾"; //签名名称
        String signature = "111"; //签名名称
        //必填,全局号码格式(包含国家码),示例:+8615123456789,多个号码之间用英文逗号分隔
//        String receiver = "+86151****6789,+86152****7890"; //短信接收人号码
@@ -242,7 +242,7 @@
    public static void main(String[] ages){
        try {
            SMSUtil.send("15828353127", "1d0f0cbe5b214b0d8efa891730eb532a", "[\"" + 123456 + "\"]");
            HWSMSUtil.send("15828353127", "1d0f0cbe5b214b0d8efa891730eb532a", "[\"" + 123456 + "\"]");
        } catch (Exception e) {
            e.printStackTrace();
        }
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/huawei/OBSUtil.java
@@ -14,9 +14,9 @@
public class OBSUtil {
    public static String endPoint = "https://obs.cn-south-1.myhuaweicloud.com";
    public static String ak = "N52IGR6DHOC3JAZFHZIW";
    public static String sk = "jq7Q7jnFS4Gxamwh3naN2sbNKwQQ7cZISPVumGBS";
    public static String bucketname = "csxdj";
    public static String ak = "111";
    public static String sk = "111";
    public static String bucketname = "111";
    /**
     * 上传文件
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/AESUtils.java
New file
@@ -0,0 +1,155 @@
package com.supersavedriving.user.modular.system.util.qianyuntong;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class AESUtils {
    private static Logger logger = LoggerFactory.getLogger(AESUtils.class);
    private static String ALG = "AES";
    private static String CHARSET = "UTF-8";
    private static String KEY1 = "lur8apa4zu484pvj";
    public AESUtils() {
    }
    private static byte[] encrypt(byte[] content, String password, String iv) {
        try {
            SecretKeySpec key = new SecretKeySpec(password.getBytes(CHARSET), ALG);
            Cipher cipher = Cipher.getInstance(ALG);
            cipher.init(1, key);
            return cipher.doFinal(content);
        } catch (NoSuchAlgorithmException var5) {
            var5.printStackTrace();
        } catch (NoSuchPaddingException var6) {
            var6.printStackTrace();
        } catch (InvalidKeyException var7) {
            var7.printStackTrace();
        } catch (UnsupportedEncodingException var8) {
            var8.printStackTrace();
        } catch (IllegalBlockSizeException var9) {
            var9.printStackTrace();
        } catch (BadPaddingException var10) {
            var10.printStackTrace();
        }
        return null;
    }
    private static byte[] decrypt(byte[] content, String password, String iv) {
        try {
            SecretKeySpec key = new SecretKeySpec(password.getBytes(CHARSET), ALG);
            Cipher cipher = Cipher.getInstance(ALG);
            cipher.init(2, key);
            return cipher.doFinal(content);
        } catch (NoSuchAlgorithmException var5) {
            var5.printStackTrace();
        } catch (NoSuchPaddingException var6) {
            var6.printStackTrace();
        } catch (InvalidKeyException var7) {
            var7.printStackTrace();
        } catch (IllegalBlockSizeException var8) {
            var8.printStackTrace();
        } catch (BadPaddingException var9) {
            var9.printStackTrace();
        } catch (UnsupportedEncodingException var10) {
            var10.printStackTrace();
        }
        return null;
    }
    private static String parseByte2HexStr(byte[] buf) {
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < buf.length; ++i) {
            String hex = Integer.toHexString(buf[i] & 255);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }
    private static byte[] parseHexStr2Byte(String hexStr) {
        if (hexStr.length() < 1) {
            return null;
        } else {
            byte[] result = new byte[hexStr.length() / 2];
            for(int i = 0; i < hexStr.length() / 2; ++i) {
                int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
                int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
                result[i] = (byte)(high * 16 + low);
            }
            return result;
        }
    }
    public static String decryptHex(String content) {
        return decryptHex(content, KEY1);
    }
    public static String decryptHex(String content, String password) {
        try {
            return new String(decrypt(parseHexStr2Byte(content), password, ""), CHARSET);
        } catch (Exception var3) {
            return "";
        }
    }
    public static String decryptBase64(String content) {
        try {
            return decryptBase64(content, KEY1);
        } catch (Exception var2) {
            return "";
        }
    }
    public static String decryptBase64(String content, String password) {
        try {
            return new String(decrypt(Base64.decodeBase64(content), password, ""), CHARSET);
        } catch (Exception var3) {
            return "";
        }
    }
    public static String encryptHex(String content) {
        return encryptHex(content, KEY1);
    }
    public static String encryptHex(String content, String password) {
        try {
            return parseByte2HexStr(encrypt(content.getBytes(CHARSET), password, ""));
        } catch (Exception var3) {
            return "";
        }
    }
    public static String encryptBase64(String content) {
        return encryptBase64(content, KEY1);
    }
    public static String encryptBase64(String content, String password) {
        try {
            return Base64.encodeBase64String(encrypt(content.getBytes(CHARSET), password, ""));
        } catch (Exception var3) {
            logger.error("", var3);
            return "";
        }
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/EmployeeUtil.java
New file
@@ -0,0 +1,234 @@
package com.supersavedriving.user.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.supersavedriving.user.modular.system.util.ResultUtil;
import com.supersavedriving.user.modular.system.util.SpringContextsUtil;
import com.supersavedriving.user.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("15828353127");
        request.setEntercode("981100006005951");
        request.setEmpName("蒲");
        request.setEmpNickname("蒲");
        request.setLoginNo("15828353125");
        request.setEmpSex("男");
        request.setMphone("15828353125");
        request.setEmail("15828353125@qyt.com");
        request.setDeptId(0);
        request.setPositionId(1);
        request.setSuperLevel(0);
        request.setHideMobile(0);
        ResultUtil<SaveStaffNode> resultUtil = EmployeeUtil.saveStaffNode(request);
        System.out.println(resultUtil.getData());
    }
    /**
     * 企业增加员工
     *
     * @param request
     * @return
     */
    public static 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");
            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);
    }
    /**
     * 企业修改员工信息
     * @param request
     * @return
     */
    public static Boolean 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);
            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 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);
            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;
    }
    /**
     * 根据员工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;
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/EnterpriseUtil.java
New file
@@ -0,0 +1,316 @@
package com.supersavedriving.user.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.supersavedriving.user.modular.system.util.SpringContextsUtil;
import com.supersavedriving.user.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();
    public static void main(String[] args) {
//        CheckEnterExist checkEnterNameExist = checkEnterNameExist("黔南云码通数字产业运营有限公司");
//        System.err.println(checkEnterNameExist);
        CreateEnterpriseRequest request = new CreateEnterpriseRequest();
        request.setName("成都喜望科技有限公司");
        request.setNickName("成都喜望");
        request.setIndustry_code("123456");
        request.setMobile("15828353127");
        CreateEnterprise enterprise = EnterpriseUtil.createEnterprise(request);
        System.out.println(enterprise);
    }
    /**
     * 根据社会信用代码判断企业是否已存在
     *
     * @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("status");
        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);
            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.getObject("data", CreateEnterprise.class);
    }
    /**
     * 删除企业信息
     *
     * @param enterNum 企业编号
     * @param operator 管理员手机号码
     * @return
     */
    public static boolean 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);
            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;
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/NCOSSUtil.java
New file
@@ -0,0 +1,243 @@
package com.supersavedriving.user.modular.system.util.qianyuntong;
import com.heredata.hos.HOS;
import com.heredata.hos.HOSClientBuilder;
import com.heredata.hos.model.CreateBucketRequest;
import com.heredata.hos.model.HOSObject;
import com.heredata.hos.model.PutObjectRequest;
import com.heredata.hos.model.PutObjectResult;
import com.heredata.hos.model.bucket.Bucket;
import com.heredata.model.VoidResult;
import com.supersavedriving.user.modular.system.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import java.io.InputStream;
/**
 * OSS 工具类
 * @author zhibing.pu
 * @Date 2025/6/23 17:50
 */
@Slf4j
public class NCOSSUtil {
    private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
    /**
     * 创建桶
     * @param bucketName
     * @return
     */
    public static Boolean createBucket(String bucketName) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            // 创建请求对象,并且设置创建桶名为"example"的桶
            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
            VoidResult result = hos.createBucket(createBucketRequest);
            if (result.getResponse().isSuccessful()) {
                log.info("创建桶成功:" + bucketName);
                return true;
            }
        } catch (Exception e){
            log.info("创建桶失败:" + bucketName);
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 查询桶详情
     * @param bucketName
     * @return
     */
    public static Bucket getBucketInfo(String bucketName) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            // 查询桶名为"example"的详情
            Bucket bucket = hos.getBucketInfo(bucketName);
            return bucket;
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 删除桶
     * @param bucketName
     * @return
     */
    public static Boolean deleteBucket(String bucketName) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            VoidResult result = hos.deleteBucket(bucketName);
            if (result.getResponse().isSuccessful()) {
                log.info("删除桶成功:" + bucketName);
                return true;
            }
        } catch (Exception e){
            log.info("删除桶成功:" + bucketName);
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 设置桶策略
     * @param bucketName    桶名
     * @param policyText    策略规则字符串
     * {
     *   // 策略配置的版本号,由用户定义
     *   "Version": "2012-10-17",
     *   //  策略规则配置,可指定多条策略规则
     *   "Statement": [{
     *     // 策略规则ID,可用户指定,如不指定则服务自动生成一条
     *     "Sid": "sid",
     *     // 策略规则指定的HOS API接口标识,可参照下表填写
     *     "Action": [
     *       "action"
     *     ],
     *     // 策略规则效果,具体表现为允许或拒绝,有效值为Allow(允许),Deny(拒绝);
     *     "Effect": "Allow",
     *     // 策略规则指定的资源参照下面resource配置
     *     "Resource": "resource",
     *     // 策略规则指定的授权人 参照下面Principal配置
     *     "Principal": {
     *       "HWS": [
     *         "account_id:root"
     *       ]
     *     }
     *   }
     *   ]
     * }
     * @return
     */
    public static Boolean setBucketPolicy(String bucketName, String policyText) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        // 桶策略字符串
        try {
            VoidResult result = hos.setBucketPolicy(bucketName, policyText);
            if (result.getResponse().isSuccessful()) {
                log.info("设置桶策略成功:" + bucketName);
                return true;
            }
        } catch (Exception e) {
            log.info("设置桶策略失败:" + bucketName);
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 上传对象
     * @param bucketName    桶名称
     * @param key           存储文件名
     * @param inputStream      上传文件流
     * @return  对象唯一标识
     */
    public static String putObject(String bucketName, String key, InputStream inputStream) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key , inputStream);
            PutObjectResult example = hos.putObject(putObjectRequest);
            if (example.getResponse().isSuccessful()) {
                log.info("上传对象成功:" + bucketName + "--->" + key);
                return example.getETag();
            }
        } catch (Exception e) {
            log.info("上传对象成功:" + bucketName);
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 查询对象
     * @param bucketName    桶名称
     * @param key           存储文件名
     * @return
     */
    public static HOSObject getObject(String bucketName, String key) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            HOSObject example = hos.getObject(bucketName, key);
            if (example.getResponse().isSuccessful()) {
                log.info("查询对象成功:" + bucketName + "--->" + key);
                return example;
            }
        } catch (Exception e) {
            log.info("查询对象失败:" + bucketName);
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 删除对象
     * @param bucketName     桶名称
     * @param key          存储文件名
     * @return
     */
    public static Boolean deleteObject(String bucketName, String key) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            VoidResult example = hos.deleteObject(bucketName, key);
            if (example.getResponse().isSuccessful()) {
                log.info("删除对象成功:" + bucketName + "--->" + key);
                return true;
            }
        } catch (Exception e) {
            log.info("删除对象失败:" + bucketName + "--->" + key);
            e.printStackTrace();
        }
        return false;
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/OrderUtil.java
New file
@@ -0,0 +1,682 @@
package com.supersavedriving.user.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.supersavedriving.user.modular.system.util.SpringContextsUtil;
import com.supersavedriving.user.modular.system.util.UUIDUtil;
import com.supersavedriving.user.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("5400004");
        tradePayOff1Data.setTimeout("72H");
        tradePayOff1Data.setScene("TRAFFIC");
        tradePayOff1Data.setCurrency("RMB");
        tradePayOff1Data.setNeedLoginFlag("N");
        tradePayOff1Data.setAccessMode("APP");
        tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> {
            goodsInfoRequest.setId("981100006005901");
            goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
            goodsInfoRequest.setAreaInfo("520100");
            goodsInfoRequest.setPayType("0");
            goodsInfoRequest.setBusinessType("10408");
        });
        TradeRequest request = new TradeRequest<TradePayOff1Data>();
        request.setSceneId("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("5400004");
        tradeOrderCreateData.setCurrency("RMB");
        tradeOrderCreateData.setNeedLoginFlag("N");
        tradeOrderCreateData.setAccessMode("APP");
        tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> {
            goodsInfoRequest.setId("981100006005901");
            goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
            goodsInfoRequest.setAreaInfo("520100");
            goodsInfoRequest.setPayType("0");
            goodsInfoRequest.setBusinessType("10408");
        });
        TradeRequest request = new TradeRequest<TradeOrderCreateData>();
        request.setSceneId("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("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("5400005");
        tradePayOffData.setTimeout("72H");
        tradePayOffData.setScene("TRAFFIC");
        tradePayOffData.setCurrency("RMB");
        tradePayOffData.setRetUrl("");
        InetAddress inetAddress = null;
        try {
            inetAddress = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            throw new RuntimeException(e);
        }
        String ip = inetAddress.getHostAddress();
        tradePayOffData.setClientIp(ip);
        tradePayOffData.setNeedLoginFlag("N");
        tradePayOffData.setAccessMode("APP");
        List<PaymentInfoRequest> paymentInfoRequests = new ArrayList<>();
        PaymentInfoRequest paymentInfoRequest = new PaymentInfoRequest();
        paymentInfoRequest.setPayModeId("501212");
        paymentInfoRequest.setRealFee(tradePayOffData.getTotalFee().toString());
        paymentInfoRequest.setTradeFee(tradePayOffData.getTotalFee().toString());
        paymentInfoRequest.setAccountTyp("501");
        paymentInfoRequests.add(paymentInfoRequest);
        tradePayOffData.setPaymentInfos(paymentInfoRequests);
        List<GoodsInfo> goodsInfo = new ArrayList<>();
        GoodsInfo goodsInfo1 = new GoodsInfo();
        goodsInfo1.setMerchantCode("B00000905");
        goodsInfo1.setCustId("CB0000004686");
        goodsInfo1.setCustName("证联消费平台交易客户");
        goodsInfo1.setBusinessType("10408");
        goodsInfo1.setAgreementNo("00000000468618354161754464398681");
        goodsInfo1.setProfitSharing("1");
        goodsInfo.add(goodsInfo1);
        tradePayOffData.setGoodsInfo(goodsInfo);
        TradeRequest request = new TradeRequest<TradePayOffData>();
        request.setSceneId("1774717104844095488");
        request.setAppId(qianYunTongConfig.getAppkey());
        request.setConfigVersion(2);
        request.setRequestId(UUIDUtil.getRandomCode());
        request.setData(tradePayOffData);
        //请求路径
        String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
        //私钥文件
        String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = qianYunTongConfig.getAppkey();//appkey
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json");
        Map<String, Object> contentMap = new HashMap<String, Object>();
        Date nowdate = new Date();
        SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
        String timeStamp = date.format(nowdate);
        String messageId = UUIDUtil.getRandomCode();
        contentMap.put(SystemParameterNames.getAppKey(), appKey);
        contentMap.put(SystemParameterNames.getMessage_id(), messageId);
        contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
        contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
        contentMap.put("content", new Gson().toJson(request));
        log.info("【(补偿单)拉起支付】请求地址:" + url);
        log.info("【(补偿单)拉起支付】请求参数:" + JSON.toJSONString(contentMap));
        String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
        log.info("【(补偿单)拉起支付】请求结果:" + result);
        JSONObject jsonObject = JSON.parseObject(result);
        String resCode = jsonObject.getString("resCode");
        if (!"000000".equals(resCode)) {
            log.error("【(补偿单)拉起支付】失败:" + jsonObject.getString("resMsg"));
            throw new RuntimeException("【(补偿单)拉起支付】失败:" + jsonObject.getString("resMsg"));
        }
        JSONObject busiResp = jsonObject.getJSONObject("busiResp");
        PayInfo payInfo = busiResp.getObject("payInfo", PayInfo.class);
        return payInfo;
    }
    /**
     * 查询支付单信息
     *
     * @param getPaymentInfoDataRequest
     * @return
     */
    public static GetPaymentInfo paymentInfo(GetPaymentInfoDataRequest getPaymentInfoDataRequest) {
        getPaymentInfoDataRequest.setPartnerId("5400004");
        GetPaymentInfoRequest request = new GetPaymentInfoRequest();
        request.setRequstType("POST");
        request.setBusType(1);
        request.setData(getPaymentInfoDataRequest);
        //请求路径
        String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentInfo";
        //私钥文件
        String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = qianYunTongConfig.getAppkey();//appkey
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json");
        Map<String, Object> contentMap = new HashMap<String, Object>();
        Date nowdate = new Date();
        SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
        String timeStamp = date.format(nowdate);
        String messageId = UUIDUtil.getRandomCode();
        contentMap.put(SystemParameterNames.getAppKey(), appKey);
        contentMap.put(SystemParameterNames.getMessage_id(), messageId);
        contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
        contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
        contentMap.put("content", new Gson().toJson(request));
        log.info("【查询支付单信息】请求地址:" + url);
        log.info("【查询支付单信息】请求参数:" + JSON.toJSONString(contentMap));
        String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
        log.info("【查询支付单信息】请求结果:" + result);
        JSONObject jsonObject = JSON.parseObject(result);
        String resCode = jsonObject.getString("retCode");
        if (!"0".equals(resCode)) {
            log.error("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
            throw new RuntimeException("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
        }
        JSONObject object = jsonObject.getJSONObject("object");
        String retCode = object.getString("retCode");
        if (!"000000".equals(retCode)) {
            log.error("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
            throw new RuntimeException("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
        }
        GetPaymentInfo payInfo = object.getObject("data", GetPaymentInfo.class);
        return payInfo;
    }
    /**
     * (补偿单)支付成功通知
     *
     * @param request
     * @return
     */
    public static OrderInfo paymentOrder(PaymentOrderRequest request) {
        request.setScene("TRAFFIC");
        request.setMhltiCenterAppId("52270015");
        request.setPayType(4);
        request.setPayChannel(6);
        request.setIsCompensate(1);
        //请求路径
        String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentOrder";
        //私钥文件
        String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
        //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
        String appKey = qianYunTongConfig.getAppkey();//appkey
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json");
        Map<String, Object> contentMap = new HashMap<String, Object>();
        Date nowdate = new Date();
        SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
        String timeStamp = date.format(nowdate);
        String messageId = UUIDUtil.getRandomCode();
        contentMap.put(SystemParameterNames.getAppKey(), appKey);
        contentMap.put(SystemParameterNames.getMessage_id(), messageId);
        contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
        contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
        contentMap.put("content", new Gson().toJson(request));
        log.info("【(补偿单)支付成功通知】请求地址:" + url);
        log.info("【(补偿单)支付成功通知】请求参数:" + JSON.toJSONString(contentMap));
        String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
        log.info("【(补偿单)支付成功通知】请求结果:" + result);
        JSONObject jsonObject = JSON.parseObject(result);
        String resCode = jsonObject.getString("resCode");
        if (!"000000".equals(resCode)) {
            log.error("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
            throw new RuntimeException("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
        }
        OrderInfo orderInfo = jsonObject.getObject("busiResp", OrderInfo.class);
        return orderInfo;
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java
New file
@@ -0,0 +1,203 @@
package com.supersavedriving.user.modular.system.util.qianyuntong;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * @author zhibing.pu
 * @Date 2025/7/8 11:31
 */
@Component
public class QianYunTongConfig {
    @Value("${spring.profiles.active}")
    private String activeProfile;
    /**
     * appkey
     */
    private String appkey;
    /**
     * 私钥地址
     */
    private String privateKeyPath;
    /**
     * 消费者账号
     */
    private String userName;
    /**
     * 状态
     * 1:生产环境
     * 2:测试环境
     */
    private String status;
    /**
     * API地址
     */
    private String apiUrl;
    /**
     * 桶名
     */
    private String bucketName;
    /**
     * 小程序appId
     */
    private String appId;
    /**
     * HOS的基础路径(公共前缀)
     */
    private String endPoint;
    /**
     * 账户的ID
     */
    private String account;
    /**
     * 向UAAS服务请求到的access_key
     */
    private String accessKey;
    /**
     * 向UAAS服务请求到的secret_key
     */
    private String secretKey;
    public String getActiveProfile() {
        return activeProfile;
    }
    public void setActiveProfile(String activeProfile) {
        this.activeProfile = activeProfile;
    }
    public String getAppkey() {
        return appkey;
    }
    public void setAppkey(String appkey) {
        this.appkey = appkey;
    }
    public String getPrivateKeyPath() {
        return privateKeyPath;
    }
    public void setPrivateKeyPath(String privateKeyPath) {
        this.privateKeyPath = privateKeyPath;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getApiUrl() {
        return apiUrl;
    }
    public void setApiUrl(String apiUrl) {
        this.apiUrl = apiUrl;
    }
    public String getBucketName() {
        return bucketName;
    }
    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getEndPoint() {
        return endPoint;
    }
    public void setEndPoint(String endPoint) {
        this.endPoint = endPoint;
    }
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getAccessKey() {
        return accessKey;
    }
    public void setAccessKey(String accessKey) {
        this.accessKey = accessKey;
    }
    public String getSecretKey() {
        return secretKey;
    }
    public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
    }
    public QianYunTongConfig getQianYunTongConfig() {
        if("dev".equals(activeProfile)){
            this.appkey = "10001104";
            this.privateKeyPath = "C:\\Users\\Admin\\Desktop\\qyt\\private_key_test.pem";
            this.userName = "xiaofei";
            this.status = "1";
            this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
            this.setBucketName("bucuTest0625");
            this.setAppId("wxcc3c9058e2b294db");
            this.setEndPoint("http://119.4.112.68:27741/v1");
            this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
            this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
            this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
        }
        if("test".equals(activeProfile)){
            this.setAppkey("10001104");
            this.setPrivateKeyPath("/etraffic/server/private_key_test.pem");
            this.setUserName("xiaofei");
            this.setStatus("1");
            this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
            this.setBucketName("bucuTest0625");
            this.setAppId("wxcc3c9058e2b294db");
            this.setEndPoint("http://119.4.112.68:27741/v1");
            this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
            this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
            this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
        }
        if("prod".equals(activeProfile)){
            this.setAppkey("10001104");
            this.setPrivateKeyPath("/root/server/app/key/private_key.pem");
            this.setUserName("xiwang");
            this.setStatus("1");
            this.setApiUrl("http://jjzhongtai.stqcloud.com:10010");
            this.setBucketName("qyt20250702");
            this.setAppId("wxcc3c9058e2b294db");
            this.setEndPoint("http://119.4.112.68:27741/v1");
            this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
            this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
            this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
        }
        return this;
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/SMSUtil.java
New file
@@ -0,0 +1,129 @@
package com.supersavedriving.user.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.supersavedriving.user.modular.system.util.SpringContextsUtil;
import com.supersavedriving.user.modular.system.util.qianyuntong.model.SendSmsRequest;
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");
    }
    public static void main(String[] args) {
        SendSmsRequest request = new SendSmsRequest();
        request.setDestAddress("15828353127");
        request.setTemplateId("TPL202507300002");
        Map<String, String> templateParams = new HashMap<>();
//        templateParams.put("code", "1234");
        request.setTemplateParams(templateParams);
//        request.setCode("code");
        request.setSpId("Y86asr7J");
        SMSUtil.sendSms(request);
    }
    /**
     * 根据模板发送短信
     *
     * @param request
     * @return
     */
    public static Boolean sendSms(SendSmsRequest request) {
        //请求路径
        String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/sendSmsByTpl";
        //私钥文件
        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;
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/UserUtil.java
New file
@@ -0,0 +1,324 @@
package com.supersavedriving.user.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.supersavedriving.user.modular.system.util.SpringContextsUtil;
import com.supersavedriving.user.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();
    public static void main(String[] args) {
//        List<QYTUserInfo> userInfoByPhone = getUserInfoByPhone("15828353127");
//        System.out.println(userInfoByPhone);
    }
    /**
     * 根据手机号码获取人员信息
     *
     * @param mobile 手机号码
     */
    public static List<QYTUserInfo> getUserInfoByPhone(String mobile) {
        //请求路径
        String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/2.0/queryUserinfoByMobilev2";
        //私钥文件
        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", "{\"list\":[{\"mobile\":\"" + mobile + "\"}]}");
        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.getJSONObject("data").getJSONArray("list");
        List<QYTUserInfo> list = new ArrayList<>();
        for (int i = 0; i < data.size(); i++) {
            QYTUserInfo userInfo = data.getObject(i, QYTUserInfo.class);
            list.add(userInfo);
        }
        return list;
    }
    /**
     * 根据手机号码获取人员信息
     *
     * @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");
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/CheckEnterExist.java
New file
@@ -0,0 +1,40 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/6 18:12
 */
@Data
public class CheckEnterExist {
    /**
     * 企业ID
     */
    private String id;
    /**
     * 是否在公有云注册,1:已注册;0:未注册
     */
    private String isReg;
    /**
     * 创建者手机号
     */
    private String mobile;
    /**
     * 创建时间
     */
    private String createTime;
    /**
     * 法人姓名
     */
    private String larName;
    /**
     * 企业编码
     */
    private String enterCode;
    /**
     * 认证状态
     * 0:已认证;1:未认证,初始状态;2:认证不通过;3:认证中
     */
    private Integer auth;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/CreateEnterprise.java
New file
@@ -0,0 +1,46 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/9 19:43
 */
@Data
public class CreateEnterprise {
    /**
     * 企业ID
     */
    private String id;
    /**
     * 开通易信状态
     * 0:成功 1:失败
     */
    private String callYixinApi;
    /**
     * 开通办公门户状态
     * 0:成功 1:失败
     */
    private String callItdSaveCompany;
    /**
     * 开通企业官网状态
     * 0:成功 1:失败
     */
    private String callItdDredgeWebsite;
    /**
     * 电话号码
     */
    private String phone;
    /**
     * 企业idcode
     */
    private String idCode;
    /**
     * 企业节点ID
     */
    private String noteId;
    /**
     * 是否新注册企业
     */
    private String isNew;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java
New file
@@ -0,0 +1,118 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/9 18:20
 */
@Data
public class CreateEnterpriseRequest {
    /**
     * 企业名称
     */
    private String name;
    /**
     * 企业简称/昵称
     */
    private String nickName;
    /**
     * 行业编码
     */
    private String industry_code;
    /**
     * 手机号码
     */
    private String mobile;
    /**
     * 区域编码
     */
    private String area;
    /**
     * 企业地址
     */
    private String address;
    /**
     * 二级域名
     */
    private String secondRealmName;
    /**
     * 企业密码
     */
    private String password;
    /**
     * 一级行业分类描述
     */
    private String industry_level1;
    /**
     * 二级行业分类描述
     */
    private String industry_level2;
    /**
     * 企业来源编码
     */
    private String sourceCode;
    /**
     * 企业分类编码
     */
    private String typeCode;
    /**
     * 代理商id
     */
    private String elecsId;
    /**
     * 是否发送短信
     * 0:不发送,1:发送
     */
    private String smsFlag;
    /**
     * 是否激活
     * 1:激活;0:未激活
     */
    private String mobileFlag;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 邮箱是否激活
     * 1:激活;0:未激活
     */
    private String emailFlag;
    /**
     * 是否同步通讯录
     */
    private String contact_source;
    /**
     * 所属行业通用编码
     */
    private String trade_code;
    /**
     * 营业执照扫描件url
     */
    private String operScanPic;
    /**
     * 运营人员姓名
     */
    private String idcardName;
    /**
     * 运营者身份证号码
     */
    private String idcardNum;
    /**
     * 运营者身份证照片url
     */
    private String idcardPic;
    /**
     * 企业工号
     */
    private String enterID;
    /**
     * 推荐人
     */
    private String recommender;
    /**
     * 创建者姓名
     */
    private String creatorName;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/CreateOrderRequest.java
New file
@@ -0,0 +1,53 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java
New file
@@ -0,0 +1,43 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/DeleteStafNodeRequest.java
New file
@@ -0,0 +1,23 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/6 16:39
 */
@Data
public class DeleteStafNodeRequest {
    /**
     * 人员ID
     */
    private Long empId;
    /**
     * 手机号
     */
    private String mobile;
    /**
     * 企业编号
     */
    private String entercode;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java
New file
@@ -0,0 +1,72 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/6 16:32
 */
@Data
public class EditStaffNodeRequest {
    /**
     * 人员ID
     */
    private Integer empId;
    /**
     * 操作人手机号
     */
    private String mobile;
    /**
     * 操作人企业ID
     */
    private String entercode;
    /**
     * 企业ID
     */
    private Long enterId;
    /**
     * 人员显示名
     */
    private String empName;
    /**
     * 人员显示名
     */
    private String empNickname;
    /**
     * 手机号
     */
    private String mphone;
    /**
     * 登录账号
     */
    private String loginNo;
    /**
     * 人员性别(男\女)
     */
    private String empSex;
    /**
     * 人员邮箱
     */
    private String email;
    /**
     * 员工所属部门ID多个部门英文; 分割
     */
    private Integer deptId;
    /**
     * 员工职务ID
     */
    private Integer positionId;
    /**
     * 员工职务名称,如不知道ID可以直接传入名称
     */
    private String positionName;
    /**
     * 高管模式 1 是 0 不是
     */
    private Integer superLevel;
    /**
     * 隐藏号码 1 是 0 不是
     */
    private Integer hideMobile;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/EnterpriseInfo.java
New file
@@ -0,0 +1,259 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/6 17:14
 */
@Data
public class EnterpriseInfo {
    /**
     * 企业ID
     */
    private String id;
    /**
     * 企业编号
     */
    private String enter_code;
    /**
     * 企业名称
     */
    private String enter_name;
    /**
     * 是否是全员号码可见,0:是,1:否
     */
    private String visible;
    /**
     * 认证状态,0:已认证;1:未认证,初始状态;2:认证不通过;3:认证中
     */
    private String auth;
    /**
     * 认证时间
     */
    private String auth_time;
    /**
     * 认证注释
     */
    private String authRemark;
    /**
     * 运营者姓名(委托人)
     */
    private String idcard_name;
    /**
     * 运营者证件号
     */
    private String idcard_num;
    /**
     * 运营者证件扫描件URL
     */
    private String idcard_pic;
    /**
     * 统一社会信用代码
     */
    private String uscc;
    /**
     * 法人姓名
     */
    private String larName;
    /**
     * 法人电话
     */
    private String larPhone;
    /**
     * 法人身份证
     */
    private String larIdCard;
    /**
     * 法人身份证扫描件URL
     */
    private String larIdCardPic;
    /**
     * 发票名称
     */
    private String invoiceName;
    /**
     * 纳税人识别号(发票)
     */
    private String invoiceTIN;
    /**
     * 开户行名称(发票)
     */
    private String invoiceBankersName;
    /**
     * 开户行账号(发票)
     */
    private String invoiceBankersAccount;
    /**
     * 资质机构名称
     */
    private String qualificationOrgName;
    /**
     * 资质注册号/登记号
     */
    private String qualificationRegNum;
    /**
     * 资质有效开始时间
     */
    private String qualificationStartTime;
    /**
     * 资质有效结束时间
     */
    private String qualificationEndTime;
    /**
     * 资格证书扫描件URL
     */
    private String qualificationCertUrl;
    /**
     * 省份编码
     */
    private String provinceCode;
    /**
     * 地市编码
     */
    private String cityCode;
    /**
     * 区县编码
     */
    private String areaCode;
    /**
     * 乡镇编码
     */
    private String townshipCode;
    /**
     * 企业创建时间
     */
    private String enter_createdate;
    /**
     * 地址
     */
    private String address;
    /**
     * 营业期开始时间,格式:yyyy-MM-dd HH:mm:ss
     */
    private String businessTermStartTime;
    /**
     * 营业期结束时间,格式:yyyy-MM-dd HH:mm:ss
     */
    private String businessTermEndTime;
    /**
     * 企业规模
     */
    private String enterScale;
    /**
     * 创建者职位
     */
    private String creatorPosition;
    /**
     * 企业备注/介绍
     */
    private String enterRemark;
    /**
     * 企业logo
     */
    private String enterLogo;
    /**
     * 企业邮箱
     */
    private String enterEmail;
    /**
     * 企业联系电话rg_company_info.enter_tel
     */
    private String enterTel;
    /**
     * 一级行业分类编码
     */
    private String industryStr;
    /**
     * 二级行业分类编码
     */
    private String industryStr2;
    /**
     * 企业联系人姓名
     */
    private String enterLinkman;
    /**
     * 营业执照扫描件ur
     */
    private String operScanPic;
    /**
     * 身份证有效期
     */
    private String larIdCardValidity;
    /**
     * 经营地址
     */
    private String operationAddress;
    /**
     * 法人身份证背面照片
     */
    private String larIdCardPicBack;
    /**
     * 法人身份证手持
     */
    private String larIdCardPicHold;
    /**
     * 开户许可证
     */
    private String accountOpeningPermit;
    /**
     * 自定义的,例如:企业类型
     */
    private String tag1;
    /**
     * 自定义的,例如:行业类型
     */
    private String tag2;
    /**
     * 企业扩展信息
     */
    private String iformContentId;
    /**
     * 国家统计局网站提供的行政地区编码
     */
    private String area;
    /**
     * 行业编码
     */
    private String industryCode;
    /**
     * 企业创建人姓名
     */
    private String creatorName;
    /**
     * 企业创建人手机号
     */
    private String creatorMobile;
    /**
     * 管理员邮箱
     */
    private String email;
    /**
     * 企业简称
     */
    private String enterAbbreviation;
    /**
     * 营业期限
     */
    private String businessTermLong;
    /**
     * 一级行业名称
     */
    private String industryL1Name;
    /**
     * 二级行业名称
     */
    private String industryL2Name;
    /**
     * 企业介绍(全文本)
     */
    private String enterIntro;
    /**
     * 法人身份证正面照片
     */
    private String larIdCardPicFront;
    /**
     * 企业主税机关
     */
    private String enterTaxAuthority;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GetPaymentInfo.java
New file
@@ -0,0 +1,53 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java
New file
@@ -0,0 +1,19 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java
New file
@@ -0,0 +1,23 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GetStaffNodeRequest.java
New file
@@ -0,0 +1,23 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/6 16:42
 */
@Data
public class GetStaffNodeRequest {
    /**
     * 人员ID
     */
    private Long empId;
    /**
     * 操作人手机号
     */
    private String mobile;
    /**
     * 操作人企业ID
     */
    private String entercode;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java
New file
@@ -0,0 +1,47 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GoodsInfo.java
New file
@@ -0,0 +1,35 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
New file
@@ -0,0 +1,39 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/ListPage.java
New file
@@ -0,0 +1,27 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/LoginWeChatXiao.java
New file
@@ -0,0 +1,39 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/16 23:50
 */
@Data
public class LoginWeChatXiao {
    /**
     * token
     */
    private String token;
    /**
     * 用户UUID
     */
    private String userUUID;
    /**
     * 用户手机号
     */
    private String mobile;
    /**
     * 企业名称,无企业时为空
     */
    private String enterName;
    /**
     * 企业编码
     */
    private String enterCode;
    /**
     * 企业认证状态
     */
    private String enterAuth;
    /**
     * 是否是管理员,是:1;否:0
     */
    private String isAdmin;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/ModifyEnterpriseInfoRequest.java
New file
@@ -0,0 +1,75 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/9 18:13
 */
@Data
public class ModifyEnterpriseInfoRequest {
    /**
     * 企业编码
     */
    private String enter_code;
    /**
     * 操作人员手机号
     */
    private String operator;
    /**
     * 企业名称
     */
    private String enter_name;
    /**
     * 企业简称
     */
    private String enter_nickname;
    /**
     * 企业地址
     */
    private String enter_address;
    /**
     * 企业邮箱
     */
    private String enter_email;
    /**
     * 联系人姓名
     */
    private String contact_name;
    /**
     * 联系人手机号
     */
    private String contact_mobile;
    /**
     * 营业执照扫描件URL
     */
    private String operscanpic;
    /**
     * 营业期开始时间
     */
    private String businessTermStartTime;
    /**
     * 营业期结束时间
     */
    private String businessTermEndTime;
    /**
     * 区域编码
     */
    private String area;
    /**
     * 二级域名
     */
    private String second_realms;
    /**
     * 企业来源编码
     */
    private String source_code;
    /**
     * 店铺所属行业编码
     */
    private String trade_code;
    /**
     * 企业分类编码
     */
    private String type_code;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/ModifyPwdRequest.java
New file
@@ -0,0 +1,25 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data; /**
 * @author zhibing.pu
 * @Date 2025/6/10 10:42
 */
@Data
public class ModifyPwdRequest {
    /**
     * 手机号码
     */
    private String mobile;
    /**
     * 旧密码
     */
    private String oldPwd;
    /**
     * 新密码
     */
    private String newPwd;
    /**
     * 验证码
     */
    private String code;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java
New file
@@ -0,0 +1,39 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/OrderInfo.java
New file
@@ -0,0 +1,19 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PayInfo.java
New file
@@ -0,0 +1,31 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PayInfoData.java
New file
@@ -0,0 +1,42 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentInfo.java
New file
@@ -0,0 +1,31 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
New file
@@ -0,0 +1,27 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
New file
@@ -0,0 +1,57 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author zhibing.pu
 * @Date 2025/7/24 18:29
 */
@Data
public class PaymentOrderRequest {
    /**
     * 场景标识。交通场景传”TRAFFIC”
     */
    private String scene;
    /**
     * 场景应用标识。默认52270015
     */
    private String mhltiCenterAppId;
    /**
     * 支付流水明细
     */
    private String payItemId;
    /**
     * 支付明细json串
     */
    private String paymentInfo;
    /**
     * 订单ID
     */
    private String orderId;
    /**
     * 支付金额,单位元
     */
    private BigDecimal charge;
    /**
     * 支付时间
     */
    private String payTime;
    /**
     * 支付流水号
     */
    private String paymentSerialNumber;
    /**
     * 付款类型,4、线上支付
     */
    private Integer payType;
    /**
     * 付款方式,6:微信  7:支付宝  8:银行卡 9:银联二维码 10银联购物车收银台
     */
    private Integer payChannel;
    /**
     * 是否补偿单。1、是,0、否
     */
    private Integer isCompensate;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/QYTPaymentCallback.java
New file
@@ -0,0 +1,27 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
New file
@@ -0,0 +1,45 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java
New file
@@ -0,0 +1,35 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/QYTUserInfo.java
New file
@@ -0,0 +1,33 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * 用户信息
 * @author zhibing.pu
 * @Date 2025/6/6 15:11
 */
@Data
public class QYTUserInfo {
    /**
     * 手机号码
     */
    private String mobile;
    /**
     * 用户昵称
     */
    private String nickname;
    /**
     * 小头像url
     */
    private String photoUrl;
    /**
     * 大头像url
     */
    private String photoUrlBig;
    /**
     * 企业名称
     */
    private String enterName;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/RegisterViaMobile.java
New file
@@ -0,0 +1,26 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data; /**
 * @author zhibing.pu
 * @Date 2025/6/10 11:34
 */
@Data
public class RegisterViaMobile {
    /**
     * 响应码
     * 0:成功;1:失败;2:手机号非法;3:验证码已过期;4:验证码错误;5、用户已存在;9:弱密码
     */
    private String status;
    /**
     * 响应描述
     */
    private String desc;
    /**
     * web登录密码
     */
    private String password;
    /**
     * 用户UUID
     */
    private String onconUUID;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/RegisterViaMobileRequest.java
New file
@@ -0,0 +1,46 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/6 16:59
 */
@Data
public class RegisterViaMobileRequest {
    /**
     * 手机号码
     */
    private String mobile;
    /**
     * 客户端appid
     */
    private String appId;
    /**
     * 用户密码
     */
    private String password;
    /**
     * 短信验证码
     */
    private String verify_code;
    /**
     * 验证码类型
     * 0:短信发送的验证码;1:一键获取手机号返回注册验证码;2、验证码验证成功后生成的Ticket
     */
    private String verify_code_type;
    /**
     * 加密类型
     * 第三方系统可以填写空
     */
    private String encryptType;
    /**
     * 用户类型
     * 0:普通用户
     */
    private String user_type;
    /**
     * 昵称
     */
    private String nickname;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/ResetPwdRequest.java
New file
@@ -0,0 +1,27 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/10 10:42
 */
@Data
public class ResetPwdRequest {
    /**
     * 手机号码
     */
    private String mobile;
    /**
     * 密码
     */
    private String password;
    /**
     * 验证码
     */
    private String code;
    /**
     * 客户端appid
     */
    private String appid;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/SaveStaffNode.java
New file
@@ -0,0 +1,31 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2025/6/14 14:10
 */
@Data
public class SaveStaffNode {
    /**
     * 人员ID
     */
    private Long empId;
    /**
     * 员工名称
     */
    private String empName;
    /**
     * 员工昵称
     */
    private String empNickname;
    /**
     * 手机号
     */
    private String mphone;
    /**
     * 登录账号
     */
    private String loginNo;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/SaveStaffNodeRequest.java
New file
@@ -0,0 +1,63 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/6 16:22
 */
@Data
public class SaveStaffNodeRequest {
    /**
     * 操作人手机号
     */
    private String mobile;
    /**
     * 操作人企业ID
     */
    private String entercode;
    /**
     * 人员名称
     */
    private String empName;
    /**
     * 人员显示名
     */
    private String empNickname;
    /**
     * 人员账号
     */
    private String loginNo;
    /**
     * 人员性别
     */
    private String empSex;
    /**
     * 人员手机号
     */
    private String mphone;
    /**
     * 人员邮箱
     */
    private String email;
    /**
     * 员工所属部分ID
     */
    private Integer deptId;
    /**
     * 员工职务ID
     */
    private Integer positionId;
    /**
     * 员工职务名称
     */
    private String positionName;
    /**
     * 高管模式 1 是 0 不是
     */
    private Integer superLevel;
    /**
     * 隐藏号码 1 是 0 不是
     */
    private Integer hideMobile;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/SendSmsRequest.java
New file
@@ -0,0 +1,33 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/StaffNodeInfo.java
New file
@@ -0,0 +1,91 @@
package com.supersavedriving.user.modular.system.util.qianyuntong.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/6/6 16:44
 */
@Data
public class StaffNodeInfo {
    /**
     * 人员ID
     */
    private Integer empId;
    /**
     * 主要号码
     */
    private String mainMphone;
    /**
     * 备注
     */
    private String remark;
    /**
     * 企业ID
     */
    private String enterNum;
    /**
     * 加密企业名称
     */
    private String empNameEncode;
    /**
     * 人员名称
     */
    private String empName;
    /**
     * 人员显示名
     */
    private String empNickname;
    /**
     * 人员账号
     */
    private String loginNo;
    /**
     * 人员性别(男\女)
     */
    private String empSex;
    /**
     * 人员手机号
     */
    private String mphone;
    /**
     * 人员邮箱加密
     */
    private String mainEmailEncode;
    /**
     * 所属企业id
     */
    private Long enterId;
    /**
     * 唯一编号
     */
    private String onconuuid;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 员工所属部门ID多个部门英文; 分割
     */
    private Integer deptId;
    /**
     * 员工职位ID
     */
    private Long positionId;
    /**
     * 员工职位名称
     */
    private String positionName;
    /**
     * 高管模式 1 是 0 不是
     */
    private Integer superLevel;
    /**
     * 隐藏手机号 1 是 0 否
     */
    private Integer hideMobile;
    /**
     * 有效状态(0=否,1=是)
     */
    private String isValid;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeOrderCreate.java
New file
@@ -0,0 +1,19 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
New file
@@ -0,0 +1,99 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradePayOff1Data.java
New file
@@ -0,0 +1,62 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradePayOffData.java
New file
@@ -0,0 +1,66 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeRequest.java
New file
@@ -0,0 +1,31 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TravelItinerary.java
New file
@@ -0,0 +1,64 @@
package com.supersavedriving.user.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;
}
user/guns-admin/src/main/resources/application-dev.yml
New file
@@ -0,0 +1,140 @@
server:
  port: 7006
guns:
  swagger-open: true              #是否开启swagger (true/false)
  kaptcha-open: false             #是否开启登录时验证码 (true/false)
#  file-upload-path: d:/tmp       #文件上传目录(不配置的话为java.io.tmpdir目录)
  spring-session-open: false      #是否开启spring session,如果是多机环境需要开启(true/false)
  session-invalidate-time: 1800     #session失效时间(只在单机环境下生效,多机环境在SpringSessionConfig类中配置) 单位:秒
  session-validation-interval: 900  #多久检测一次失效的session(只在单机环境下生效) 单位:秒
spring:
  application:
    name: user-server
  profiles:
    active: dev
#    active: produce
  mvc:
    static-path-pattern: /static/**
    view:
      prefix: /WEB-INF/view
  devtools:
    restart:
      enabled: false
      additional-paths: src/main/java
      exclude: static/**,WEB-INF/view/**
  servlet:
    multipart:
      max-request-size: 100MB
      max-file-size: 100MB
  redis:
    host: 192.168.110.80
    port: 6379
    password: 123456
mybatis-plus:
  typeAliasesPackage: com.supersavedriving.user.modular
  global-config:
    id-type: 0  #0:数据库ID自增   1:用户输入id  2:全局唯一id(IdWorker)  3:全局唯一ID(uuid)
    db-column-underline: false
  configuration:
    configuration.map-underscore-to-camel-case: true #是否开启自动驼峰命名规则(camel case)映射
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #输出Sql,如需打印Sql注释该配置
  mapper-locations: classpath*:com/supersavedriving/user/modular/system/dao/**/*.xml
eureka:
  client:
    service-url: #注册中心地址
      defaultZone: http://sinata:sinata@192.168.110.106:8000/eureka #启用身份验证的方式连接
    register-with-eureka: true #在注册中心进行注册
    fetch-registry: true #从Eureka中获取注册信息。
---
spring:
  datasource:
    url: jdbc:mysql://192.168.110.80:3306/qyt_driving?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    db-name: guns #用来搜集数据库的所有表
    filters: wall,mergeStat
---
wx:
  grantType: authorization_code #填authorization_code
  appid: 111 #应用唯一标识,在微信开放平台提交应用审核通过后获得
  appSecret: 111 #应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
  appletsAppid: wx1f52be0fdb1d2875 #小程序APPid
  appletsAppSecret: 8210ae106f3a501d77b410070a0aa2c2 #
  officialAccountAppid: 11111
  officialAccountAppSecret: 1111
  webAppId: 111
  webAppSecret: 11
  mchId: 111 #微信支付分配的商户号
  key: 111 #key为商户平台设置的密钥key:
  apiv3: 111 #key为商户平台设置的密钥key:
---
alipay:
  appid: 111  #应用程序唯一标识
  appPrivateKey: 111 #开发者应用私钥
  alipayPublicKey: 111 #应用公钥
  alipay_public_key: 111 #支付宝公钥
---
juhe: #聚合数据
  appKey: 111 #
---
jiguang:
  appKey-driver: 111 #极光推送应用唯一标识
  masterSecret-driver: 111 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的
  appKey-dispatch: 111 #极光推送应用唯一标识
  masterSecret-dispatch: 111 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的
---
filePath: /usr/local/server/app/orderPostionFile/ #存储订单轨迹文件路径
#支付回调地址
callbackPath: http://121.31.232.206:3002/user
---
spring:
  data:
    mongodb:
      uri: mongodb://192.168.110.80:27017/test
#  mallbook 调起接口参数配置
mallbook:
  # pay_url:mallbook接口地址    测试环境: https://uat.mallbook.cn/api   生产环境:https://cloudpay.mallbook.cn/api
  pay_url: https://cloudpay.mallbook.cn/api
  # merchant_no 业务系统商户平台编号,需替换为mallbook工作人员提供的商户编号
  merchant_no: 111
  # version 接口版本号
  version: 1.0.0
  # channel_type 渠道类型 HF:汇付
  channel_type: HF
  # merchant_private_key 商户平台私钥,需要替换成商户平台自己生成的私钥
  merchant_private_key: 111
  # mall_book_public_key mallbook测试环境公钥 不需要替换
  mall_book_public_key: 111
user/guns-admin/src/main/resources/application-produce.yml
New file
@@ -0,0 +1,141 @@
server:
  port: 8006
guns:
  swagger-open: true              #是否开启swagger (true/false)
  kaptcha-open: false             #是否开启登录时验证码 (true/false)
#  file-upload-path: d:/tmp       #文件上传目录(不配置的话为java.io.tmpdir目录)
  spring-session-open: false      #是否开启spring session,如果是多机环境需要开启(true/false)
  session-invalidate-time: 1800     #session失效时间(只在单机环境下生效,多机环境在SpringSessionConfig类中配置) 单位:秒
  session-validation-interval: 900  #多久检测一次失效的session(只在单机环境下生效) 单位:秒
spring:
  application:
    name: user-server
  profiles:
    active: dev
#    active: produce
  mvc:
    static-path-pattern: /static/**
    view:
      prefix: /WEB-INF/view
  devtools:
    restart:
      enabled: false
      additional-paths: src/main/java
      exclude: static/**,WEB-INF/view/**
  servlet:
    multipart:
      max-request-size: 100MB
      max-file-size: 100MB
  redis:
    host: 192.168.110.80
    port: 6379
    password: 123456
mybatis-plus:
  typeAliasesPackage: com.supersavedriving.user.modular
  global-config:
    id-type: 0  #0:数据库ID自增   1:用户输入id  2:全局唯一id(IdWorker)  3:全局唯一ID(uuid)
    db-column-underline: false
  configuration:
    configuration.map-underscore-to-camel-case: true #是否开启自动驼峰命名规则(camel case)映射
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #输出Sql,如需打印Sql注释该配置
  mapper-locations: classpath*:com/supersavedriving/user/modular/system/dao/**/*.xml
eureka:
  client:
    service-url: #注册中心地址
      defaultZone: http://sinata:sinata@192.168.110.106:8000/eureka #启用身份验证的方式连接
    register-with-eureka: true #在注册中心进行注册
    fetch-registry: true #从Eureka中获取注册信息。
---
spring:
  datasource:
    url: jdbc:mysql://192.168.110.80:3306/qyt_driving?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    db-name: guns #用来搜集数据库的所有表
    filters: wall,mergeStat
---
wx:
  grantType: authorization_code #填authorization_code
  appid: 111 #应用唯一标识,在微信开放平台提交应用审核通过后获得
  appSecret: 111 #应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
  appletsAppid: wx1f52be0fdb1d2875 #小程序APPid
  appletsAppSecret: 8210ae106f3a501d77b410070a0aa2c2 #
  officialAccountAppid: 11111
  officialAccountAppSecret: 1111
  webAppId: 111
  webAppSecret: 11
  mchId: 111 #微信支付分配的商户号
  key: 111 #key为商户平台设置的密钥key:
  apiv3: 111 #key为商户平台设置的密钥key:
---
alipay:
  appid: 111  #应用程序唯一标识
  appPrivateKey: 111 #开发者应用私钥
  alipayPublicKey: 111 #应用公钥
  alipay_public_key: 111 #支付宝公钥
---
juhe: #聚合数据
  appKey: 111 #
---
jiguang:
  appKey-driver: 111 #极光推送应用唯一标识
  masterSecret-driver: 111 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的
  appKey-dispatch: 111 #极光推送应用唯一标识
  masterSecret-dispatch: 111 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的
---
filePath: /usr/local/server/app/orderPostionFile/ #存储订单轨迹文件路径
#支付回调地址
callbackPath: http://121.31.232.206:3002/user
---
spring:
  data:
    mongodb:
#      uri: mongodb://192.168.110.188:27017/test
      uri: mongodb://121.31.232.206:27017/test
#  mallbook 调起接口参数配置
mallbook:
  # pay_url:mallbook接口地址    测试环境: https://uat.mallbook.cn/api   生产环境:https://cloudpay.mallbook.cn/api
  pay_url: https://cloudpay.mallbook.cn/api
  # merchant_no 业务系统商户平台编号,需替换为mallbook工作人员提供的商户编号
  merchant_no: MBH23056
  # version 接口版本号
  version: 1.0.0
  # channel_type 渠道类型 HF:汇付
  channel_type: HF
  # merchant_private_key 商户平台私钥,需要替换成商户平台自己生成的私钥
  merchant_private_key: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALHmyTrxPYcAwABnX+3VW9vxUftm57zBpnbfOT4vizMnKdpfCkIgtdbfdnSCtt637yWM2fxnZfItnhTeQA2lL8f4SXgZt/bVXfmAWi4IxQ+HJy0Qs8nNy2nnjICPBPcpWzHwUxQ/THHqU0a7b9B91J5DFcbQb25BHeRpHwkBw6A/AgMBAAECgYAmcWq2s/7Jt53F+JDAQkTRaHqAyyH0phwkv+QMzhVUfngK2lLLK2pf/nYIg16lDjY9dQx+AJIFHVp1w/kveayzOz3BIqPoznyIVYPolRGZCWPo+2vdp0CIdBh7zahST5g5Gem4cU47wO5hPYs1kXKPG4mUPtaIAMHFxhyLvIagAQJBAOS63AIZrRrldeNCVVNXbpAT52JuWLCgravM9coOh6scmG6UQwxxcott8hneHr9fazk2LHbHMxlG8F+dQPA0+D8CQQDHHJN7Dnske8oJ+1sq4uhQP3HMsmNIgth+ZcaZpiPcxnNKYVGhzAwTVV2ruFJle5ajebo6zfWuqJhtZGRNh1gBAkA/lRoXk1+lfGfa9tOVSVa4wm+t0xLgdqoQefdRZdyc2mQdSSWiTd8Tl0qXmkFd3X6G9uJBWnp/6lJjoektXOwtAkBsZTQsw99qJzIAaSRinpDWTxPG2j6OlR0DAqkxsG7JnAfbsEteh9TzGYAbIgdJVBTX/kbSCJn9ca85rnOkeVABAkAUbDfU3Z702z20NtwAxc1IkrtQ1lKuqSpj9/LuR1/6KRkYQsUWnUiOO9hu5YDWIcflFrnCenF8j8OnvGghltxT
  # mall_book_public_key mallbook测试环境公钥 不需要替换
  mall_book_public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq6OLZKgUHH5wOk9xSBgN7yC17r3PQwMlY9/IorqrOlaIqrU0eAVZ5+dWrJD/3bdu7Ctq8n8trTm/IUYs7wtMg5SKwyX4/N+KQc2N7LL4yCq4vNl41q9sYgrtA0QnZoucIZcq1mwyu7RTDC8Wp7LGddnlkJsmL8masgMxA6cc9NwIDAQAB
user/guns-admin/src/main/resources/application-test.yml
New file
@@ -0,0 +1,141 @@
server:
  port: 8006
guns:
  swagger-open: true              #是否开启swagger (true/false)
  kaptcha-open: false             #是否开启登录时验证码 (true/false)
#  file-upload-path: d:/tmp       #文件上传目录(不配置的话为java.io.tmpdir目录)
  spring-session-open: false      #是否开启spring session,如果是多机环境需要开启(true/false)
  session-invalidate-time: 1800     #session失效时间(只在单机环境下生效,多机环境在SpringSessionConfig类中配置) 单位:秒
  session-validation-interval: 900  #多久检测一次失效的session(只在单机环境下生效) 单位:秒
spring:
  application:
    name: user-server
  profiles:
    active: dev
#    active: produce
  mvc:
    static-path-pattern: /static/**
    view:
      prefix: /WEB-INF/view
  devtools:
    restart:
      enabled: false
      additional-paths: src/main/java
      exclude: static/**,WEB-INF/view/**
  servlet:
    multipart:
      max-request-size: 100MB
      max-file-size: 100MB
  redis:
    host: 192.168.110.80
    port: 6379
    password: 123456
mybatis-plus:
  typeAliasesPackage: com.supersavedriving.user.modular
  global-config:
    id-type: 0  #0:数据库ID自增   1:用户输入id  2:全局唯一id(IdWorker)  3:全局唯一ID(uuid)
    db-column-underline: false
  configuration:
    configuration.map-underscore-to-camel-case: true #是否开启自动驼峰命名规则(camel case)映射
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #输出Sql,如需打印Sql注释该配置
  mapper-locations: classpath*:com/supersavedriving/user/modular/system/dao/**/*.xml
eureka:
  client:
    service-url: #注册中心地址
      defaultZone: http://sinata:sinata@192.168.110.106:8000/eureka #启用身份验证的方式连接
    register-with-eureka: true #在注册中心进行注册
    fetch-registry: true #从Eureka中获取注册信息。
---
spring:
  datasource:
    url: jdbc:mysql://192.168.110.80:3306/qyt_driving?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    db-name: guns #用来搜集数据库的所有表
    filters: wall,mergeStat
---
wx:
  grantType: authorization_code #填authorization_code
  appid: 111 #应用唯一标识,在微信开放平台提交应用审核通过后获得
  appSecret: 111 #应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
  appletsAppid: wx1f52be0fdb1d2875 #小程序APPid
  appletsAppSecret: 8210ae106f3a501d77b410070a0aa2c2 #
  officialAccountAppid: 11111
  officialAccountAppSecret: 1111
  webAppId: 111
  webAppSecret: 11
  mchId: 111 #微信支付分配的商户号
  key: 111 #key为商户平台设置的密钥key:
  apiv3: 111 #key为商户平台设置的密钥key:
---
alipay:
  appid: 111  #应用程序唯一标识
  appPrivateKey: 111 #开发者应用私钥
  alipayPublicKey: 111 #应用公钥
  alipay_public_key: 111 #支付宝公钥
---
juhe: #聚合数据
  appKey: 111 #
---
jiguang:
  appKey-driver: 111 #极光推送应用唯一标识
  masterSecret-driver: 111 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的
  appKey-dispatch: 111 #极光推送应用唯一标识
  masterSecret-dispatch: 111 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的
---
filePath: /usr/local/server/app/orderPostionFile/ #存储订单轨迹文件路径
#支付回调地址
callbackPath: http://121.31.232.206:3002/user
---
spring:
  data:
    mongodb:
#      uri: mongodb://192.168.110.188:27017/test
      uri: mongodb://121.31.232.206:27017/test
#  mallbook 调起接口参数配置
mallbook:
  # pay_url:mallbook接口地址    测试环境: https://uat.mallbook.cn/api   生产环境:https://cloudpay.mallbook.cn/api
  pay_url: https://cloudpay.mallbook.cn/api
  # merchant_no 业务系统商户平台编号,需替换为mallbook工作人员提供的商户编号
  merchant_no: MBH23056
  # version 接口版本号
  version: 1.0.0
  # channel_type 渠道类型 HF:汇付
  channel_type: HF
  # merchant_private_key 商户平台私钥,需要替换成商户平台自己生成的私钥
  merchant_private_key: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALHmyTrxPYcAwABnX+3VW9vxUftm57zBpnbfOT4vizMnKdpfCkIgtdbfdnSCtt637yWM2fxnZfItnhTeQA2lL8f4SXgZt/bVXfmAWi4IxQ+HJy0Qs8nNy2nnjICPBPcpWzHwUxQ/THHqU0a7b9B91J5DFcbQb25BHeRpHwkBw6A/AgMBAAECgYAmcWq2s/7Jt53F+JDAQkTRaHqAyyH0phwkv+QMzhVUfngK2lLLK2pf/nYIg16lDjY9dQx+AJIFHVp1w/kveayzOz3BIqPoznyIVYPolRGZCWPo+2vdp0CIdBh7zahST5g5Gem4cU47wO5hPYs1kXKPG4mUPtaIAMHFxhyLvIagAQJBAOS63AIZrRrldeNCVVNXbpAT52JuWLCgravM9coOh6scmG6UQwxxcott8hneHr9fazk2LHbHMxlG8F+dQPA0+D8CQQDHHJN7Dnske8oJ+1sq4uhQP3HMsmNIgth+ZcaZpiPcxnNKYVGhzAwTVV2ruFJle5ajebo6zfWuqJhtZGRNh1gBAkA/lRoXk1+lfGfa9tOVSVa4wm+t0xLgdqoQefdRZdyc2mQdSSWiTd8Tl0qXmkFd3X6G9uJBWnp/6lJjoektXOwtAkBsZTQsw99qJzIAaSRinpDWTxPG2j6OlR0DAqkxsG7JnAfbsEteh9TzGYAbIgdJVBTX/kbSCJn9ca85rnOkeVABAkAUbDfU3Z702z20NtwAxc1IkrtQ1lKuqSpj9/LuR1/6KRkYQsUWnUiOO9hu5YDWIcflFrnCenF8j8OnvGghltxT
  # mall_book_public_key mallbook测试环境公钥 不需要替换
  mall_book_public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq6OLZKgUHH5wOk9xSBgN7yC17r3PQwMlY9/IorqrOlaIqrU0eAVZ5+dWrJD/3bdu7Ctq8n8trTm/IUYs7wtMg5SKwyX4/N+KQc2N7LL4yCq4vNl41q9sYgrtA0QnZoucIZcq1mwyu7RTDC8Wp7LGddnlkJsmL8masgMxA6cc9NwIDAQAB
user/guns-admin/src/main/resources/application.yml
@@ -1,146 +1,3 @@
server:
  port: 8006
guns:
  swagger-open: true              #是否开启swagger (true/false)
  kaptcha-open: false             #是否开启登录时验证码 (true/false)
#  file-upload-path: d:/tmp       #文件上传目录(不配置的话为java.io.tmpdir目录)
  spring-session-open: false      #是否开启spring session,如果是多机环境需要开启(true/false)
  session-invalidate-time: 1800     #session失效时间(只在单机环境下生效,多机环境在SpringSessionConfig类中配置) 单位:秒
  session-validation-interval: 900  #多久检测一次失效的session(只在单机环境下生效) 单位:秒
spring:
  application:
    name: user-server
  profiles:
    active: dev
#    active: produce
  mvc:
    static-path-pattern: /static/**
    view:
      prefix: /WEB-INF/view
  devtools:
    restart:
      enabled: false
      additional-paths: src/main/java
      exclude: static/**,WEB-INF/view/**
  servlet:
    multipart:
      max-request-size: 100MB
      max-file-size: 100MB
  redis:
    host: 192.168.110.80
    port: 6379
    password: 123456
mybatis-plus:
  typeAliasesPackage: com.supersavedriving.user.modular
  global-config:
    id-type: 0  #0:数据库ID自增   1:用户输入id  2:全局唯一id(IdWorker)  3:全局唯一ID(uuid)
    db-column-underline: false
  configuration:
    configuration.map-underscore-to-camel-case: true #是否开启自动驼峰命名规则(camel case)映射
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #输出Sql,如需打印Sql注释该配置
  mapper-locations: classpath*:com/supersavedriving/user/modular/system/dao/**/*.xml
eureka:
  client:
    service-url: #注册中心地址
      defaultZone: http://sinata:sinata@192.168.110.106:8000/eureka #启用身份验证的方式连接
    register-with-eureka: true #在注册中心进行注册
    fetch-registry: true #从Eureka中获取注册信息。
---
spring:
  datasource:
    url: jdbc:mysql://192.168.110.80:3306/qyt_driving?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    db-name: guns #用来搜集数据库的所有表
    filters: wall,mergeStat
---
wx:
  grantType: authorization_code #填authorization_code
  appid: wxda355f1377409600 #应用唯一标识,在微信开放平台提交应用审核通过后获得
  appSecret: 58121b67f2ba25c17998fa26dc77e008 #应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
  appletsAppid: wxda355f1377409600 #小程序APPid
  appletsAppSecret: 58121b67f2ba25c17998fa26dc77e008 #
  officialAccountAppid: 11111
  officialAccountAppSecret: 1111
  webAppId: 111
  webAppSecret: 11
  mchId: 662454894 #微信支付分配的商户号
  key: Eri2GR2SB3b6iIhaoD7k3KQ8X0wf1Ybh #key为商户平台设置的密钥key:
  apiv3: AKJ51Z4nhSqYBxmOXgUyCKA1vLP0J5Aj #key为商户平台设置的密钥key:
---
alipay:
  appid: 111  #应用程序唯一标识
  appPrivateKey: 111 #开发者应用私钥
  alipayPublicKey: 111 #应用公钥
  alipay_public_key: 111 #支付宝公钥
---
juhe: #聚合数据
  appKey: 0d3fd83eddaa33e5563f548257648577 #
---
jiguang:
  appKey-driver: 93204c35ded9ba377a14af19 #极光推送应用唯一标识
  masterSecret-driver: e4f6f435faefad29db6ba9b2 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的
  appKey-dispatch: cc212ee6dcecb26625917f40 #极光推送应用唯一标识
  masterSecret-dispatch: 0d163a25a20647665c28639e #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的
---
filePath: /usr/local/server/app/orderPostionFile/ #存储订单轨迹文件路径
#filePath: C:/orderPostionFile/  #存储订单轨迹文件路径
#支付回调地址
#正式环境
#callbackPath: https://chaoshengdaijia.com:443/user
#正式测试环境
callbackPath: http://121.31.232.206:3002/user
#callbackPath: http://221.182.45.100:3002/user
---
spring:
  data:
    mongodb:
#      uri: mongodb://192.168.110.188:27017/test
      uri: mongodb://121.31.232.206:27017/test
#  mallbook 调起接口参数配置
mallbook:
  # pay_url:mallbook接口地址    测试环境: https://uat.mallbook.cn/api   生产环境:https://cloudpay.mallbook.cn/api
  pay_url: https://cloudpay.mallbook.cn/api
  # merchant_no 业务系统商户平台编号,需替换为mallbook工作人员提供的商户编号
  merchant_no: MBH23056
  # version 接口版本号
  version: 1.0.0
  # channel_type 渠道类型 HF:汇付
  channel_type: HF
  # merchant_private_key 商户平台私钥,需要替换成商户平台自己生成的私钥
  merchant_private_key: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALHmyTrxPYcAwABnX+3VW9vxUftm57zBpnbfOT4vizMnKdpfCkIgtdbfdnSCtt637yWM2fxnZfItnhTeQA2lL8f4SXgZt/bVXfmAWi4IxQ+HJy0Qs8nNy2nnjICPBPcpWzHwUxQ/THHqU0a7b9B91J5DFcbQb25BHeRpHwkBw6A/AgMBAAECgYAmcWq2s/7Jt53F+JDAQkTRaHqAyyH0phwkv+QMzhVUfngK2lLLK2pf/nYIg16lDjY9dQx+AJIFHVp1w/kveayzOz3BIqPoznyIVYPolRGZCWPo+2vdp0CIdBh7zahST5g5Gem4cU47wO5hPYs1kXKPG4mUPtaIAMHFxhyLvIagAQJBAOS63AIZrRrldeNCVVNXbpAT52JuWLCgravM9coOh6scmG6UQwxxcott8hneHr9fazk2LHbHMxlG8F+dQPA0+D8CQQDHHJN7Dnske8oJ+1sq4uhQP3HMsmNIgth+ZcaZpiPcxnNKYVGhzAwTVV2ruFJle5ajebo6zfWuqJhtZGRNh1gBAkA/lRoXk1+lfGfa9tOVSVa4wm+t0xLgdqoQefdRZdyc2mQdSSWiTd8Tl0qXmkFd3X6G9uJBWnp/6lJjoektXOwtAkBsZTQsw99qJzIAaSRinpDWTxPG2j6OlR0DAqkxsG7JnAfbsEteh9TzGYAbIgdJVBTX/kbSCJn9ca85rnOkeVABAkAUbDfU3Z702z20NtwAxc1IkrtQ1lKuqSpj9/LuR1/6KRkYQsUWnUiOO9hu5YDWIcflFrnCenF8j8OnvGghltxT
  # mall_book_public_key mallbook测试环境公钥 不需要替换
  mall_book_public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq6OLZKgUHH5wOk9xSBgN7yC17r3PQwMlY9/IorqrOlaIqrU0eAVZ5+dWrJD/3bdu7Ctq8n8trTm/IUYs7wtMg5SKwyX4/N+KQc2N7LL4yCq4vNl41q9sYgrtA0QnZoucIZcq1mwyu7RTDC8Wp7LGddnlkJsmL8masgMxA6cc9NwIDAQAB
    active: '@spring.active@'
user/pom.xml
@@ -221,19 +221,13 @@
    <profiles>
        <profile>
            <id>local</id>
            <properties>
                <spring.active>local</spring.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>dev</id>
            <properties>
                <spring.active>dev</spring.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>