From 0a8d28436b2f7229ecdf40c6b003902002c8947f Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 16 十月 2025 17:37:08 +0800
Subject: [PATCH] 修改bug

---
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZLHttpClientUtil.java                 |  129 ++++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java              |    2 
 UserQYTTravel/guns-admin/src/main/resources/application-dev.yml                                                               |   19 
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java                |    2 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java                                 |   84 ++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/AppDriverRideController.java      |   79 ++
 ZuulQYTTravel/src/main/resources/application-prod.yml                                                                         |    2 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java                   |   45 +
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/CallbackUtil.java                     |   47 +
 UserQYTTravel/guns-admin/pom.xml                                                                                              |    8 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/AddAccountInfoRequest.java    |   45 +
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayInfoController.java                  |  151 ++++
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tLine/tLine_info.js                                      |   13 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java       |    4 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/ZLUserInfo.java                 |   37 +
 DriverQYTTravel/guns-admin/src/main/resources/application-prod.yml                                                            |    2 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/task/jobs/CourseExamineRide.java                   |   28 
 ManagementQYTTravel/guns-admin/src/main/resources/application-prod.yml                                                        |   11 
 UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java                                            |   59 -
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java                                 |    4 
 ZuulQYTTravel/src/main/resources/application-dev.yml                                                                          |    8 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java        |    2 
 UserQYTTravel/guns-admin/src/main/resources/application-prod.yml                                                              |    2 
 ManagementQYTTravel/guns-admin/src/main/resources/application-dev.yml                                                         |    9 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html                                      |    2 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java                |   91 +-
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianUtil.java                    |  208 ++++++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/TokenRequest.java               |   46 +
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/TokenUtil.java                        |   91 +++
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/SpringSessionConfig.java                               |    6 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayUtil.java                            |    4 
 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html                                       |    2 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/OpenAccountCallbackRequest.java |   11 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java                        |    2 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java    |   25 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/MessageBody.java                |   23 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/OrderRide.java                               |   24 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianConfig.java                  |   88 ++
 UserQYTTravel/guns-admin/src/main/resources/application-test.yml                                                              |    2 
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java      |   19 
 ManagementQYTTravel/guns-admin/src/main/resources/application-test.yml                                                        |   11 
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/AppDriverRide.java                     |   52 +
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/rideCommentController.java              |   87 ++
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/DriverRide.java                              |   75 ++
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/shunfeng/appDriverRide/appDriverRide.js                         |    8 
 UserQYTTravel/guns-admin/lib/zl-util-security-1.2.2.jar                                                                       |    0 
 ZuulQYTTravel/src/main/resources/application-test.yml                                                                         |    2 
 DriverQYTTravel/guns-admin/src/main/resources/application-test.yml                                                            |    2 
 ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/shunfeng/appDriverRide/appDriverRide_auditList.js               |    4 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/TradeTerminalInfo.java          |   27 
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java                                    |   53 +
 51 files changed, 1,619 insertions(+), 138 deletions(-)

diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
index f2ed023..0e9dffc 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -575,7 +575,7 @@
                 param.put("page", "pages/home/home");
                 param.put("width", 430); //二维码尺寸
                 param.put("scene", "driverId=" + uid);
-                param.put("env_version", "trial"); //正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
+                param.put("env_version", "release"); //正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
                 HttpRequest post = HttpUtil.createPost(url);
                 post.body(JSON.toJSONString(param));
 
@@ -1769,7 +1769,7 @@
                 if (fileName == null || "".equals(fileName)) {
                     String appletPath = "pages/home/scanPage/scanPage";
                     //HttpURLConnection httpURLConnection = weChatUtil.getwxacodeunlimit(appletPath, "d=" + driverId + "&k=" + 0, "release",driverId);
-                    InputStream inputStream = weChatUtil.getwxacodeunlimit(appletPath, "driverId=" + driverId, "trial");
+                    InputStream inputStream = weChatUtil.getwxacodeunlimit(appletPath, "driverId=" + driverId, "release");
                     if (inputStream != null) {
                         File file = FileUtil.writeFromStream(inputStream, new File(filePath + "/" + UUID.randomUUID().toString() + ".png"));
                         HttpRequest post = HttpUtil.createPost(adminUrl + "/upload/image");
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
index 64495af..9ff0778 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -639,7 +639,7 @@
                 }
             }
             //专车业务需要校验
-            if(0 == driver.getIsSynchronous() && type.contains("1")){
+            if(0 == driver.getIsSynchronous() && (type.contains("1") || type.contains("3"))){
                 return ResultUtil.error("请先开通钱包");
             }
             //判断车辆是否正在使用中
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java
new file mode 100644
index 0000000..4b7ff36
--- /dev/null
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+@Data
+public class RefundInfoRequest {
+    /**
+     * 支付交易明细标识
+     */
+    private String payItemId;
+    /**
+     * 支付工单标识
+     */
+    private String payId;
+    /**
+     * 交易金额,单位分
+     */
+    private String tradeFee;
+}
diff --git a/DriverQYTTravel/guns-admin/src/main/resources/application-prod.yml b/DriverQYTTravel/guns-admin/src/main/resources/application-prod.yml
index 6b1496f..45a24a9 100644
--- a/DriverQYTTravel/guns-admin/src/main/resources/application-prod.yml
+++ b/DriverQYTTravel/guns-admin/src/main/resources/application-prod.yml
@@ -1,5 +1,7 @@
 server:
     port: 8007
+    tomcat:
+        basedir: /etraffic/server/chuxing/tomcat
 
 guns:
     swagger-open: false              #是否开启swagger (true/false)
diff --git a/DriverQYTTravel/guns-admin/src/main/resources/application-test.yml b/DriverQYTTravel/guns-admin/src/main/resources/application-test.yml
index 03f352b..a080dcd 100644
--- a/DriverQYTTravel/guns-admin/src/main/resources/application-test.yml
+++ b/DriverQYTTravel/guns-admin/src/main/resources/application-test.yml
@@ -1,5 +1,7 @@
 server:
     port: 8007
+    tomcat:
+        basedir: /etraffic/server/chuxing/tomcat
 
 guns:
     swagger-open: false              #是否开启swagger (true/false)
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/SpringSessionConfig.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/SpringSessionConfig.java
index 05243ce..f0845a6 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/SpringSessionConfig.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/SpringSessionConfig.java
@@ -1,8 +1,6 @@
 package com.stylefeng.guns.config;
 
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
 
 /**
  * spring session配置
@@ -11,8 +9,8 @@
  * @date 2017-07-13 21:05
  */
 @Configuration
-@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 28800)  //session过期时间  如果部署多机环境,需要打开注释
-@ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "true")
+//@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 28800)  //session过期时间  如果部署多机环境,需要打开注释
+//@ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "true")
 public class SpringSessionConfig {
 
 }
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/AppDriverRideController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/AppDriverRideController.java
index 6ae22af..468ed4c 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/AppDriverRideController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/AppDriverRideController.java
@@ -3,14 +3,27 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.base.tips.ErrorTip;
+import com.stylefeng.guns.core.beetl.ShiroExtUtil;
 import com.stylefeng.guns.core.common.constant.factory.PageFactory;
 import com.stylefeng.guns.core.log.LogObjectHolder;
+import com.stylefeng.guns.core.shiro.ShiroUser;
 import com.stylefeng.guns.modular.shunfeng.model.AppDriverRide;
 import com.stylefeng.guns.modular.shunfeng.service.IAppDriverRideService;
 import com.stylefeng.guns.modular.system.model.TCarBrand;
+import com.stylefeng.guns.modular.system.model.TCompany;
 import com.stylefeng.guns.modular.system.model.TUser;
+import com.stylefeng.guns.modular.system.model.User;
 import com.stylefeng.guns.modular.system.service.ITCarBrandService;
+import com.stylefeng.guns.modular.system.service.ITCompanyService;
 import com.stylefeng.guns.modular.system.service.ITUserService;
+import com.stylefeng.guns.modular.system.service.IUserService;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.EmployeeUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.QYTUserInfo;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.SaveStaffNode;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.SaveStaffNodeRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -21,6 +34,8 @@
 
 import java.util.List;
 import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
 
 /**
  * 顺风车司机控制器
@@ -34,10 +49,21 @@
 
     @Autowired
     private IAppDriverRideService appDriverRideService;
+
     @Autowired
     private ITUserService userService;
+
+    @Autowired
+    private IUserService sysUserService;
+
+    @Autowired
+    private ShiroExtUtil shiroExtUtil;
+
     @Autowired
     private ITCarBrandService carBrandService;
+
+    @Autowired
+    private ITCompanyService itCompanyService;
 
     /**
      * 跳转到顺风车司机首页
@@ -153,6 +179,59 @@
         if(appDriverRide.getState()!=null && appDriverRide.getState()==2){//顺风车司机通过审核之后需要把id绑定到用户表中
             userInfo.setIsDriverRide(1);//是否为顺风车司机(0否,1是)
             userService.updateById(userInfo);
+
+            TCompany tCompany = itCompanyService.selectById(appDriverRide1.getCompanyId());
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(userInfo.getPhone(), tCompany.getEnterCode());
+            Long empId = null;
+            Integer empnew = null;
+            if(null == userInfoByPhone || userInfoByPhone.size() == 0){
+                ShiroUser user = shiroExtUtil.getUser();
+                User user2 = sysUserService.selectById(user.getId());
+                SaveStaffNodeRequest request = new SaveStaffNodeRequest();
+                request.setMobile(user2.getPhone());
+                request.setEntercode(tCompany.getEnterCode());
+                request.setEmpName(userInfo.getName());
+                request.setEmpNickname(userInfo.getName());
+                request.setLoginNo(userInfo.getPhone());
+                request.setEmpSex(userInfo.getSex() == 1 ? "男" : "女");
+                request.setMphone(userInfo.getPhone());
+                request.setEmail(userInfo.getPhone() + "@qyt.com");
+                request.setDeptId(0);
+                request.setPositionId(1);
+                request.setSuperLevel(0);
+                request.setHideMobile(0);
+                ResultUtil<SaveStaffNode> resultUtil = EmployeeUtil.saveStaffNode(request);
+                if(200 != resultUtil.getStatus()){
+                    return new ErrorTip(resultUtil.getStatus(), resultUtil.getMsg());
+                }
+                SaveStaffNode saveStaffNode = resultUtil.getData();
+                empId = saveStaffNode.getEmpId();
+                empnew = 1;
+            }else{
+                empId = userInfoByPhone.get(0).getEmpId();
+                empnew = 0;
+            }
+
+            appDriverRide.setEmpId(empId);
+            appDriverRide.setEntercode(tCompany.getEnterCode());
+            appDriverRide.setEnterId(Long.valueOf(tCompany.getEnterCode()));
+            appDriverRide.setEmpnew(empnew);
+            //编写异步延迟处理中台账号延迟创建的问题
+            if(0 == empId){
+                Timer timer = new Timer();
+                String finalEnterCode = tCompany.getEnterCode();
+                timer.schedule(new TimerTask() {
+                    @Override
+                    public void run() {
+                        List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(userInfo.getPhone(), finalEnterCode);
+                        if(null != userInfoByPhone && userInfoByPhone.size() > 0){
+                            Long empId1 = userInfoByPhone.get(0).getEmpId();
+                            appDriverRide.setEmpId(empId1);
+                            appDriverRideService.updateById(appDriverRide);
+                        }
+                    }
+                },120*1000);
+            }
         }else {
             if(certificationImg!=null){
                 userInfo.setCertificationImg(certificationImg);
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/AppDriverRide.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/AppDriverRide.java
index 56c3ec2..95d1392 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/AppDriverRide.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/AppDriverRide.java
@@ -132,6 +132,26 @@
      */
     @TableField(exist = false)
     private Integer excep;
+    /**
+     * 中台员工ID
+     */
+    @TableField("empId")
+    private Long empId;
+    /**
+     * 中台员工所属企业ID
+     */
+    @TableField("enterId")
+    private Long enterId;
+    /**
+     * 中台员工所属企业编号
+     */
+    @TableField("entercode")
+    private String entercode;
+    /**
+     * 中台新增状态(0=否,1=是)
+     */
+    @TableField("empnew")
+    private Integer empnew;
 
     public Integer getId() {
         return id;
@@ -317,6 +337,38 @@
         this.excep = excep;
     }
 
+    public Long getEmpId() {
+        return empId;
+    }
+
+    public void setEmpId(Long empId) {
+        this.empId = empId;
+    }
+
+    public Long getEnterId() {
+        return enterId;
+    }
+
+    public void setEnterId(Long enterId) {
+        this.enterId = enterId;
+    }
+
+    public String getEntercode() {
+        return entercode;
+    }
+
+    public void setEntercode(String entercode) {
+        this.entercode = entercode;
+    }
+
+    public Integer getEmpnew() {
+        return empnew;
+    }
+
+    public void setEmpnew(Integer empnew) {
+        this.empnew = empnew;
+    }
+
     @Override
     protected Serializable pkVal() {
         return this.id;
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
index c9bdc7e..1d40878 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
@@ -243,13 +243,15 @@
         user.setPassword(ShiroKit.md5(user.getPassword(), user.getSalt()));
         user.setStatus(ManagerStatus.OK.getCode());
         user.setCreatetime(new Date());
-        user.setEmpId(empId);
         user.setEntercode(tCompany.getEnterCode());
         user.setEnterId(Long.valueOf(tCompany.getEnterCode()));
     
         User objectUser = UserFactory.createUser(user);
         objectUser.setObjectId(user1.getObjectId());
+        objectUser.setEmpId(empId);
         objectUser.setEmpnew(empnew);
+        objectUser.setEntercode(tCompany.getEnterCode());
+        objectUser.setEnterId(Long.valueOf(tCompany.getEnterCode()));
         this.userService.insert(objectUser);
     
         return SUCCESS_TIP;
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
index c4f9b76..6483966 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
@@ -161,7 +161,7 @@
 	public QianYunTongConfig getQianYunTongConfig() {
 		if("dev".equals(activeProfile)){
 			this.appkey = "10001104";
-			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
+			this.privateKeyPath = "E:\\项目文档\\黔云通\\private_key_test.pem";
 			this.userName = "xiaofei";
 			this.status = "1";
 			this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
diff --git a/ManagementQYTTravel/guns-admin/src/main/resources/application-dev.yml b/ManagementQYTTravel/guns-admin/src/main/resources/application-dev.yml
index 1822ad4..269a6c0 100644
--- a/ManagementQYTTravel/guns-admin/src/main/resources/application-dev.yml
+++ b/ManagementQYTTravel/guns-admin/src/main/resources/application-dev.yml
@@ -1,5 +1,9 @@
 server:
   port: 8010
+  servlet:
+    session:
+      cookie:
+        name: CHUXINGSID
 
 guns:
   swagger-open: true              #是否开启swagger (true/false)
@@ -32,6 +36,11 @@
     host: 127.0.0.1
     port: 6379
     password: 123456
+  session:
+    redis:
+      namespace: spring:chuxing:session
+    store-type: redis
+    timeout: 1800
 
 mybatis-plus:
   type-aliases-package: com.stylefeng.guns.modular
diff --git a/ManagementQYTTravel/guns-admin/src/main/resources/application-prod.yml b/ManagementQYTTravel/guns-admin/src/main/resources/application-prod.yml
index 163b453..90ab637 100644
--- a/ManagementQYTTravel/guns-admin/src/main/resources/application-prod.yml
+++ b/ManagementQYTTravel/guns-admin/src/main/resources/application-prod.yml
@@ -1,5 +1,11 @@
 server:
   port: 8010
+  tomcat:
+    basedir: /etraffic/server/chuxing/tomcat
+  servlet:
+    session:
+      cookie:
+        name: CHUXINGSID
 
 guns:
   swagger-open: false              #是否开启swagger (true/false)
@@ -28,6 +34,11 @@
     multipart:
       max-request-size: 500MB
       max-file-size: 500MB
+  session:
+    redis:
+      namespace: spring:chuxing:session
+    store-type: redis
+    timeout: 1800
   redis:
     host: 10.31.1.219
     port: 6410
diff --git a/ManagementQYTTravel/guns-admin/src/main/resources/application-test.yml b/ManagementQYTTravel/guns-admin/src/main/resources/application-test.yml
index 56aed10..5bef687 100644
--- a/ManagementQYTTravel/guns-admin/src/main/resources/application-test.yml
+++ b/ManagementQYTTravel/guns-admin/src/main/resources/application-test.yml
@@ -1,5 +1,11 @@
 server:
   port: 8080
+  tomcat:
+    basedir: /etraffic/server/chuxing/tomcat
+  servlet:
+    session:
+      cookie:
+        name: CHUXINGSID
 
 guns:
   swagger-open: false              #是否开启swagger (true/false)
@@ -28,6 +34,11 @@
     multipart:
       max-request-size: 500MB
       max-file-size: 500MB
+  session:
+    redis:
+      namespace: spring:chuxing:session
+    store-type: redis
+    timeout: 1800
   redis:
     host: 10.88.154.24
     port: 7560
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html
index 9c1da6e..1c17600 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html
@@ -82,7 +82,7 @@
                     <div class="form-group" id="areaType2Div" style="display: none;">
                         <label class="col-sm-2 control-label">电子围栏:</label>
                         <div class="col-sm-8">
-                            <div id="container" style="height: 350px;width: 1000px;"></div>
+                            <div id="container" style="height: 550px;width: 1000px;"></div>
                             <div class='info' style="margin-top:10px;position: absolute; z-index: 999; left: 20px; width: 450px;">操作说明:圆和矩形通过拖拽来绘制,其他覆盖物通过点击来绘制</div>
                             <div class="input-card" style='margin-top:28px;width: 100rem; z-index: 999; bottom: 20px;'>
                                 <div class="input-item">
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html
index 4e8ba2a..0b78ad2 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html
@@ -89,7 +89,7 @@
                     <div class="form-group" id="areaType2Div" style="display: ${type2};">
                         <label class="col-sm-2 control-label">电子围栏:</label>
                         <div class="col-sm-8">
-                            <div id="container" style="height: 350px;width: 1000px;"></div>
+                            <div id="container" style="height: 550px;width: 1000px;"></div>
                             <div class='info' style="margin-top:10px;position: absolute; z-index: 999; left: 20px; width: 450px;">操作说明:圆和矩形通过拖拽来绘制,其他覆盖物通过点击来绘制</div>
                             <div class="input-card" style='margin-top:28px;width: 100rem; z-index: 999; bottom: 20px;'>
                                 <div class="input-item">
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/shunfeng/appDriverRide/appDriverRide.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/shunfeng/appDriverRide/appDriverRide.js
index d5e3ea9..122f8c7 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/shunfeng/appDriverRide/appDriverRide.js
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/shunfeng/appDriverRide/appDriverRide.js
@@ -74,12 +74,12 @@
         {title: '操作', field: 'opt', visible: true, align: 'left', valign: 'middle',width:"7%",
             formatter: function (value, row) {
                 var btn=[];
-                btn+='<p style="line-height: 10px;"><a href="javascript:void(0);" onclick="AppDriverRide.openAppDriverRideDetail('+row.id+')">查看图片</a>';
-                btn+='<p style="line-height: 10px;"><a href="javascript:void(0);" onclick="AppDriverRide.openAddAppDriverRide('+row.id+')">编辑</a>';
+                btn+='<p style="line-height: 20px;"><a href="javascript:void(0);" onclick="AppDriverRide.openAppDriverRideDetail('+row.id+')">查看图片</a>';
+                btn+='<p style="line-height: 20px;"><a href="javascript:void(0);" onclick="AppDriverRide.openAddAppDriverRide('+row.id+')">编辑</a>';
                 if(row.status==1){
-                    btn+='<p style="line-height: 10px;"><a href="javascript:void(0);" onclick="AppDriverRide.isState('+row.id+',2)">锁定</a></p>';
+                    btn+='<p style="line-height: 20px;"><a href="javascript:void(0);" onclick="AppDriverRide.isState('+row.id+',2)">锁定</a></p>';
                 }else{
-                    btn+='<p style="line-height: 10px;"><a href="javascript:void(0);" onclick="AppDriverRide.isState('+row.id+',1)">解锁</a></p>';
+                    btn+='<p style="line-height: 20px;"><a href="javascript:void(0);" onclick="AppDriverRide.isState('+row.id+',1)">解锁</a></p>';
                 }
                 return btn;
 
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/shunfeng/appDriverRide/appDriverRide_auditList.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/shunfeng/appDriverRide/appDriverRide_auditList.js
index 7c0b1d8..f0aa77e 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/shunfeng/appDriverRide/appDriverRide_auditList.js
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/shunfeng/appDriverRide/appDriverRide_auditList.js
@@ -77,8 +77,8 @@
             {title: '操作', field: 'opt', visible: true, align: 'left', valign: 'middle',width:"5%",
                 formatter: function (value, row) {
                     var btn=[];
-                    btn+='<p style="line-height: 10px;"><a href="javascript:void(0);" onclick="AppDriverRide.openAppDriverRideDetail('+row.id+')">查看图片</a>';
-                    btn+='<p style="line-height: 10px;"><a href="javascript:void(0);" onclick="AppDriverRide.openAddAppDriverRide('+row.id+')">查看详情</a>';
+                    btn+='<p style="line-height: 20px;"><a href="javascript:void(0);" onclick="AppDriverRide.openAppDriverRideDetail('+row.id+')">查看图片</a>';
+                    btn+='<p style="line-height: 20px;"><a href="javascript:void(0);" onclick="AppDriverRide.openAddAppDriverRide('+row.id+')">查看详情</a>';
                     return btn;
 
                 }
diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tLine/tLine_info.js b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tLine/tLine_info.js
index 6ccc7ac..68c4cb7 100644
--- a/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tLine/tLine_info.js
+++ b/ManagementQYTTravel/guns-admin/src/main/webapp/static/modular/system/tLine/tLine_info.js
@@ -316,10 +316,14 @@
         var num2 = $("#num2").val();
         var num3 = $("#num3").val();
         var num4 = $("#num4").val();
-        if(!regDouble.test(num1) || !regDouble.test(num2) || !regXiShu.test(num3) || !regXiShu.test(num4)){
+        if(null == num1 || '' == num1 || null == num2 || '' == num2 || null == num3 || '' == num3 || null == num4 || '' == num4){
             Feng.info("固定计价格式不正确!");
             return;
         }
+        // if(!regDouble.test(num1) || !regDouble.test(num2) || !regXiShu.test(num3) || !regXiShu.test(num4)){
+        //     Feng.info("固定计价格式不正确!");
+        //     return;
+        // }
         content = '{"num1":"'+num1+'","num2":"'+num2+'","num3":"'+num3+'","num4":"'+num4+'"}';
         contentStr = "单人价格:"+num1+";包车价格:"+num2+";五座系数:"+num3+";七座系数:"+num4+";";
     } else if (2 == type){
@@ -331,10 +335,15 @@
         var num16 = $("#num16").val();
         var num17 = $("#num17").val();
         var num18 = $("#num18").val();
-        if(!regDouble.test(num11) || !regDouble.test(num12) || !regDouble.test(num13) || !regXiShu1.test(num14) || !regXiShu.test(num15) || !regXiShu.test(num16) || !regXiShu.test(num17) || !regXiShu.test(num18)){
+        if(null == num11 || '' == num11 || null == num12 || '' == num12 || null == num13 || '' == num13 || null == num14 || '' == num14
+        || null == num15 || '' == num15 || null == num16 || '' == num16 || null == num17 || '' == num17 || null == num18 || '' == num18){
             Feng.info("浮动计价格式不正确!");
             return;
         }
+        // if(!regDouble.test(num11) || !regDouble.test(num12) || !regDouble.test(num13) || !regXiShu1.test(num14) || !regXiShu.test(num15) || !regXiShu.test(num16) || !regXiShu.test(num17) || !regXiShu.test(num18)){
+        //     Feng.info("浮动计价格式不正确!");
+        //     return;
+        // }
         content = '{"num1":"'+num11+'","num2":"'+num12+'","num3":"'+num13+'","num4":"'+num14+'","num5":"'+num15+'","num6":"'+num16+'","num7":"'+num17+'","num8":"'+num18+'"}';
         contentStr = "参考价格:"+num11+";参考里程:"+num12+";保底价:"+num13+";超出参考里程优惠系数:"+num14+";低于参考里程优惠系数:"+num15+";包车系数:"+num16+";五座系数:"+num17+";七座系数:"+num18+";";
     }
diff --git a/UserQYTTravel/guns-admin/lib/zl-util-security-1.2.2.jar b/UserQYTTravel/guns-admin/lib/zl-util-security-1.2.2.jar
new file mode 100644
index 0000000..6ab869f
--- /dev/null
+++ b/UserQYTTravel/guns-admin/lib/zl-util-security-1.2.2.jar
Binary files differ
diff --git a/UserQYTTravel/guns-admin/pom.xml b/UserQYTTravel/guns-admin/pom.xml
index 3db4b12..0bcb254 100644
--- a/UserQYTTravel/guns-admin/pom.xml
+++ b/UserQYTTravel/guns-admin/pom.xml
@@ -222,6 +222,14 @@
             <scope>system</scope>
             <systemPath>${pom.basedir}/lib/javabase64-1.3.1.jar</systemPath>
         </dependency>
+        <!--证联sdk-->
+        <dependency>
+            <groupId>zl</groupId>
+            <artifactId>security</artifactId>
+            <version>1.2.2</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/lib/zl-util-security-1.2.2.jar</systemPath>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-mongodb</artifactId>
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index b56344e..25ee59b 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -9,7 +9,9 @@
 import com.stylefeng.guns.modular.call.server.IOrderCallService;
 import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
 import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
+import com.stylefeng.guns.modular.shunfeng.model.DriverRide;
 import com.stylefeng.guns.modular.shunfeng.model.OrderRide;
+import com.stylefeng.guns.modular.shunfeng.service.IDriverRideService;
 import com.stylefeng.guns.modular.shunfeng.service.IOrderRideService;
 import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics;
 import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService;
@@ -24,10 +26,15 @@
 import com.stylefeng.guns.modular.system.pdf.TripSheetGenerator;
 import com.stylefeng.guns.modular.system.service.*;
 import com.stylefeng.guns.modular.system.util.*;
+import com.stylefeng.guns.modular.system.util.qianyuntong.EmployeeUtil;
 import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.AddAccountInfoRequest;
 import com.stylefeng.guns.modular.system.util.qianyuntong.model.ModifyTravelItineraryRequest;
 import com.stylefeng.guns.modular.system.util.qianyuntong.model.QYTPaymentCallback;
 import com.stylefeng.guns.modular.system.util.qianyuntong.model.QYTPaymentCallbackData;
+import com.stylefeng.guns.modular.system.util.zhenglian.ZhengLianUtil;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.ZLUserInfo;
 import com.stylefeng.guns.modular.system.warpper.*;
 import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
 import com.stylefeng.guns.modular.taxi.model.PaymentRecord;
@@ -55,6 +62,8 @@
 import java.io.PrintWriter;
 import java.io.Serializable;
 import java.lang.reflect.InvocationTargetException;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -168,6 +177,9 @@
 
     @Autowired
     private IOrderRideService orderRideService;
+    /*顺风车司机*/
+    @Autowired
+    private IDriverRideService driverRideService;
 
 
     /**
@@ -188,6 +200,47 @@
             if (null == uid) {
                 return ResultUtil.tokenErr();
             }
+            UserInfo userInfo = userInfoService.selectById(uid);
+            if(null != userInfo.getDriverId()){
+                DriverRide driverRide = driverRideService.selectById(userInfo.getDriverId());
+                //获取证联数据
+                if(null == driverRide.getCustId() || 0 == driverRide.getAccOpenFlag()){
+                    TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo();
+                    tradeTerminalInfo.setTerminal("1");
+                    InetAddress inetAddress = InetAddress.getLocalHost();
+                    String ip = inetAddress.getHostAddress();
+                    tradeTerminalInfo.setIp(ip);
+                    NetworkInterface networkInterface = NetworkInterface.getByInetAddress(inetAddress);
+                    byte[] mac = networkInterface.getHardwareAddress();
+                    StringBuilder macAddress = new StringBuilder();
+                    for (int i = 0; i < mac.length; i++) {
+                        macAddress.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
+                    }
+
+                    tradeTerminalInfo.setMac(macAddress.toString());
+                    ZLUserInfo userInfo1 = ZhengLianUtil.getUserInfo(driverRide.getEmpId().toString(), tradeTerminalInfo);
+                    if(null != userInfo){
+                        driverRide.setCustId(userInfo1.getCustId());
+                        driverRide.setAccOpenFlag(userInfo1.getAccOpenFlag());
+                        driverRideService.updateById(driverRide);
+                    }
+                }
+                //同步到中台
+                if(null != driverRide.getAccOpenFlag() && 1 == driverRide.getAccOpenFlag() && 0 == driverRide.getIsSynchronous()){
+                    AddAccountInfoRequest request1 = new AddAccountInfoRequest();
+                    request1.setCustId(driverRide.getCustId());
+                    request1.setAccountNo(driverRide.getEmpId().toString());
+                    request1.setAccountName(userInfo.getName());
+                    request1.setMobile(userInfo.getPhone());
+                    Integer status = EmployeeUtil.addAccountInfo(request1);
+                    if(0 == status){
+                        driverRide.setIsSynchronous(1);
+                        driverRideService.updateById(driverRide);
+                    }
+                }
+            }
+
+
             List<OrderStatusWarpper> data = new ArrayList<>();
             List<OrderPrivateCar> orderPrivateCars = orderPrivateCarService.queryOrder(uid, 1, 2, 3, 4, 5, 6, 7, 11, 12);
             for (OrderPrivateCar orderPrivateCar : orderPrivateCars) {
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
index dcd18cc..83ea472 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
@@ -7,11 +7,19 @@
 import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.account.server.UserWithdrawalService;
 import com.stylefeng.guns.modular.account.util.OssUploadUtil;
+import com.stylefeng.guns.modular.shunfeng.model.DriverRide;
+import com.stylefeng.guns.modular.shunfeng.service.IDriverRideService;
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
 import com.stylefeng.guns.modular.system.util.WeChatUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.EmployeeUtil;
 import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil;
+import com.stylefeng.guns.modular.system.util.zhenglian.TokenUtil;
+import com.stylefeng.guns.modular.system.util.zhenglian.ZhengLianUtil;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.TokenRequest;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.ZLUserInfo;
 import com.stylefeng.guns.modular.system.warpper.LoginWarpper;
 import com.stylefeng.guns.modular.system.warpper.UserInfoWarpper;
 import com.stylefeng.guns.modular.system.warpper.VerifiedWarpper;
@@ -27,6 +35,8 @@
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.InputStream;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -41,6 +51,9 @@
     
     @Autowired
     private IUserInfoService userInfoService;
+    /*顺风车司机*/
+    @Autowired
+    private IDriverRideService driverRideService;
     
     @Autowired
     private IVerifiedService verifiedService;
@@ -121,6 +134,9 @@
             return ResultUtil.runErr();
         }
     }
+
+
+
 
     @ResponseBody
     @PostMapping("/base/user/oneClickLogin")
@@ -267,6 +283,11 @@
             return ResultUtil.runErr();
         }
     }
+
+
+
+
+
     @ResponseBody
     @PostMapping("/base/user/wxLogin")
     @ApiOperation(value = "微信授权登录", tags = {"用户端-登录"}, notes = "")
@@ -290,6 +311,12 @@
             return ResultUtil.runErr();
         }
     }
+
+
+
+
+
+
     @ResponseBody
     @PostMapping("/base/user/wxLoginIsBind")
     @ApiOperation(value = "微信授权登录--查看是否绑定手机号", tags = {"用户端-登录"}, notes = "")
@@ -422,6 +449,7 @@
                 userInfo.setOnconUUID(onconUUIDByMobile);
                 userInfoService.updateById(userInfo);
             }
+
             Map<String, Object> map = userInfoService.queryUserInfo(uid);
             UserWithdrawal userWithdrawal1 = userWithdrawalService.selectOne(new EntityWrapper<UserWithdrawal>()
                     .eq("phone", map.get("phone"))
@@ -859,6 +887,9 @@
             return ResultUtil.runErr();
         }
     }
+
+
+
     @ResponseBody
     @GetMapping("/base/user/getDriverCode")
     @ApiOperation(value = "获取司机端的二维码", tags = {"获取司机端的二维码"}, notes = "")
@@ -898,9 +929,9 @@
      */
     @ResponseBody
     @PostMapping("/base/user/addAppUser")
-    public String addAppUser(String phone, String code, String areaCode){
+    public String addAppUser(String phone, String code, String areaCode, String onconUUID){
         try {
-            return userInfoService.addAppUser(phone, code, areaCode);
+            return userInfoService.addAppUser(phone, code, areaCode, onconUUID);
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -944,4 +975,53 @@
         }
         return null;
     }
+
+
+    @ResponseBody
+    @PostMapping("/api/driver/getZLToken")
+    @ApiOperation(value = "获取证联token(黔云通)", tags = {"司机端-首页"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
+            @ApiImplicitParam(value = "当前设备IP地址", name = "ip", required = true, dataType = "String"),
+            @ApiImplicitParam(value = "当前设备mac地址", name = "mac", required = true, dataType = "String"),
+            @ApiImplicitParam(value = "01 证联收银台支付\n" +
+                    "\t 04 HOME 页\n" +
+                    "\t 06 申请免密签约\n" +
+                    "\t 07 商户收银台支付\n" +
+                    "\t 08 开户(绑卡)\n" +
+                    "\t 09 开通支付账户\n" +
+                    "\t 10 打开付款码", name = "type", required = true, dataType = "String"),
+    })
+    public ResultUtil<String> getZLToken(String ip, String mac, String type, HttpServletRequest request){
+        try {
+            Integer userId = userInfoService.getUserIdFormRedis(request);
+            if (null == userId) {
+                return ResultUtil.tokenErr();
+            }
+            UserInfo userInfo = userInfoService.selectById(userId);
+            if(null == userInfo.getDriverId()){
+                return ResultUtil.error("请先开通顺风车司机");
+            }
+            if(null == userInfo.getIdCard()){
+                return ResultUtil.error("请先完成实名认证");
+            }
+            DriverRide driverRide = driverRideService.selectById(userInfo.getDriverId());
+            TokenRequest tokenRequest = new TokenRequest();
+            tokenRequest.setAppUserId(driverRide.getEmpId().toString());
+            tokenRequest.setUserName(userInfo.getName());
+            tokenRequest.setCertNo(userInfo.getIdCard());
+            tokenRequest.setPhone(userInfo.getPhone());
+            TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo();
+            tradeTerminalInfo.setIp(ip);
+            tradeTerminalInfo.setTerminal("1");
+            tradeTerminalInfo.setMac(mac);
+            tokenRequest.setTradeTerminalInfo(tradeTerminalInfo);
+            tokenRequest.setType(type);
+            String token = TokenUtil.getToken(tokenRequest);
+            return ResultUtil.success(token);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayInfoController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayInfoController.java
index 6dfa73e..eef1d76 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayInfoController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayInfoController.java
@@ -1,13 +1,23 @@
 package com.stylefeng.guns.modular.shunfeng.controller;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
+import com.stylefeng.guns.modular.shunfeng.model.Financial;
 import com.stylefeng.guns.modular.shunfeng.model.OrderRide;
 import com.stylefeng.guns.modular.shunfeng.model.vo.ApiJson;
+import com.stylefeng.guns.modular.shunfeng.service.IDriverRideService;
+import com.stylefeng.guns.modular.shunfeng.service.IFinancialService;
 import com.stylefeng.guns.modular.shunfeng.service.IOrderRideService;
 import com.stylefeng.guns.modular.shunfeng.service.ITimeTaskService;
+import com.stylefeng.guns.modular.system.model.Company;
+import com.stylefeng.guns.modular.system.model.Driver;
 import com.stylefeng.guns.modular.system.model.UserInfo;
 import com.stylefeng.guns.modular.system.service.ISystemNoticeService;
 import com.stylefeng.guns.modular.system.service.IUserInfoService;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -20,7 +30,17 @@
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 支付相关接口
@@ -38,6 +58,11 @@
     private IUserInfoService userInfoService;
     @Autowired
     private ISystemNoticeService systemNoticeService;
+    /*顺风车司机*/
+    @Autowired
+    private IDriverRideService driverRideService;
+    @Autowired
+    private IFinancialService financialService;
 
 
 
@@ -130,8 +155,11 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "int"),
             @ApiImplicitParam(name = "payType", value = "支付类型 1=支付宝,2 = 微信 3:银行卡 4:小程序", dataType = "int"),
+            @ApiImplicitParam(name = "path", value = "前端支付很后的跳转页面", dataType = "string"),
+            @ApiImplicitParam(name = "ip", value = "前端支付IP地址", dataType = "string"),
     })
-    public Object payOnline(Integer orderId,Integer type,String code,Integer payType,Integer isBalance,HttpServletRequest request,Integer couponId){
+    public Object payOnline(Integer orderId,Integer type,String code,Integer payType,Integer isBalance,
+                            String path, String ip, HttpServletRequest request,Integer couponId){
         try {
             if(orderId == null || orderId == 0){
                 return ApiJson.returnNG("订单ID不能为空");
@@ -156,7 +184,126 @@
             if(orderRide.getState()==2){//已支付
                 return ApiJson.returnNG("该订单不需要支付");
             }
-            info = new PayUtil().getPayInfo(payType,orderRide.getOrderNum(),openId,request);
+            Double orderMoney = orderRide.getMoney();
+            if(2 == payType){
+                UserInfo userInfo = userInfoService.selectById(orderRide.getUserId());
+                if(null == orderRide.getIsCreated() || 0 == orderRide.getIsCreated()){
+                    //调用中台创建订单及拉起支付接口
+                    TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData();
+                    tradeOrderCreateData.setTreatShopId("0");
+                    tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isCompensate\":\"0\",\"isPromote\":\"0\"}");
+                    tradeOrderCreateData.setCharge(new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_EVEN));
+                    tradeOrderCreateData.setOrderNo("SF" + orderRide.getId());
+                    tradeOrderCreateData.setCustomerId(userInfo.getOnconUUID());
+                    tradeOrderCreateData.setPartnerPayId(orderRide.getZttravelId());
+                    tradeOrderCreateData.setTotalFee(Double.valueOf(orderMoney * 100).intValue() + "");
+                    tradeOrderCreateData.setOrderDesc("完成订单");
+                    tradeOrderCreateData.setRetUrl(path);
+                    tradeOrderCreateData.setClientIp(ip);
+                    tradeOrderCreateData.setServiceType(4);
+
+                    List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+                    GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+                    goodsInfoRequest.setSubOpenId(userInfo.getAppletsOpenId());
+                    goodsInfoRequest.setProfitSharing("1");
+                    goodsInfo.add(goodsInfoRequest);
+                    tradeOrderCreateData.setGoodsInfo(goodsInfo);
+                    TradeOrderCreate tradeOrderCreate = OrderUtil.tradeOrderCreate1(tradeOrderCreateData, 0);
+                    PayInfo payInfo = tradeOrderCreate.getPayInfo();
+                    if(!"000000".equals(payInfo.getRetCode())){
+                        return ResultUtil.error(payInfo.getRetMsg());
+                    }
+                    orderRide.setIsCreated(1);
+                    orderRide.setZttravelId(tradeOrderCreate.getOrderInfo().getOrderId());
+                    info = payInfo.getData().getRedirectUrl();
+                }else{
+                    //拉起支付
+                    TradePayOff1Data tradePayOff1Data = new TradePayOff1Data();
+                    tradePayOff1Data.setPartnerPayId(orderRide.getZttravelId());
+                    tradePayOff1Data.setTotalFee(Double.valueOf(orderMoney * 100).intValue() + "");
+                    tradePayOff1Data.setRetUrl(path);
+                    tradePayOff1Data.setClientIp(ip);
+                    tradePayOff1Data.setOrderDesc("完成订单");
+                    List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+                    GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+                    goodsInfoRequest.setSubOpenId(userInfo.getAppletsOpenId());
+                    goodsInfoRequest.setProfitSharing("1");
+                    goodsInfo.add(goodsInfoRequest);
+                    tradePayOff1Data.setGoodsInfo(goodsInfo);
+                    PayInfo payInfo = OrderUtil.tradePayOff1(tradePayOff1Data, 0);
+                    if(!"000000".equals(payInfo.getRetCode())){
+                        return ResultUtil.error(payInfo.getRetMsg());
+                    }
+                    info = payInfo.getData().getRedirectUrl();
+                }
+                orderRideService.updateById(orderRide);
+
+                //创建定时任务查询订单支付状态
+                ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
+                threadPoolExecutor.execute(()->{
+                    try {
+                        int num = 1;
+                        int wait = 0;
+                        while (num <= 13) {
+                            int min = 5000;
+                            wait += (min * num);
+                            OrderRide orderRide1 = orderRideService.selectById(orderRide.getId());
+                            if (orderRide1.getState() != 1) {
+                                break;
+                            }
+                            GetTravelItineraryListRequest request1 = new GetTravelItineraryListRequest();
+                            request1.setCustomerId(userInfo.getOnconUUID());
+                            request1.setOrderNo("SF" + orderRide1.getId());
+                            ListPage<List<TravelItinerary>> travelItineraryList = OrderUtil.getTravelItineraryList(request1);
+                            TravelItinerary travelItinerary = travelItineraryList.getList().get(0);
+                            if(travelItinerary.getStatus() != 7 || Arrays.asList(3, 11).contains(travelItinerary.getOrderStatus())){
+                                GetPaymentInfoDataRequest getPaymentInfoDataRequest1 = new GetPaymentInfoDataRequest();
+                                getPaymentInfoDataRequest1.setPartnerPayId(orderRide1.getZttravelId());
+                                GetPaymentInfo getPaymentInfo1 = OrderUtil.paymentInfo(getPaymentInfoDataRequest1);
+
+                                String trade_no = getPaymentInfo1.getPayId();
+                                Financial financial = new Financial();
+                                financial.setType(1);//类型 1=收入 2=支出
+                                financial.setPayType("2");//支付类型 1=余额 2=微信 3=支付宝
+                                financial.setMoney(orderMoney);//支付金额
+                                financial.setOrderNum(orderRide1.getOrderNum());//我们本地的订单号
+                                financial.setLsType(trade_no);//流水号
+                                financial.setAddTime(new Date());
+                                financial.setTradeStatus("success");
+                                //顺风车支付
+                                //修改订单表中的订单流水和支付方式
+                                orderRide1.setOutNum(financial.getLsType());//流水
+                                orderRide1.setPayTime(new Date());
+                                orderRide1.setPayType(2);
+                                orderRide1.setState(2);
+                                financial.setPwType(8);//顺风车
+                                financial.setUserId(orderRide1.getUserId());
+                                financial.setLx(1);//1=用户 2=司机
+                                financial.setOrderType(4);//顺风车
+                                financialService.insert(financial);
+                                orderRideService.updateById(orderRide1);
+                                /*添加系统消息*/
+                                try {
+                                    systemNoticeService.addSystemNotice(1, "您成功支付从" + orderRide1.getStartName() + "到" + orderRide1.getEndName() + "的顺风车订单", orderRide1.getUserId(), 1);
+                                } catch (Exception e) {
+                                    throw new RuntimeException(e);
+                                }
+
+                                break;
+                            }
+                            Thread.sleep(wait);
+                            num++;
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }finally {
+                        threadPoolExecutor.shutdown();
+                    }
+
+                });
+            }else{
+                info = new PayUtil().getPayInfo(payType,orderRide.getOrderNum(),openId,request);
+            }
             return ApiJson.returnOK(info);
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayUtil.java
index e7c1fd1..a94a524 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayUtil.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayUtil.java
@@ -72,8 +72,8 @@
 				//顺风车支付
 				OrderRide orderRide = orderRideService.selectOne(new EntityWrapper<OrderRide>().eq("orderNum", orderNum));
 				price = Double.valueOf(orderRide.getMoney());
-				body = "全客通-顺风车支付";
-				subject = "全客通-顺风车支付";
+				body = "贵人家园-顺风车支付";
+				subject = "贵人家园-顺风车支付";
 			}
 			Map<String, Object> map = new HashMap<String, Object>();
 			if (type == 1) {
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/rideCommentController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/rideCommentController.java
index d1e9ea2..2a46d13 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/rideCommentController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/rideCommentController.java
@@ -13,9 +13,8 @@
 import com.stylefeng.guns.modular.shunfeng.util.OrdersUtil;
 import com.stylefeng.guns.modular.shunfeng.util.SensitiveWordUtil;
 import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
-import com.stylefeng.guns.modular.system.model.SensitiveWords;
-import com.stylefeng.guns.modular.system.model.TCarBrand;
-import com.stylefeng.guns.modular.system.model.UserInfo;
+import com.stylefeng.guns.modular.system.model.*;
+import com.stylefeng.guns.modular.system.service.ICompanyService;
 import com.stylefeng.guns.modular.system.service.ISystemNoticeService;
 import com.stylefeng.guns.modular.system.service.ITCarBrandService;
 import com.stylefeng.guns.modular.system.service.IUserInfoService;
@@ -23,7 +22,9 @@
 import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil;
 import com.stylefeng.guns.modular.system.util.PushUtil;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
 import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
 import io.swagger.annotations.*;
 import net.sf.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,6 +36,7 @@
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.*;
 
 /**
@@ -88,6 +90,9 @@
         
         @Autowired
         private IFinancialService financialService;
+
+        @Autowired
+        private ICompanyService companyService;
         
 
 
@@ -647,6 +652,7 @@
             driverRide.setBrandId(brandId);
             driverRide.setUserId(userId);
             driverRide.setByInviteCode(inviteCodeRide);
+            driverRide.setCompanyId(1);
             driverRide.setCarType(carType);
             driverRide.setCarNum(carNum);
             driverRide.setLicense(license);
@@ -847,6 +853,25 @@
     }
 
 
+    private Integer getState(Integer state){
+        switch (state){
+            case 1:
+                return 7;
+            case 2:
+                return 1;
+            case 3:
+                return 4;
+            case 4:
+                return 5;
+            case 5:
+                return 8;
+            case 6:
+                return 10;
+        }
+        return null;
+    }
+
+
 
     //用户取消退款
     public void userCancelTuik(OrderRide orderRide){
@@ -864,8 +889,40 @@
             }else if(orderRide.getPayType()==2){
                 //微信
                 Integer money = new Double(orderRide.getMoney() * 100).intValue();
-                Integer tMoney_ = new Double(orderRide.getTuiMoney()* 100).intValue();
-                PayUtil.refundForWxpay(1, financial.getLsType(), orderRide.getOrderNum(), finNum, money,tMoney_ , "2");
+//                Integer tMoney_ = new Double(orderRide.getTuiMoney()* 100).intValue();
+//                PayUtil.refundForWxpay(1, financial.getLsType(), orderRide.getOrderNum(), finNum, money,tMoney_ , "2");
+
+                //中台订单退款操作
+                if(ToolUtil.isNotEmpty(orderRide.getZttravelId())){
+                    UserInfo userInfo = userInfoService.selectById(orderRide.getUserId());
+                    TradeOrderRefundRequest request = new TradeOrderRefundRequest();
+                    request.setPartnerPayId(orderRide.getZttravelId());
+                    request.setPayId(financial.getLsType());
+                    request.setRefundTotalFee(money + "");
+                    request.setRemark("顺风车订单取消退款");
+                    request.setRefundType("RF");
+
+                    RefundInfoRequest refundInfo = new RefundInfoRequest();
+                    refundInfo.setPayItemId(orderRide.getZttravelId());
+                    refundInfo.setPayId(financial.getLsType());
+                    refundInfo.setTradeFee(money + "");
+                    request.setRefundInfos(new ArrayList<RefundInfoRequest>(){{
+                        add(refundInfo);
+                    }});
+                    TradeOrderRefund tradeOrderRefund = OrderUtil.tradeOrderRefund(request);
+                    //退款通知
+                    OrderRefundNoticeRequest request2 = new OrderRefundNoticeRequest();
+                    request2.setOrderId(orderRide.getZttravelId());
+                    request2.setRefundPayNum(tradeOrderRefund.getRefundId());
+                    request2.setRefundType("5");
+                    request2.setApplyRefundCharge(BigDecimal.valueOf(orderRide.getMoney()));
+                    request2.setActualRefundCharge(BigDecimal.valueOf(orderRide.getMoney()));
+                    request2.setRefundAccount(userInfo.getOnconUUID());
+                    request2.setRemark("顺风车订单取消退款");
+                    OrderUtil.orderRefundNotice(request2);
+                }
+
+
             }else if(orderRide.getPayType()==3){
             
             }
@@ -881,6 +938,11 @@
             f.setOrderType(4);
             f.setLx(1);
             financialService.insert(f);
+        }else{
+            //未支付的情况取消订单
+            if(ToolUtil.isNotEmpty(orderRide.getZttravelId())){
+                OrderUtil.tradeOrderCancel(orderRide.getZttravelId());
+            }
         }
         /*添加系统消息*/
         try {
@@ -1006,6 +1068,7 @@
             if(orderRide!=null && orderRide.getState()==6){
                 return  ResultUtil.error("用户已取消该行程");
             }
+            UserInfo userInfo=userInfoService.selectById(driverRide.getUserId());
             if(orderTravel!=null){
                 if(type==1){//1确认同行 一个行程只能匹配一个订单
                     if(orderTravel.getState()==3){
@@ -1026,7 +1089,7 @@
                     driverRide.setTotalOrders(driverRide.getTotalOrders()+1);
                     driverRideService.updateById(driverRide);
                     /*修改用户接单数和司机提成*/
-                    UserInfo userInfo=userInfoService.selectById(driverRide.getUserId());
+
                     userInfo.setBalance(userInfo.getBalance()+(orderRide.getMoney()-orderRide.getPlatformMoney()));
                     userInfo.setTotalOrders(userInfo.getTotalOrders() + 1);
                     userInfoService.updateById(userInfo);
@@ -1074,6 +1137,18 @@
                     throw new RuntimeException(e);
                 }
             }
+
+            if(null != orderRide.getZttravelId()){
+                //中台修改订单状态
+                ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+                request.setOrderId(orderRide.getZttravelId());
+                request.setStatus(getState(orderRide.getState()));
+                if (null != orderRide.getDriverId()) {
+                    request.setDriverId(driverRide.getEmpId().toString());
+                }
+                OrderUtil.modifyTravelItinerary(request);
+            }
+
             pushUtil.pushOrderState(1, orderRide.getUserId(), orderRide.getId(), 8, orderRide.getState(), null);
             return ResultUtil.success("");
         } catch (Exception e) {
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/DriverRide.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/DriverRide.java
index 30cf586..b3d5f9c 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/DriverRide.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/DriverRide.java
@@ -2,11 +2,14 @@
 
 import java.io.Serializable;
 
+import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.enums.IdType;
 import java.util.Date;
 import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.activerecord.Model;
 import com.baomidou.mybatisplus.annotations.TableName;
+import io.swagger.annotations.ApiModelProperty;
+
 import java.io.Serializable;
 
 /**
@@ -119,6 +122,30 @@
      * 品牌id
      */
     private Integer brandId;
+    /**
+     * 中台员工ID
+     */
+    @TableField("empId")
+    private Long empId;
+    /**
+     * 中台员工所属企业ID
+     */
+    @TableField("enterId")
+    private Long enterId;
+    /**
+     * 中台员工所属企业编号
+     */
+    @TableField("entercode")
+    private String entercode;
+
+    @ApiModelProperty("证联客户号")
+    private String custId;
+
+    @ApiModelProperty("是否已开通支付账户(0:否,1:是)")
+    private Integer accOpenFlag;
+
+    @ApiModelProperty("是否已同步到中台(0:否,1:是)")
+    private Integer isSynchronous;
 
     public Integer getId() {
         return id;
@@ -312,6 +339,54 @@
         this.brandId = brandId;
     }
 
+    public Long getEmpId() {
+        return empId;
+    }
+
+    public void setEmpId(Long empId) {
+        this.empId = empId;
+    }
+
+    public Long getEnterId() {
+        return enterId;
+    }
+
+    public void setEnterId(Long enterId) {
+        this.enterId = enterId;
+    }
+
+    public String getEntercode() {
+        return entercode;
+    }
+
+    public void setEntercode(String entercode) {
+        this.entercode = entercode;
+    }
+
+    public String getCustId() {
+        return custId;
+    }
+
+    public void setCustId(String custId) {
+        this.custId = custId;
+    }
+
+    public Integer getAccOpenFlag() {
+        return accOpenFlag;
+    }
+
+    public void setAccOpenFlag(Integer accOpenFlag) {
+        this.accOpenFlag = accOpenFlag;
+    }
+
+    public Integer getIsSynchronous() {
+        return isSynchronous;
+    }
+
+    public void setIsSynchronous(Integer isSynchronous) {
+        this.isSynchronous = isSynchronous;
+    }
+
     @Override
     protected Serializable pkVal() {
         return this.id;
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/OrderRide.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/OrderRide.java
index 796a657..ac6425c 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/OrderRide.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/model/OrderRide.java
@@ -147,6 +147,14 @@
      * 评价内容
      */
     private String content;
+    /**
+     * 中台行程id
+     */
+    private String zttravelId;
+    /**
+     * 中台是否已创建订单(0=否,1=是)
+     */
+    private Integer isCreated;
 
 
 
@@ -399,6 +407,22 @@
         this.content = content;
     }
 
+    public String getZttravelId() {
+        return zttravelId;
+    }
+
+    public void setZttravelId(String zttravelId) {
+        this.zttravelId = zttravelId;
+    }
+
+    public Integer getIsCreated() {
+        return isCreated;
+    }
+
+    public void setIsCreated(Integer isCreated) {
+        this.isCreated = isCreated;
+    }
+
     @Override
     protected Serializable pkVal() {
         return this.id;
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/task/jobs/CourseExamineRide.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/task/jobs/CourseExamineRide.java
index 5e72d18..2444fe6 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/task/jobs/CourseExamineRide.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/task/jobs/CourseExamineRide.java
@@ -1,8 +1,12 @@
 package com.stylefeng.guns.modular.shunfeng.task.jobs;
 
+import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.shunfeng.model.OrderRide;
 import com.stylefeng.guns.modular.shunfeng.model.TimeTask;
 import com.stylefeng.guns.modular.shunfeng.task.base.AbstractJob;
+import com.stylefeng.guns.modular.system.model.Company;
+import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.ModifyTravelItineraryRequest;
 import org.quartz.JobDataMap;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -30,6 +34,11 @@
                 //自动取消
                 order.setState(6);
                 this.orderRideService.updateById(order);
+
+                //未支付的情况取消订单
+                if(ToolUtil.isNotEmpty(order.getZttravelId())){
+                    OrderUtil.tradeOrderCancel(order.getZttravelId());
+                }
             }
             //修改定时任务数据状态
             TimeTask timeTask=timeTaskService.selectById(timeTaskId);
@@ -40,4 +49,23 @@
             e.printStackTrace();
         }
     }
+
+
+    private Integer getState(Integer state){
+        switch (state){
+            case 1:
+                return 7;
+            case 2:
+                return 1;
+            case 3:
+                return 4;
+            case 4:
+                return 5;
+            case 5:
+                return 8;
+            case 6:
+                return 10;
+        }
+        return null;
+    }
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index e1756b2..d9d2673 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -167,7 +167,8 @@
 
 	@Autowired
 	private TDriverPromotionActivityService driverPromotionActivityService;
-	
+	private CarMapper carMapper;
+
 	/**
 	 * 专车下单操作
 	 *
@@ -246,7 +247,15 @@
 						return ResultUtil.error("有未完成的订单");
 					}
 				}
-				
+				String serverCarModel = "";
+				if(2 == orderSource){
+					Driver driver = driverService.selectById(driverId);
+					CarService carService = new CarService();
+					carService.setType(1);
+					carService.setCarId(driver.getCarId());
+					CarService carService1 = carServiceMapper.selectOne(carService);
+					serverCarModel = "{\"serverCarModelId\":" + carService1.getServerCarModelId() + ",\"rideType\":1}";
+				}
 				
 				startAddress = startAddress.replaceAll("& #40;", "(");
 				startAddress = startAddress.replaceAll("& #41;", ")");
@@ -262,6 +271,7 @@
 				orderPrivateCar.setType(type);
 				orderPrivateCar.setUserId(uid);
 				orderPrivateCar.setServerCarModelId(serverCarModelId);
+				orderPrivateCar.setServerCarModel(serverCarModel);
 				orderPrivateCar.setOrderNum(this.getOrderNum());
 				orderPrivateCar.setPlacementLon(Double.valueOf(placementLon));
 				orderPrivateCar.setPlacementLat(Double.valueOf(placementLat));
@@ -555,6 +565,15 @@
 						return ResultUtil.error("有未完成的订单");
 					}
 				}
+
+				if(2 == orderSource){
+					Driver driver = driverService.selectById(driverId);
+					CarService carService = new CarService();
+					carService.setType(1);
+					carService.setCarId(driver.getCarId());
+					CarService carService1 = carServiceMapper.selectOne(carService);
+					serverCarModel = "{\"serverCarModelId\":" + carService1.getServerCarModelId() + ",\"rideType\":1}";
+				}
 				
 				startAddress = startAddress.replaceAll("& #40;", "(");
 				startAddress = startAddress.replaceAll("& #41;", ")");
@@ -563,7 +582,7 @@
 				if (ToolUtil.isEmpty(serverCarModel)) {
 					return ResultUtil.error("请选择服务车型");
 				}
-				
+
 				OrderPrivateCar orderPrivateCar = new OrderPrivateCar();
 				orderPrivateCar.setPeopleNum(peopleNum);
 				orderPrivateCar.setType(3);
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
index c6ac200..f69f778 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
@@ -242,5 +242,5 @@
      * @param phone
      * @return
      */
-    String addAppUser(String phone, String code, String areaCode) throws Exception;
+    String addAppUser(String phone, String code, String areaCode, String onconUUID) throws Exception;
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
index a7c5a36..bcd202b 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
@@ -279,8 +279,6 @@
                 userInfo.setCompanyId(1);
             }
 
-
-
             this.insert(userInfo);
 
             this.addCoupon(userInfo);//添加优惠券
@@ -317,7 +315,7 @@
         return ResultUtil.success(loginWarpper);
     }
     /**
-     * 手机验证码登录
+     * 手机一键登录
      * @param accessToken
      * @return
      */
@@ -334,19 +332,39 @@
             return ResultUtil.error("登录失败");
         }
         String phone = json.getJSONObject("data").getString("mobile");
-    
+
+        //调中台接口查询用户
+        List<QYTUserInfo> infoByPhone = UserUtil.getUserInfoByPhone(phone);
+        String onconUUID = null;
+        String nickName = this.getDefaultName();
+        if (null == infoByPhone || infoByPhone.isEmpty()) {
+            RegisterViaMobileRequest request = new RegisterViaMobileRequest();
+            request.setMobile(phone);
+            request.setEncryptType("aesbase64");
+            request.setPassword(AESUtils.encryptBase64("123456"));
+            request.setNickname(nickName);
+            RegisterViaMobile register = UserUtil.registerViaMobile(request);
+            if (!"0".equals(register.getStatus())) {
+                return ResultUtil.error(register.getDesc());
+            }
+            onconUUID = register.getOnconUUID();
+        }else{
+            onconUUID = UserUtil.getOnconUUIDByMobile(phone);
+        }
+
         UserInfo userInfo = userInfoMapper.queryByPhone(phone);
         if (null == userInfo) {
             userInfo = new UserInfo();
             userInfo.setAvatar("https://traffic.qytzt.cn/v1/AUTH_d8bef0a04db511f0b79d01a3e2b7587e/qyt20250702/imgs/management/d081e7a9-13d4-4eec-afb6-afd10885a664.png");
             userInfo.setPhone(phone);
             userInfo.setPassWord(ShiroKit.md5("", salt));
-            userInfo.setNickName(this.getDefaultName());
+            userInfo.setNickName(nickName);
             userInfo.setRegistIp(registIp);
             userInfo.setIsAuth(1);
             userInfo.setConsumption(0D);
             userInfo.setBalance(0D);
             userInfo.setState(1);
+            userInfo.setOnconUUID(onconUUID);
         
             //用户所属企业
             if(null != registAreaCode){
@@ -386,8 +404,6 @@
         loginWarpper.setEmergencyContact(userInfo.getEmergencyContact());
         loginWarpper.setEmergencyContactNumber(userInfo.getEmergencyContactNumber());
         loginWarpper.setPhone(2);
-    
-        //smsrecordService.saveData(1, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!");
         return ResultUtil.success(loginWarpper);
     }
     @Override
@@ -510,6 +526,9 @@
         loginWarpper.setEmergencyContactNumber(userInfo.getEmergencyContactNumber());
         return ResultUtil.success(loginWarpper);
     }
+
+
+
     @Override
     public ResultUtil<LoginWarpper> wxLogin(Integer type, String openid, String unionid, String jscode, String registIp,
                                             String registAreaCode, Integer sex, String nickName, String avatar,String loginType) throws Exception {
@@ -636,6 +655,10 @@
             openid = map.get("openid");
             unionid = map.get("unionid");
             sessionKey = map.get("sessionKey");
+            if(ToolUtil.isEmpty(phone)){
+                phone = getPhone(sessionKey, encryptedData, iv);
+            }
+
             if(ToolUtil.isNotEmpty(phone)){
                 List<UserInfo> phone1 = userInfoMapper.selectList(new EntityWrapper<UserInfo>().eq("phone", phone).eq("state",1).ne("flag",3));
                 if(phone1.size()>0){
@@ -647,22 +670,34 @@
             }else {
                 userInfo = userInfoMapper.queryByOpenid2(openid);
             }
-            System.out.println(userInfo);
-            if(ToolUtil.isEmpty(phone) && ToolUtil.isNotEmpty(userInfo) && ToolUtil.isEmpty(userInfo.getPhone())){
-                String phone1 = getPhone(sessionKey, encryptedData, iv);
-                userInfo.setPhone(phone1);
-                userInfoMapper.updateById(userInfo);
-            }
         }else{//APP
             userInfo = userInfoMapper.queryByOpenid(openid);
         }
+        //调中台接口查询用户
+        List<QYTUserInfo> infoByPhone = UserUtil.getUserInfoByPhone(phone);
+        String onconUUID = null;
+        nickName = this.getDefaultName();
+        if (null == infoByPhone || infoByPhone.isEmpty()) {
+            RegisterViaMobileRequest request = new RegisterViaMobileRequest();
+            request.setMobile(phone);
+            request.setEncryptType("aesbase64");
+            request.setPassword(AESUtils.encryptBase64("123456"));
+            request.setNickname(nickName);
+            RegisterViaMobile register = UserUtil.registerViaMobile(request);
+            if (!"0".equals(register.getStatus())) {
+                return ResultUtil.error(register.getDesc());
+            }
+            onconUUID = register.getOnconUUID();
+        }else{
+            onconUUID = UserUtil.getOnconUUIDByMobile(phone);
+        }
+
         int i =0;
         if(null == userInfo){
             userInfo = new UserInfo();
             userInfo.setAvatar("https://traffic.qytzt.cn/v1/AUTH_d8bef0a04db511f0b79d01a3e2b7587e/qyt20250702/imgs/management/d081e7a9-13d4-4eec-afb6-afd10885a664.png");
             if(ToolUtil.isEmpty(phone)){
-                String phone2 = getPhone(sessionKey, encryptedData, iv);
-                List<UserInfo> phone1 = userInfoMapper.selectList(new EntityWrapper<UserInfo>().eq("phone", phone2).eq("state",1).ne("flag",3));
+                List<UserInfo> phone1 = userInfoMapper.selectList(new EntityWrapper<UserInfo>().eq("phone", phone).eq("state",1).ne("flag",3));
                 if(phone1.size()>0){
                     userInfo = phone1.get(0);
                     userInfo.setUnionid(unionid);
@@ -670,7 +705,7 @@
                     userInfoMapper.updateById(userInfo);
                     i=1;
                 }else {
-                    userInfo.setPhone(phone2);
+                    userInfo.setPhone(phone);
                 }
             }else {
                 userInfo.setPhone(phone);
@@ -680,8 +715,9 @@
             userInfo.setRegistIp(registIp);
             userInfo.setSex(sex);
 
-            userInfo.setNickName(ToolUtil.isNotEmpty(nickName) ? nickName : this.getDefaultName());
+            userInfo.setNickName(nickName);
             userInfo.setAvatar(avatar);
+            userInfo.setOnconUUID(onconUUID);
 
            if(type == 2){
                userInfo.setAppletsOpenId(openid);
@@ -876,7 +912,7 @@
         }
         //调中台接口查询用户
         String onconUUID = null;
-                List<QYTUserInfo> infoByPhone = UserUtil.getUserInfoByPhone(phone);
+        List<QYTUserInfo> infoByPhone = UserUtil.getUserInfoByPhone(phone);
         if (null == infoByPhone || infoByPhone.isEmpty()) {
             RegisterViaMobileRequest request = new RegisterViaMobileRequest();
             request.setMobile(phone);
@@ -895,6 +931,7 @@
             if (!b) {
                 return ResultUtil.error("验证码无效");
             }
+            onconUUID = UserUtil.getOnconUUIDByMobile(phone);
         }
         UserInfo userInfo1 = userInfoMapper.queryByPhone(phone);
         if (null != userInfo1) {
@@ -1640,7 +1677,7 @@
     
     
     @Override
-    public String addAppUser(String phone, String code, String areaCode) throws Exception {
+    public String addAppUser(String phone, String code, String areaCode, String onconUUID) throws Exception {
         UserInfo userInfo = userInfoMapper.queryByPhone(phone);
         String nickName = null;
         if (null == userInfo) {
@@ -1650,22 +1687,6 @@
         }
         //调中台接口查询用户
         List<QYTUserInfo> infoByPhone = UserUtil.getUserInfoByPhone(phone);
-        String onconUUID = null;
-        if (null == infoByPhone || infoByPhone.isEmpty()) {
-            RegisterViaMobileRequest request = new RegisterViaMobileRequest();
-            request.setMobile(phone);
-            request.setEncryptType("aesbase64");
-            request.setPassword(AESUtils.encryptBase64("123456"));
-            request.setNickname(nickName);
-            request.setVerify_code(code);
-            request.setVerify_code_type("0");
-            RegisterViaMobile register = UserUtil.registerViaMobile(request);
-            if (!"0".equals(register.getStatus())) {
-                return null;
-            }
-            onconUUID = register.getOnconUUID();
-        }
-    
         if (null == userInfo) {
             userInfo = new UserInfo();
             userInfo.setAvatar("https://traffic.qytzt.cn/v1/AUTH_d8bef0a04db511f0b79d01a3e2b7587e/qyt20250702/imgs/management/d081e7a9-13d4-4eec-afb6-afd10885a664.png");
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
index b724f16..3945c93 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
@@ -236,4 +236,49 @@
 		StaffNodeInfo staffNodeInfo = object.getObject("data", StaffNodeInfo.class);
 		return staffNodeInfo;
 	}
+
+
+	/**
+	 * 创建账号-同步证联开户信息
+	 * @param request
+	 * @return 状态 0 成功 其他失败
+	 */
+	public static Integer addAccountInfo(AddAccountInfoRequest request){
+		request.setPartnerId("522700");
+		request.setIndustryCode("100");
+		request.setPayModeId("501101");
+		request.setAccessMode("APP");
+
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/addAccountInfo";
+		//私钥文件
+		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("【创建账号-同步证联开户信息】请求失败:" + jsonObject.getString("retMsg"));
+			return -1;
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		return object.getInteger("status");
+	}
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
index 48de991..70b9c86 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
@@ -160,7 +160,7 @@
 	public QianYunTongConfig getQianYunTongConfig() {
 		if("dev".equals(activeProfile)){
 			this.appkey = "10001104";
-			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
+			this.privateKeyPath = "E:\\项目文档\\黔云通\\private_key_test.pem";
 			this.userName = "xiaofei";
 			this.status = "1";
 			this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/AddAccountInfoRequest.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/AddAccountInfoRequest.java
new file mode 100644
index 0000000..c1ef4ad
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/AddAccountInfoRequest.java
@@ -0,0 +1,45 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 18:45
+ */
+@Data
+public class AddAccountInfoRequest {
+	/**
+	 * 易信编号
+	 * (个人帐号传onconuuid,
+	 * 企业帐号传企业编号)
+	 */
+	private String custId;
+	/**
+	 * 帐号编号
+	 */
+	private String accountNo;
+	/**
+	 * 帐户名称
+	 */
+	private String accountName;
+	/**
+	 * 租户标识: 黔南-522700
+	 */
+	private String partnerId;
+	/**
+	 * 场景编号:网约车-100
+	 */
+	private String industryCode;
+	/**
+	 * 支付方式: 501101
+	 */
+	private String payModeId;
+	/**
+	 * 支付模式: APP
+	 */
+	private String accessMode;
+	/**
+	 * 司机手机号
+	 */
+	private String mobile;
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/CallbackUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/CallbackUtil.java
new file mode 100644
index 0000000..5be24c1
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/CallbackUtil.java
@@ -0,0 +1,47 @@
+package com.stylefeng.guns.modular.system.util.zhenglian;
+
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.MessageBody;
+import com.zlpay.assist.encrypt.sm4.SM4Util;
+import com.zlpay.assist.sign.sm2.SM2Util;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/28 14:25
+ */
+@Slf4j
+public class CallbackUtil {
+	
+	private static ZhengLianConfig zhengLianConfig = SpringContextsUtil.getBean(ZhengLianConfig.class).getZhengLianConfig();
+	
+	
+	public static String callback(MessageBody messageBody) {
+		try {
+			String data = messageBody.getData();
+			String sign = messageBody.getSign();
+			String secret = messageBody.getSecret();
+			//加密对称加密的秘钥
+			// 获取公钥
+			String publicKey = ZhengLianUtil.getPublicKey();
+			// 验签
+			boolean checkResult = SM2Util.verify(publicKey, zhengLianConfig.getEncrpNo(), sign, data);
+			System.out.println("验签结果:" + checkResult);
+			// 获取私钥
+			String privateKey = ZhengLianUtil.getPrivateKey();
+			// 解密对称秘钥
+			String k = SM2Util.decrypt(privateKey, secret);
+			System.out.println("对称秘钥:" + k);
+			// 解密业务报文
+			String backData = SM4Util.sm4EcbDecrypt(k, data);
+			System.out.println("业务报文:" + backData);
+			return backData;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	
+	
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/TokenUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/TokenUtil.java
new file mode 100644
index 0000000..8bd3b0f
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/TokenUtil.java
@@ -0,0 +1,91 @@
+package com.stylefeng.guns.modular.system.util.zhenglian;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.UUIDUtil;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.MessageBody;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.TokenRequest;
+import com.zlpay.assist.encrypt.sm4.SM4Util;
+import com.zlpay.assist.sign.sm2.SM2Util;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 14:06
+ */
+@Slf4j
+public class TokenUtil {
+
+	private static ZhengLianConfig zhengLianConfig = SpringContextsUtil.getBean(ZhengLianConfig.class).getZhengLianConfig();
+	
+
+	public static String getToken(TokenRequest tokenRequest) throws Exception {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+		Map<String,String> headerMap = new HashMap<String,String>();
+		MessageBody body = new MessageBody();
+		headerMap.put("msgId", UUIDUtil.getRandomCode());
+		headerMap.put("merchNo", zhengLianConfig.getMerchNo());
+		headerMap.put("txCode", "ZLPAY.ACC.T0001");
+		headerMap.put("version", "1.0.1");
+		headerMap.put("signa", "1");
+		headerMap.put("signNo", zhengLianConfig.getSignNo());
+		headerMap.put("encrp", "1");
+		headerMap.put("encrpNo", zhengLianConfig.getEncrpNo());
+		headerMap.put("timestamp", sdf.format(new Date()));
+		log.info("【证联获取token】请求头报文:"+JSON.toJSONString(headerMap));
+		
+		tokenRequest.setAppId(zhengLianConfig.getAppid());
+		String reqBO = JSON.toJSONString(tokenRequest);
+		log.info("【证联获取token】请求体报文:"+reqBO);
+		// 生成对称加密秘钥
+		String key = ZhengLianUtil.generateKey(16);
+		// 加密数据
+		String jsonData = SM4Util.sm4EcbEncrypt(key, reqBO, "NoPadding");
+		//加密对称加密的秘钥
+		// 获取公钥
+		String publicKey = ZhengLianUtil.getPublicKey();
+		String secrtKey = SM2Util.encrypt(publicKey, key);
+		
+		// 将密文放入body
+		body.setData(jsonData);
+		body.setSign(ZhengLianUtil.sign(jsonData));
+		body.setSecret(secrtKey);
+		log.info("【证联获取token】请求体密文报文:"+JSON.toJSONString(body));
+		String result = ZLHttpClientUtil.doPost(zhengLianConfig.getUrl(), headerMap, JSON.toJSONString(body));
+		
+		log.info("【证联获取token】应答内容:"+ result);
+		MessageBody respBody = JSON.parseObject(result,MessageBody.class);
+		// 验签
+		boolean checkResult = SM2Util.verify(publicKey, zhengLianConfig.getEncrpNo(), respBody.getSign(), respBody.getData());
+		log.info("【证联获取token】验签结果:" + checkResult);
+		// 获取私钥
+		String privateKey = ZhengLianUtil.getPrivateKey();
+		// 解密对称秘钥
+		String k = SM2Util.decrypt(privateKey, respBody.getSecret());
+		log.info("【证联获取token】对称秘钥:" + k);
+		// 解密业务报文
+		String backData = SM4Util.sm4EcbDecrypt(k, respBody.getData());
+		log.info("【证联获取token】返回业务报文:" + backData);
+		JSONObject jsonObject = JSON.parseObject(backData);
+		String sysRtnCode = jsonObject.getString("sysRtnCode");
+		if(!"000000".equals(sysRtnCode)){
+			log.error("【证联获取token】获取token失败!{}", jsonObject.getString("sysRtnMsg"));
+			throw new Exception(jsonObject.getString("sysRtnMsg"));
+		}
+		JSONObject bizData = jsonObject.getJSONObject("bizData");
+		String resCode = bizData.getString("resCode");
+		if(!"S010000".equals(resCode)){
+			log.error("【证联获取token】获取token失败!{}", bizData.getString("resMsg"));
+			throw new Exception(jsonObject.getString("resMsg"));
+		}
+		JSONObject resData = bizData.getJSONObject("resData");
+		return resData.getString("token");
+	}
+	
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZLHttpClientUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZLHttpClientUtil.java
new file mode 100644
index 0000000..740a4be
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZLHttpClientUtil.java
@@ -0,0 +1,129 @@
+package com.stylefeng.guns.modular.system.util.zhenglian;
+
+import org.apache.http.client.config.AuthSchemes;
+import org.apache.http.client.config.CookieSpecs;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.util.EntityUtils;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.IOException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/28 14:23
+ */
+public class ZLHttpClientUtil {
+	
+	/**
+	 * 连接超时时间
+	 */
+	private final static int CONNECT_TIMEOUT = 30000;
+	/**
+	 * 请求超时时间
+	 */
+	private final static int REQUEST_TIMEOUT = 50000;
+	/**
+	 * socket超时时间
+	 */
+	private final static int SOCKET_TIMEOUT = 50000;
+	/**
+	 * 请求格式
+	 */
+	private final static String FORMAT = "application/json";
+	/**
+	 * 请求类型
+	 */
+	private final static String POST_TYPE = "https://";
+	
+	public static String doPost(String url, Map<String, String> headerMap, String jsonData) {
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+		if (url != null && url.startsWith(POST_TYPE)) {
+			httpClient = sslClient();
+		}
+		HttpPost httpPost = new HttpPost(url);
+		RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT)
+				.setConnectionRequestTimeout(REQUEST_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).setRedirectsEnabled(true)
+				.build();
+		httpPost.setConfig(requestConfig);
+		httpPost.setHeader("Content-Type", "application/json");
+		if (headerMap != null) {
+			Set<String> keys = headerMap.keySet();
+			for (Iterator<String> i = keys.iterator(); i.hasNext();) {
+				String key = (String) i.next();
+				httpPost.addHeader(key, headerMap.get(key));
+			}
+		}
+		try {
+			httpPost.setEntity(new StringEntity(jsonData, ContentType.create(FORMAT, "UTF-8")));
+			CloseableHttpResponse execute = httpClient.execute(httpPost);
+			int statusCode = execute.getStatusLine().getStatusCode();
+			if (statusCode == 200) {
+				return String.valueOf(EntityUtils.toString(execute.getEntity()));
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (null != httpClient) {
+				try {
+					httpClient.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return null;
+	}
+	
+	private static CloseableHttpClient sslClient() {
+		try {
+			X509TrustManager trustManager = new X509TrustManager() {
+				@Override public X509Certificate[] getAcceptedIssuers() {
+					return null;
+				}
+				@Override public void checkClientTrusted(X509Certificate[] xcs, String str) {}
+				@Override public void checkServerTrusted(X509Certificate[] xcs, String str) {}
+			};
+			SSLContext ctx = SSLContext.getInstance(SSLConnectionSocketFactory.TLS);
+			ctx.init(null, new TrustManager[] { trustManager }, null);
+			SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE);
+			// 创建Registry
+			RequestConfig requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD_STRICT)
+					.setExpectContinueEnabled(Boolean.TRUE).setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM,AuthSchemes.DIGEST))
+					.setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build();
+			Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+					.register("http", PlainConnectionSocketFactory.INSTANCE)
+					.register("https",socketFactory).build();
+			// 创建ConnectionManager,添加Connection配置信息
+			PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+			CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(connectionManager)
+					.setDefaultRequestConfig(requestConfig).build();
+			return closeableHttpClient;
+		} catch (KeyManagementException ex) {
+			throw new RuntimeException(ex);
+		} catch (NoSuchAlgorithmException ex) {
+			throw new RuntimeException(ex);
+		}
+	}
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianConfig.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianConfig.java
new file mode 100644
index 0000000..2e3b85a
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianConfig.java
@@ -0,0 +1,88 @@
+package com.stylefeng.guns.modular.system.util.zhenglian;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/8 11:31
+ */
+@Data
+@Component
+public class ZhengLianConfig {
+	
+	@Value("${spring.profiles.active}")
+	private String activeProfile;
+	/**
+	 * 接口地址
+	 */
+	private String url;
+	/**
+	 * appid
+	 */
+	private String appid;
+	/**
+	 * 商户号
+	 */
+	private String merchNo;
+	/**
+	 * 加密证书序列号
+	 */
+	private String encrpNo;
+	/**
+	 * 签名证书序列号
+	 */
+	private String signNo;
+	/**
+	 * 证书
+	 */
+	private String cer;
+	/**
+	 * 证书
+	 */
+	private String sm2;
+	/**
+	 *
+	 */
+	private String password;
+	
+	/**
+	 * 获取不同环境的配置
+	 * @return
+	 */
+	public ZhengLianConfig getZhengLianConfig() {
+		if("dev".equals(activeProfile)){
+			this.url = "https://gatewaytest.zqpay.com";
+			this.appid = "7ba66c0bc9111c141f8de92d0f095273";
+			this.merchNo = "B00000871";
+			this.encrpNo = "1055490595";
+			this.signNo = "1066348524";
+			this.cer = "E:\\项目文档\\黔云通\\UAT-demo-公用\\1055490595.cer";
+			this.sm2 = "E:\\项目文档\\黔云通\\UAT-demo-公用\\871_111111.sm2";
+			this.password = "111111";
+		}
+		if("test".equals(activeProfile)){
+			this.url = "https://gatewaytest.zqpay.com";
+			this.appid = "7ba66c0bc9111c141f8de92d0f095273";
+			this.merchNo = "B00000871";
+			this.encrpNo = "1055490595";
+			this.signNo = "1066348524";
+			this.cer = "/etraffic/server/1055490595.cer";
+			this.sm2 = "/etraffic/server/871_111111.sm2";
+			this.password = "111111";
+		}
+		if("prod".equals(activeProfile)){
+			this.url = "https://gateway.zqpay.com";
+			this.appid = "3e06da1751ec1626b30f7703a088f298";
+			this.merchNo = "B00000402";
+			this.encrpNo = "1342935640";
+			this.signNo = "1471742568";
+			this.cer = "/etraffic/server/1342935640.cer";
+			this.sm2 = "/etraffic/server/1342935640.sm2";
+			this.password = "31028Mky";
+		}
+		return this;
+	}
+	
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianUtil.java
new file mode 100644
index 0000000..47669e1
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianUtil.java
@@ -0,0 +1,208 @@
+package com.stylefeng.guns.modular.system.util.zhenglian;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.UUIDUtil;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.MessageBody;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo;
+import com.stylefeng.guns.modular.system.util.zhenglian.model.ZLUserInfo;
+import com.zlpay.assist.encrypt.sm4.SM4Util;
+import com.zlpay.assist.sign.sm2.SM2Cert;
+import com.zlpay.assist.sign.sm2.SM2Util;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.RandomStringUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.security.cert.X509Certificate;
+import java.text.SimpleDateFormat;
+import java.util.Base64;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/28 14:22
+ */
+@Slf4j
+public class ZhengLianUtil {
+	
+	private static ZhengLianConfig zhengLianConfig = SpringContextsUtil.getBean(ZhengLianConfig.class).getZhengLianConfig();
+	
+	
+	
+	
+	
+	/**
+	 * 获取用户详情
+	 * @param appUserId
+	 * @param tradeTerminalInfo
+	 * @return
+	 * @throws Exception
+	 */
+	public static ZLUserInfo getUserInfo(String appUserId, TradeTerminalInfo tradeTerminalInfo) throws Exception {
+		log.info("正联配置信息:{}", JSON.toJSONString(zhengLianConfig));
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+		Map<String,String> headerMap = new HashMap<String,String>();
+		MessageBody body = new MessageBody();
+		headerMap.put("msgId", UUIDUtil.getRandomCode());
+		headerMap.put("merchNo", zhengLianConfig.getMerchNo());
+		headerMap.put("txCode", "ZLPAY.ACC.T0009");
+		headerMap.put("version", "1.0.1");
+		headerMap.put("signa", "1");
+		headerMap.put("signNo", zhengLianConfig.getSignNo());
+		headerMap.put("encrp", "1");
+		headerMap.put("encrpNo", zhengLianConfig.getEncrpNo());
+		headerMap.put("timestamp", sdf.format(new Date()));
+		log.info("【证联获取用户信息】请求头报文:"+JSON.toJSONString(headerMap));
+		
+		Map<String, Object> map = new HashMap<>();
+		map.put("appId", zhengLianConfig.getAppid());
+		map.put("appUserId", appUserId);
+		map.put("tradeTerminalInfo", tradeTerminalInfo);
+		String reqBO = JSON.toJSONString(map);
+		log.info("【证联获取用户信息】请求体报文:"+reqBO);
+		// 生成对称加密秘钥
+		String key = ZhengLianUtil.generateKey(16);
+		// 加密数据
+		String jsonData = SM4Util.sm4EcbEncrypt(key, reqBO, "NoPadding");
+		//加密对称加密的秘钥
+		// 获取公钥
+		String publicKey = ZhengLianUtil.getPublicKey();
+		String secrtKey = SM2Util.encrypt(publicKey, key);
+		
+		// 将密文放入body
+		body.setData(jsonData);
+		body.setSign(ZhengLianUtil.sign(jsonData));
+		body.setSecret(secrtKey);
+		log.info("【证联获取用户信息】请求体密文报文:"+JSON.toJSONString(body));
+		String result = ZLHttpClientUtil.doPost(zhengLianConfig.getUrl(), headerMap, JSON.toJSONString(body));
+		
+		log.info("【证联获取用户信息】应答内容:"+ result);
+		MessageBody respBody = JSON.parseObject(result,MessageBody.class);
+		// 验签
+		boolean checkResult = SM2Util.verify(publicKey, zhengLianConfig.getEncrpNo(), respBody.getSign(), respBody.getData());
+		log.info("【证联获取用户信息】验签结果:" + checkResult);
+		// 获取私钥
+		String privateKey = ZhengLianUtil.getPrivateKey();
+		// 解密对称秘钥
+		String k = SM2Util.decrypt(privateKey, respBody.getSecret());
+		log.info("【证联获取用户信息】对称秘钥:" + k);
+		// 解密业务报文
+		String backData = SM4Util.sm4EcbDecrypt(k, respBody.getData());
+		log.info("【证联获取用户信息】返回业务报文:" + backData);
+		JSONObject jsonObject = JSON.parseObject(backData);
+		String sysRtnCode = jsonObject.getString("sysRtnCode");
+		if(!"000000".equals(sysRtnCode)){
+			log.error("【证联获取用户信息】查询用户信息失败!{}", jsonObject.getString("sysRtnMsg"));
+			throw new Exception(jsonObject.getString("sysRtnMsg"));
+		}
+		JSONObject bizData = jsonObject.getJSONObject("bizData");
+		String resCode = bizData.getString("resCode");
+		if("F010900".equals(resCode)){
+			return null;
+		}
+		if(!"S010000".equals(resCode)){
+			log.error("【证联获取用户信息】查询用户信息失败!{}", bizData.getString("resMsg"));
+			throw new Exception(jsonObject.getString("resMsg"));
+		}
+		JSONObject resData = bizData.getJSONObject("resData");
+		ZLUserInfo zlUserInfo = resData.toJavaObject(ZLUserInfo.class);
+		return zlUserInfo;
+	}
+	
+	
+	
+	
+	
+	
+	
+	/**
+	 * @Description: 从公钥证书获取公钥串
+	 * @return
+	 * @return String
+	 * @throws
+	 * @author: tsl
+	 * @date: 2019年4月19日 下午9:07:56
+	 */
+	public static String getPublicKey() {
+		String publicKey = "";
+		FileInputStream inputStream = null;
+		try {
+			inputStream = new FileInputStream(new File(zhengLianConfig.getCer()));
+			X509Certificate publicCert = SM2Cert.getPublicCert(inputStream);
+			publicKey = Base64.getEncoder().encodeToString(publicCert.getEncoded());
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (inputStream != null) {
+				try {
+					inputStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return publicKey;
+	}
+	
+	/**
+	 * @Description: 从私钥证书获取私钥传
+	 * @return
+	 * @return String
+	 * @throws
+	 * @author: tsl
+	 * @date: 2019年4月19日 下午9:08:00
+	 */
+	public static String getPrivateKey() {
+		String privateKey = "";
+		FileInputStream inputStream = null;
+		try {
+			inputStream = new FileInputStream(new File(zhengLianConfig.getSm2()));
+			byte[] priBytes = SM2Cert.getPrivateCert(inputStream);
+			privateKey = SM2Cert.getPrivateKey(zhengLianConfig.getPassword(), priBytes);
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (inputStream != null) {
+				try {
+					inputStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return privateKey;
+	}
+	/**
+	 * @Description: 生成对称加密秘钥
+	 * @return String
+	 * @throws
+	 * @author: syuf
+	 * @date: 2018年11月8日 下午5:50:05
+	 */
+	public static String generateKey(int length) {
+		return RandomStringUtils.randomAlphanumeric(length);
+	}
+	/**
+	 * @Description: 签名
+	 * @param data
+	 * @return String
+	 * @throws
+	 * @author: syuf
+	 * @date: 2018年11月15日 下午2:19:01
+	 */
+	public static String sign(String data) {
+		try {
+			// 获取私钥
+			String privateKey = getPrivateKey();
+			return com.zlpay.assist.sign.sm2.SM2Util.sign(privateKey, zhengLianConfig.getSignNo(), data);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return "";
+	}
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/MessageBody.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/MessageBody.java
new file mode 100644
index 0000000..fdbbc08
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/MessageBody.java
@@ -0,0 +1,23 @@
+package com.stylefeng.guns.modular.system.util.zhenglian.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/28 14:19
+ */
+@Data
+public class MessageBody {
+	/**
+	 * 业务数据
+	 */
+	private String data;
+	/**
+	 * 签名
+	 */
+	private String sign;
+	/**
+	 * 秘钥
+	 */
+	private String secret;
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/OpenAccountCallbackRequest.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/OpenAccountCallbackRequest.java
new file mode 100644
index 0000000..ec14f8a
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/OpenAccountCallbackRequest.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.util.zhenglian.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/28 14:18
+ */
+@Data
+public class OpenAccountCallbackRequest {
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/TokenRequest.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/TokenRequest.java
new file mode 100644
index 0000000..671ca17
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/TokenRequest.java
@@ -0,0 +1,46 @@
+package com.stylefeng.guns.modular.system.util.zhenglian.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 15:06
+ */
+@Data
+public class TokenRequest {
+	/**
+	 * 应用appid
+	 */
+	private String appId;
+	/**
+	 * APP 端用户唯一标识
+	 */
+	private String appUserId;
+	/**
+	 * 姓名
+	 */
+	private String userName;
+	/**
+	 * 证件号码
+	 */
+	private String certNo;
+	/**
+	 * 手机号码
+	 */
+	private String phone;
+	/**
+	 * 访问类型
+	 * 01 证联收银台支付
+	 * 04 HOME 页
+	 * 06 申请免密签约
+	 * 07 商户收银台支付
+	 * 08 开户(绑卡)
+	 * 09 开通支付账户
+	 * 10 打开付款码
+	 */
+	private String type;
+	/**
+	 * 终端信息域
+	 */
+	private TradeTerminalInfo tradeTerminalInfo;
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/TradeTerminalInfo.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/TradeTerminalInfo.java
new file mode 100644
index 0000000..6403ebe
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/TradeTerminalInfo.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.zhenglian.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 15:10
+ */
+@Data
+public class TradeTerminalInfo {
+	/**
+	 * 用于标识交易设 备 公 网 IP地 址
+	 */
+	private String ip;
+	/**
+	 * 终端类型:
+	 * 0:web
+	 * 1:ANDROID
+	 * 2:IOS
+	 * 3:其它
+	 */
+	private String terminal;
+	/**
+	 * 用于标识交易设备 MAC 地址
+	 */
+	private String mac;
+}
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/ZLUserInfo.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/ZLUserInfo.java
new file mode 100644
index 0000000..b17f4a4
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/ZLUserInfo.java
@@ -0,0 +1,37 @@
+package com.stylefeng.guns.modular.system.util.zhenglian.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/8/5 10:10
+ */
+@Data
+public class ZLUserInfo {
+	/**
+	 * appid
+	 */
+	private String appId;
+	/**
+	 * APP端用户唯一标识
+	 */
+	private String appUserId;
+	/**
+	 * 姓名
+	 */
+	private String userName;
+	/**
+	 * 证件号码
+	 */
+	private String certNo;
+	/**
+	 * 证联客户号
+	 */
+	private String custId;
+	/**
+	 * 是否已开通支付账户
+	 * 1:是
+	 * 0:否
+	 */
+	private Integer accOpenFlag;
+}
diff --git a/UserQYTTravel/guns-admin/src/main/resources/application-dev.yml b/UserQYTTravel/guns-admin/src/main/resources/application-dev.yml
index 153c6de..5cab2a2 100644
--- a/UserQYTTravel/guns-admin/src/main/resources/application-dev.yml
+++ b/UserQYTTravel/guns-admin/src/main/resources/application-dev.yml
@@ -29,7 +29,7 @@
       max-request-size: 100MB
       max-file-size: 100MB
   redis:
-    host: 192.168.110.80
+    host: 127.0.0.1
     port: 6379
     password: 123456
     database: 0
@@ -44,7 +44,7 @@
 eureka:
   client:
     service-url: #注册中心地址
-      defaultZone: http://sinata:sinata@192.168.110.15:8000/eureka #启用身份验证的方式连接
+      defaultZone: http://sinata:sinata@127.0.0.1:8000/eureka #启用身份验证的方式连接
     register-with-eureka: true #在注册中心进行注册
     fetch-registry: true #从Eureka中获取注册信息。
 
@@ -57,27 +57,18 @@
 
 spring:
   datasource:
-    url: jdbc:mysql://192.168.110.80:3306/qyttravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://127.0.0.1:3306/qyttravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
     password: 123456
     db-name: qyttravel #用来搜集数据库的所有表
     filters: wall,mergeStat
 
 
-  #spring:
-  #  datasource:
-  #    url: jdbc:mysql://172.21.35.140:8066/traffic_scdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
-  #    username: traffic_scusr
-  #    password: QYT_sc@20#25
-  #    db-name: traffic_scdb #用来搜集数据库的所有表
-  #    filters: wall,mergeStat
-
-
 ---
 spring:
   data:
     mongodb:
-      uri: mongodb://192.168.110.80:27017/traveling_track
+      uri: mongodb://127.0.0.1:27017/traveling_track
 
 
 ---
@@ -107,7 +98,7 @@
   appKey: 111 #
 
 qyt:
-  socket_uri: http://192.168.110.111:6000
+  socket_uri: http://127.0.0.1:6000
 
 ---
 
diff --git a/UserQYTTravel/guns-admin/src/main/resources/application-prod.yml b/UserQYTTravel/guns-admin/src/main/resources/application-prod.yml
index 68b5a93..895ad1e 100644
--- a/UserQYTTravel/guns-admin/src/main/resources/application-prod.yml
+++ b/UserQYTTravel/guns-admin/src/main/resources/application-prod.yml
@@ -1,5 +1,7 @@
 server:
   port: 8006
+  tomcat:
+    basedir: /etraffic/server/chuxing/tomcat
 
 guns:
   swagger-open: false              #是否开启swagger (true/false)
diff --git a/UserQYTTravel/guns-admin/src/main/resources/application-test.yml b/UserQYTTravel/guns-admin/src/main/resources/application-test.yml
index 2f7eb7f..fbb65e3 100644
--- a/UserQYTTravel/guns-admin/src/main/resources/application-test.yml
+++ b/UserQYTTravel/guns-admin/src/main/resources/application-test.yml
@@ -1,5 +1,7 @@
 server:
   port: 8006
+  tomcat:
+    basedir: /etraffic/server/chuxing/tomcat
 
 guns:
   swagger-open: false              #是否开启swagger (true/false)
diff --git a/UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java b/UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
index 1978e22..aefda84 100644
--- a/UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
+++ b/UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
@@ -21,6 +21,7 @@
 //import com.stylefeng.guns.modular.system.service.IUserInfoService;
 //import com.stylefeng.guns.modular.system.util.EmailUtil;
 //import com.stylefeng.guns.modular.system.util.ResultUtil;
+//import com.stylefeng.guns.modular.system.util.qianyuntong.AESUtils;
 //import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
 //import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil;
 //import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
@@ -85,54 +86,14 @@
 //
 //	@Test
 //	public void test(){
-//        Integer orderId = 163;
-//        Integer score = 5;
-//        Integer userId = 17;
-//        String content = "";
-//        Integer driverId = 37;
-//        try {
-//            Evaluate evaluate=new Evaluate();
-//            evaluate.setAddTime(new Date());
-//            evaluate.setType(8);
-//            evaluate.setOrderId(orderId);
-//            evaluate.setScore(score);
-//            evaluate.setUserId(userId);
-//            if(ToolUtil.isNotEmpty(content)){
-//                /*判断评价内容是否包含敏感词*/
-//                List<SensitiveWords> list = sensitiveWordsMapper.selectList(null);
-//                Set<String> sensitiveWordSet = new HashSet<>();
-//                for(SensitiveWords gs:list){
-//                    sensitiveWordSet.add(gs.getContent());
-//                }
-//                SensitiveWordUtil.init(sensitiveWordSet);
-//                boolean result = SensitiveWordUtil.contains(content);
-//
-//            }
-//            evaluate.setContent(content);
-//            evaluate.setDriverId(driverId);
-//            /*查询用户手机号*/
-//            UserInfo userInfo=userInfoService.selectById(userId);
-//            if(userInfo!=null){
-//                evaluate.setUserPhone(userInfo.getPhone());
-//            }
-//            /*查询司机电话*/
-//            DriverRide driverRide=driverRideService.selectById(driverId);
-//            if(driverRide!=null){
-//                /*计算司机的评分*/
-//                driverRide.setEvaluateNum((null != driverRide.getEvaluateNum() ? driverRide.getEvaluateNum() : 0 )+1);
-//                driverRide.setEvaluateScore((null == driverRide.getEvaluateScore() ? 0 : driverRide.getEvaluateScore())+score);
-//                driverRideService.updateById(driverRide);
-//            }
-//            /*标记订单已评价*/
-//            OrderRide orderTaxi=new OrderRide();
-//            orderTaxi.setId(orderId);
-//            orderTaxi.setIsEvaluate(2);
-//            orderTaxi.setEvaluateScoreUser(score);
-//            orderTaxi.setContent(content);
-//            orderRideService.updateById(orderTaxi);
-//            evaluateService.insert(evaluate);
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
+//        RegisterViaMobileRequest request = new RegisterViaMobileRequest();
+//        request.setMobile("15828353222");
+//        request.setEncryptType("aesbase64");
+//        request.setPassword(AESUtils.encryptBase64("123456"));
+//        request.setNickname("测试");
+////        request.setVerify_code(code);
+////        request.setVerify_code_type("0");
+//        RegisterViaMobile register = UserUtil.registerViaMobile(request);
+//        System.err.println(register);
 //    }
 //}
diff --git a/ZuulQYTTravel/src/main/resources/application-dev.yml b/ZuulQYTTravel/src/main/resources/application-dev.yml
index fc31276..aeb0906 100644
--- a/ZuulQYTTravel/src/main/resources/application-dev.yml
+++ b/ZuulQYTTravel/src/main/resources/application-dev.yml
@@ -10,7 +10,7 @@
 eureka:
   client:
     service-url: #注册中心地址
-      defaultZone: http://sinata:sinata@192.168.110.106:8000/eureka #启用身份验证的方式连接
+      defaultZone: http://sinata:sinata@127.0.0.1:8000/eureka #启用身份验证的方式连接
     register-with-eureka: true #在注册中心进行注册
     fetch-registry: true #从Eureka中获取注册信息。
 
@@ -20,15 +20,15 @@
   routes:
     user-server: #接口调用路由服务,名字任意取。(用户端服务)
       path: /user/** #配置请求URL的请求规则
-      url: http://192.168.110.80:7006 #真正的微服务地址,path匹配的请求都转发到这里
+      url: http://127.0.0.1:8006 #真正的微服务地址,path匹配的请求都转发到这里
       serviceid: user-server #指定Eureka注册中心的服务id
     driver-server: #路由司机相关请求
       path: /driver/** #配置请求URL的请求规则
-      url: http://192.168.110.80:7007 #真正的微服务地址,path匹配的请求都转发到这里
+      url: http://127.0.0.1:8007 #真正的微服务地址,path匹配的请求都转发到这里
       serviceid: driver-server #指定Eureka注册中心的服务id
     dispatch-server: #路由调度相关请求
       path: /dispatch/** #配置请求URL的请求规则
-      url: http://192.168.110.80:7008 #真正的微服务地址,path匹配的请求都转发到这里
+      url: http://127.0.0.1:8008 #真正的微服务地址,path匹配的请求都转发到这里
       serviceid: dispatch-server #指定Eureka注册中心的服务id
   #  配置zuul超时时间
   host:
diff --git a/ZuulQYTTravel/src/main/resources/application-prod.yml b/ZuulQYTTravel/src/main/resources/application-prod.yml
index 47c9c85..3a83ead 100644
--- a/ZuulQYTTravel/src/main/resources/application-prod.yml
+++ b/ZuulQYTTravel/src/main/resources/application-prod.yml
@@ -1,5 +1,7 @@
 server:
   port: 5000
+  tomcat:
+    basedir: /etraffic/server/chuxing/tomcat
 
 spring:
   profiles:
diff --git a/ZuulQYTTravel/src/main/resources/application-test.yml b/ZuulQYTTravel/src/main/resources/application-test.yml
index 3567b9e..2313edf 100644
--- a/ZuulQYTTravel/src/main/resources/application-test.yml
+++ b/ZuulQYTTravel/src/main/resources/application-test.yml
@@ -1,5 +1,7 @@
 server:
   port: 5000
+  tomcat:
+    basedir: /etraffic/server/chuxing/tomcat
 
 spring:
   profiles:

--
Gitblit v1.7.1