From 55132b44cd49f2a312a8fb2523ffda35a7485fd7 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 09 十月 2025 16:07:08 +0800
Subject: [PATCH] 提交代码

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java                 |  185 +++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java                    |   16 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyFundFlowServiceImpl.java            |    4 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/GetPaymentInfo.java         |    8 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityServiceImpl.java               |   12 
 management/guns-admin/src/main/java/com/stylefeng/guns/core/aop/LogAop.java                                                   |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/StaffNodeInfo.java               |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TUser.java                                        |   14 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java               |  143 ++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java                  |    6 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GoodsInfoRequest.java           |    4 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/QianYunTongConfig.java            |  110 -
 management/guns-admin/src/main/java/com/stylefeng/guns/core/aop/GlobalExceptionHandler.java                                   |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/BlackboardController.java             |   10 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderPayment.java                              |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java              |  203 +++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java                     |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBillServiceImpl.java                      |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java     |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRechargeRecordServiceImpl.java            |    8 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/SMSUtil.java                      |   11 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAdvertisementController.java        |    6 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java                     |  267 +++-
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/DriverController.java                          |   66 +
 management/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java                                            |  416 +++---
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCheckCarActivityServiceImpl.java          |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TEvaluateServiceImpl.java                  |    4 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/AppUser.java                                     |    5 
 driver/guns-admin/pom.xml                                                                                                     |    8 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeOrderCreateData.java       |   12 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/UserUtil.java                         |   52 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentOrderRequest.java        |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRevenueServiceImpl.java                   |    4 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/OrderUtil.java                        |  202 +++
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/AppUser.java                                 |    5 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TComplaintServiceImpl.java                 |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/check/PermissionCheckFactory.java                           |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCancelOrderServiceImpl.java               |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/config/web/WebConfig.java                                              |   97 +
 management/guns-admin/src/main/java/com/stylefeng/guns/core/beetl/BeetlConfiguration.java                                     |    3 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBranchOfficeController.java         |    2 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/PaymentOrderRequest.java    |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java                |  121 +
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/UserActivityController.java          |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysRedPacketRecordController.java    |    8 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java        |    4 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java                |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TSysSensitiveWordsController.java    |    2 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/EmployeeUtil.java                     |    5 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TCompany.java                                     |   24 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCheckCarExplainServiceImpl.java           |    2 
 management/guns-admin/pom.xml                                                                                                 |   35 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java               |    2 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java                                   |    5 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java                                         |   52 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java              |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java                     |    4 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java                 |    2 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java |    4 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/AppUserUtil.java                                  |    3 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java                                  |   25 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Driver.java                                      |   15 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EmployeeUtil.java                 |   72 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EnterpriseUtil.java               |  117 -
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/OrderUtil.java                    |  183 ++
 management/guns-admin/src/main/resources/application-dev.yml                                                                  |    7 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java                   |   51 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverBackController.java           |   18 
 management/guns-admin/src/main/java/com/stylefeng/guns/config/SpringSessionConfig.java                                        |    3 
 management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/ShiroKit.java                                               |    2 
 /dev/null                                                                                                                     |  243 ----
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderCheckServiceImpl.java                |   12 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTUserInfo.java                 |   37 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TravelItinerary.java            |    2 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/UserUtil.java                     |  122 +-
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java                                      |   35 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java                                       |   10 
 management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/ShiroUser.java                                              |   19 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java                  |   73 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverActivityServiceImpl.java             |   12 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java                                      |   77 +
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysCouponActivityController.java     |   10 
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java                                    |   37 
 83 files changed, 2,303 insertions(+), 1,089 deletions(-)

diff --git a/driver/guns-admin/pom.xml b/driver/guns-admin/pom.xml
index 6e392f6..398e4a8 100644
--- a/driver/guns-admin/pom.xml
+++ b/driver/guns-admin/pom.xml
@@ -243,6 +243,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>
     </dependencies>
 
 
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/DriverController.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/DriverController.java
index 72ee246..6c0994e 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/DriverController.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/DriverController.java
@@ -9,6 +9,7 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.supersavedriving.driver.modular.system.dao.MonthOrderMapper;
+import com.supersavedriving.driver.modular.system.dao.TCompanyMapper;
 import com.supersavedriving.driver.modular.system.model.*;
 import com.supersavedriving.driver.modular.system.service.*;
 import com.supersavedriving.driver.modular.system.util.ALiSendSms;
@@ -16,9 +17,14 @@
 import com.supersavedriving.driver.modular.system.util.MiniPay.MiniAppPay;
 import com.supersavedriving.driver.modular.system.util.juhe.OCRUtil;
 import com.supersavedriving.driver.modular.system.util.qianyuntong.SMSUtil;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.UserUtil;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.model.QYTUserInfo;
 import com.supersavedriving.driver.modular.system.util.qianyuntong.model.SendSmsRequest;
 import com.supersavedriving.driver.modular.system.util.separateAccounts.StrUtil;
 import com.supersavedriving.driver.modular.system.util.separateAccounts.TransferUtil;
+import com.supersavedriving.driver.modular.system.util.zhenglian.TokenUtil;
+import com.supersavedriving.driver.modular.system.util.zhenglian.model.TokenRequest;
+import com.supersavedriving.driver.modular.system.util.zhenglian.model.TradeTerminalInfo;
 import com.supersavedriving.driver.modular.system.warpper.*;
 import com.supersavedriving.driver.core.util.ToolUtil;
 import com.supersavedriving.driver.modular.system.util.RedisUtil;
@@ -105,6 +111,9 @@
 
     @Value("${qyt.admin_url}")
     private String adminUrl;
+
+    @Autowired
+    private TCompanyMapper companyMapper;
 
 
 
@@ -1076,6 +1085,13 @@
             if(null == uid){
                 return ResponseWarpper.tokenErr();
             }
+            Driver driver1 = driverService.selectById(uid);
+            TCompany company = companyMapper.selectById(driver1.getBranchOfficeId());
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(driver1.getPhone(), company.getEnterCode());
+            if (null == userInfoByPhone || userInfoByPhone.size() == 0) {
+                return new ResponseWarpper(500, "账号未注册");
+            }
+
             ResultUtil resultUtil = driverService.updatePassword(uid, oldPass, newPass);
             return ResponseWarpper.success(resultUtil);
         }catch (Exception e){
@@ -1101,6 +1117,12 @@
             Integer uid = driverService.getUserByRequest();
             if(null == uid){
                 return ResponseWarpper.tokenErr();
+            }
+            Driver driver1 = driverService.selectById(uid);
+            TCompany company = companyMapper.selectById(driver1.getBranchOfficeId());
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(driver1.getPhone(), company.getEnterCode());
+            if (null == userInfoByPhone || userInfoByPhone.size() == 0) {
+                return new ResponseWarpper(500, "账号未注册");
             }
             ResultUtil resultUtil = driverService.recoverPassword(uid, password);
             return ResponseWarpper.success(resultUtil);
@@ -1398,4 +1420,48 @@
             e.printStackTrace();
         }
     }
+
+
+
+
+    @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 ResponseWarpper<String> getZLToken(String ip, String mac, String type, HttpServletRequest request){
+        try {
+            Integer uid = driverService.getUserByRequest();
+            if(null == uid){
+                return ResponseWarpper.tokenErr();
+            }
+            Driver driver = driverService.selectById(uid);
+            TokenRequest tokenRequest = new TokenRequest();
+            tokenRequest.setAppUserId(driver.getEmpId().toString());
+            tokenRequest.setUserName(driver.getName());
+            tokenRequest.setCertNo(driver.getIdcard());
+            tokenRequest.setPhone(driver.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 ResponseWarpper.success(token);
+        }catch (Exception e){
+            e.printStackTrace();
+            return new ResponseWarpper(500, e.getMessage());
+        }
+    }
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/AppUser.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/AppUser.java
index 2481af8..a156b7f 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/AppUser.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/AppUser.java
@@ -112,5 +112,10 @@
      */
     @TableField("havDiscount")
     private Integer havDiscount;
+    /**
+     * 中台用户ID
+     */
+    @TableField("onconUUID")
+    private String onconUUID;
 
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
index eaff684..bdfa7c7 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
 import com.baomidou.mybatisplus.enums.IdType;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigInteger;
@@ -290,4 +291,28 @@
     @TableField("checkServer")
     // 是否有车检服务 1有 2没有
     private Integer checkServer;
+    /**
+     * 中台员工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;
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java
index f4ed03a..332c1ad 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java
@@ -313,4 +313,9 @@
      */
     @TableField("endTime")
     private Date endTime;
+    /**
+     * 中台订单id
+     */
+    @TableField("travelId")
+    private String travelId;
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
index 0f8679a..631f067 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.supersavedriving.driver.modular.system.dao.OrderMapper;
+import com.supersavedriving.driver.modular.system.dao.TCompanyMapper;
 import com.supersavedriving.driver.modular.system.model.*;
 import com.supersavedriving.driver.modular.system.service.*;
 import com.supersavedriving.driver.modular.system.util.*;
@@ -13,6 +14,14 @@
 import com.supersavedriving.driver.modular.system.util.MallBook.model.*;
 import com.supersavedriving.driver.modular.system.util.MallBook.util.TrhRequest;
 import com.supersavedriving.driver.modular.system.util.mongodb.model.Location;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.EmployeeUtil;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.OrderUtil;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.model.AddAccountInfoRequest;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.model.CreateTravelItineraryRequest;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.model.ModifyTravelItineraryRequest;
+import com.supersavedriving.driver.modular.system.util.zhenglian.ZhengLianUtil;
+import com.supersavedriving.driver.modular.system.util.zhenglian.model.TradeTerminalInfo;
+import com.supersavedriving.driver.modular.system.util.zhenglian.model.ZLUserInfo;
 import com.supersavedriving.driver.modular.system.warpper.*;
 import com.supersavedriving.driver.core.util.ToolUtil;
 import com.supersavedriving.driver.modular.system.util.GaoDe.model.District;
@@ -37,6 +46,8 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -129,6 +140,9 @@
 
     @Value("${callbackPath}")
     private String callbackPath;//支付回调网关地址
+
+    @Autowired
+    private TCompanyMapper companyMapper;
 
 
 
@@ -246,9 +260,23 @@
             order.setState(null == order.getDriverId() ? 101 : 102);
         }
         order.setStatus(1);
-
         this.insert(order);
         driverService.updateById(driver);
+        if(null != appUser && null != order.getDriverId()){
+            TCompany company = companyMapper.selectById(driver.getBranchOfficeId());
+            //调三方订单中心创建行程单
+            CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
+            request.setOrderNo("DJ" + order.getId());
+            request.setCustomerId(appUser.getOnconUUID());
+            request.setDriverId(driver.getEmpId().toString());
+            request.setSupplierShopId(company.getEnterCode());
+            request.setServiceType(5);
+            String travelItinerary = OrderUtil.createTravelItinerary(request);
+            order.setTravelId(travelItinerary);
+            this.updateById(order);
+        }
+
+
         //推送状态
         if(null != order.getDriverId()){
             //推动订单数据
@@ -751,6 +779,43 @@
      */
     @Override
     public List<HallOrderList> queryOrderHall(Integer uid, Integer pageNum, Integer pageSize) throws Exception {
+        Driver driver = driverService.selectById(uid);
+        //获取证联数据
+        if(null == driver.getCustId() || 0 == driver.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 userInfo = ZhengLianUtil.getUserInfo(driver.getEmpId().toString(), tradeTerminalInfo);
+            if(null != userInfo){
+                driver.setCustId(userInfo.getCustId());
+                driver.setAccOpenFlag(userInfo.getAccOpenFlag());
+                driverService.updateById(driver);
+            }
+        }
+        //同步到中台
+        if(null != driver.getAccOpenFlag() && 1 == driver.getAccOpenFlag() && 0 == driver.getIsSynchronous()){
+            AddAccountInfoRequest request = new AddAccountInfoRequest();
+            request.setCustId(driver.getCustId());
+            request.setAccountNo(driver.getEmpId().toString());
+            request.setAccountName(driver.getName());
+            request.setMobile(driver.getPhone());
+            Integer status = EmployeeUtil.addAccountInfo(request);
+            if(0 == status){
+                driver.setIsSynchronous(1);
+                driverService.updateById(driver);
+            }
+        }
+
         pageNum = (pageNum - 1) * pageSize;
         String value = redisUtil.getValue("daijia:DRIVER" + uid);
         List<HallOrderList> hallOrderLists = this.baseMapper.queryOrderHall(pageNum, pageSize);
@@ -894,6 +959,7 @@
             order.setState(102);
             order.setOrderTakingTime(new Date());
             this.updateById(order);
+
             redisUtil.unlock(orderId.toString());
 
             if(null != order.getUserId()){
@@ -901,6 +967,29 @@
                 appUser.setCancelCount(0);
                 appUser.setIsException(1);
                 appUserService.updateById(appUser);
+
+                if(null == order.getTravelId()){
+                    TCompany company = companyMapper.selectById(driver.getBranchOfficeId());
+                    //调三方订单中心创建行程单
+                    CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
+                    request.setOrderNo("DJ" + order.getId());
+                    request.setCustomerId(appUser.getOnconUUID());
+                    request.setDriverId(driver.getEmpId().toString());
+                    request.setSupplierShopId(company.getEnterCode());
+                    request.setServiceType(5);
+                    String travelItinerary = OrderUtil.createTravelItinerary(request);
+                    order.setTravelId(travelItinerary);
+                    this.updateById(order);
+                }else{
+                    //中台修改订单状态
+                    ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+                    request.setOrderId(order.getTravelId());
+                    request.setStatus(getState(order.getState()));
+                    TCompany company = companyMapper.selectById(driver.getBranchOfficeId());
+                    request.setDriverId(driver.getEmpId().toString());
+                    request.setSupplierShopId(company.getEnterCode());
+                    OrderUtil.modifyTravelItinerary(request);
+                }
             }
 
             driver.setServerStatus(2);
@@ -1133,6 +1222,18 @@
         }
         this.updateAllColumnById(order);
 
+        if(null != order.getTravelId()){
+            Driver driver = driverService.selectById(order.getDriverId());
+            //中台修改订单状态
+            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+            request.setOrderId(order.getTravelId());
+            request.setStatus(getState(order.getState()));
+            TCompany company = companyMapper.selectById(driver.getBranchOfficeId());
+            request.setDriverId(driver.getEmpId().toString());
+            request.setSupplierShopId(company.getEnterCode());
+            OrderUtil.modifyTravelItinerary(request);
+        }
+
         //推送订单状态
         pushUtil.pushOrderStatus(order.getDriverId(), 2, order.getId(), order.getState());
         if(null != order.getUserId()){
@@ -1335,6 +1436,17 @@
         }
         this.updateById(order);
 
+        if(null != order.getTravelId()){
+            //中台修改订单状态
+            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+            request.setOrderId(order.getTravelId());
+            request.setStatus(getState(order.getState()));
+            TCompany company = companyMapper.selectById(driver.getBranchOfficeId());
+            request.setDriverId(driver.getEmpId().toString());
+            request.setSupplierShopId(company.getEnterCode());
+            OrderUtil.modifyTravelItinerary(request);
+        }
+
 
         orderTransfer.setOrderId(orderId);
         orderTransfer.setOldDriverId(order.getDriverId());
@@ -1361,6 +1473,35 @@
         }
 
         return ResultUtil.success();
+    }
+
+
+    private Integer getState(Integer state){
+        switch (state){
+            case 101://待接单
+                return 1;
+            case 102://已接单
+                return 2;
+            case 103://前往预约点
+                return 3;
+            case 104://到达预约点
+                return 4;
+            case 105://开始服务
+                return 5;
+            case 106://到达目的地
+                return 6;
+            case 107://待支付
+                return 7;
+            case 108://待评价
+                return 8;
+            case 109://已完成
+                return 9;
+            case 201://转单中
+                return 11;
+            case 301://已取消
+                return 10;
+        }
+        return null;
     }
 
 
@@ -1431,6 +1572,18 @@
         order.setState(order.getOldState());
         order.setOldState(null);
         this.updateAllColumnById(order);
+        Driver driver = driverService.selectById(order.getDriverId());
+
+        if(null != order.getTravelId()){
+            //中台修改订单状态
+            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+            request.setOrderId(order.getTravelId());
+            request.setStatus(getState(order.getState()));
+            TCompany company = companyMapper.selectById(driver.getBranchOfficeId());
+            request.setDriverId(driver.getEmpId().toString());
+            request.setSupplierShopId(company.getEnterCode());
+            OrderUtil.modifyTravelItinerary(request);
+        }
 
         OrderTransfer orderTransfer = orderTransferService.selectOne(new EntityWrapper<OrderTransfer>().eq("orderId", orderId)
                 .eq("status", 1).isNull("successTime").orderBy("createTime desc limit 0, 1"));
@@ -1465,6 +1618,20 @@
 
         order.setState(301);
         this.updateById(order);
+
+        Driver driver = driverService.selectById(order.getDriverId());
+        if(null != order.getTravelId()){
+            //中台修改订单状态
+            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+            request.setOrderId(order.getTravelId());
+            request.setStatus(getState(order.getState()));
+            TCompany company = companyMapper.selectById(driver.getBranchOfficeId());
+            request.setDriverId(driver.getEmpId().toString());
+            request.setSupplierShopId(company.getEnterCode());
+            OrderUtil.modifyTravelItinerary(request);
+        }
+
+
         redisUtil.delSetValue("orderService", orderId.toString());
 
         CancelOrder cancelOrder = new CancelOrder();
@@ -1475,7 +1642,6 @@
         cancelOrder.setStatus(1);
         cancelOrder.setCreateTime(new Date());
         cancelOrderService.insert(cancelOrder);
-        Driver driver = driverService.selectById(order.getDriverId());
         if(null != driver){
             driver.setServerStatus(1);
             driverService.updateById(driver);
@@ -1583,13 +1749,14 @@
                 order.setPayType(3);
             }
 
+            Driver driver = driverService.selectById(order.getDriverId());
             if(payType == 2 && state == 108){
                 order.setPayTime(new Date());
                 if(null != order.getCouponId()){
                     UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId());
                     Coupon coupon = couponService.selectById(userToCoupon.getCouponId());
 
-                    Driver driver = driverService.selectById(order.getDriverId());
+
                     AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                     accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
                     accountChangeDetail.setUserType(2);
@@ -1647,9 +1814,19 @@
             }
             this.updateById(order);
 
+            if(null != order.getTravelId()){
+                //中台修改订单状态
+                ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+                request.setOrderId(order.getTravelId());
+                request.setStatus(getState(order.getState()));
+                TCompany company = companyMapper.selectById(driver.getBranchOfficeId());
+                request.setDriverId(driver.getEmpId().toString());
+                request.setSupplierShopId(company.getEnterCode());
+                OrderUtil.modifyTravelItinerary(request);
+            }
+
             if((payType == 1 && state == 107) || (payType == 2 && state == 108)){
                 //修改司机状态和积分
-                Driver driver = driverService.selectById(order.getDriverId());
                 driver.setServerStatus(1);
                 driverService.updateById(driver);
             }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EmployeeUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EmployeeUtil.java
index 5c83c87..2d6bdce 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EmployeeUtil.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EmployeeUtil.java
@@ -18,7 +18,6 @@
 
 /**
  * 企业员工工具类
- *
  * @author zhibing.pu
  * @Date 2025/6/6 16:17
  */
@@ -27,32 +26,13 @@
 	
 	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
 	
-	public static void main(String[] args) {
-		SaveStaffNodeRequest request = new SaveStaffNodeRequest();
-		request.setMobile("15828353127");
-		request.setEntercode("981100006005951");
-		request.setEmpName("蒲");
-		request.setEmpNickname("蒲");
-		request.setLoginNo("15828353125");
-		request.setEmpSex("男");
-		request.setMphone("15828353125");
-		request.setEmail("15828353125@qyt.com");
-		request.setDeptId(0);
-		request.setPositionId(1);
-		request.setSuperLevel(0);
-		request.setHideMobile(0);
-		ResultUtil<SaveStaffNode> resultUtil = EmployeeUtil.saveStaffNode(request);
-		System.out.println(resultUtil.getData());
-	}
-	
 	
 	/**
 	 * 企业增加员工
-	 *
 	 * @param request
 	 * @return
 	 */
-	public static ResultUtil<SaveStaffNode> saveStaffNode(SaveStaffNodeRequest request) {
+	public static ResultUtil<SaveStaffNode> saveStaffNode(SaveStaffNodeRequest request){
 		//请求路径
 		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/saveStaffNode";
 		//私钥文件
@@ -81,6 +61,11 @@
 		if (!"0".equals(retCode)) {
 			log.error("【企业增加员工】请求失败:" + result);
 			String retMsg = jsonObject.getString("retMsg");
+			if(retMsg.contains("员工昵称已存在")){
+				request.setEmpName(request.getEmpName() + Double.valueOf(Math.random() * 100).intValue());
+				request.setEmpNickname(request.getEmpName());
+				return saveStaffNode(request);
+			}
 			retMsg = retMsg.substring(retMsg.indexOf("{"));
 			jsonObject = JSON.parseObject(retMsg);
 			return ResultUtil.error("【企业增加员工】请求失败:" + jsonObject.getString("msg"));
@@ -231,4 +216,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/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EnterpriseUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EnterpriseUtil.java
index c9f79c1..8510099 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EnterpriseUtil.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/EnterpriseUtil.java
@@ -6,7 +6,9 @@
 import com.open.common.util.OpenApiClient;
 import com.open.common.util.SystemParameterNames;
 import com.supersavedriving.driver.modular.system.util.SpringContextsUtil;
-import com.supersavedriving.driver.modular.system.util.qianyuntong.model.*;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.model.CheckEnterExist;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.model.EnterpriseInfo;
+import com.supersavedriving.driver.modular.system.util.qianyuntong.model.ModifyEnterpriseInfoRequest;
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.SimpleDateFormat;
@@ -26,20 +28,6 @@
 	
 	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
 	
-	
-	public static void main(String[] args) {
-//		CheckEnterExist checkEnterNameExist = checkEnterNameExist("黔南云码通数字产业运营有限公司");
-//		System.err.println(checkEnterNameExist);
-		
-		CreateEnterpriseRequest request = new CreateEnterpriseRequest();
-		request.setName("成都喜望科技有限公司");
-		request.setNickName("成都喜望");
-		request.setIndustry_code("123456");
-		request.setMobile("15828353127");
-		CreateEnterprise enterprise = EnterpriseUtil.createEnterprise(request);
-		System.out.println(enterprise);
-		
-	}
 	
 	/**
 	 * 根据社会信用代码判断企业是否已存在
@@ -219,54 +207,6 @@
 		return true;
 	}
 	
-	
-	/**
-	 * 创建企业
-	 *
-	 * @param request
-	 * @return
-	 */
-	public static CreateEnterprise createEnterprise(CreateEnterpriseRequest request) {
-		//请求路径
-		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/createEnterprise";
-		//私钥文件
-		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
-		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
-		String appKey = qianYunTongConfig.getAppkey();//appkey
-		Map<String, String> headers = new HashMap<>();
-		headers.put("Content-Type", "application/json");
-		Map<String, Object> map = new HashMap<String, Object>();
-		Date nowdate = new Date();
-		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
-		
-		String timeStamp = date.format(nowdate);
-		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
-		map.put(SystemParameterNames.getAppKey(), appKey);
-		map.put(SystemParameterNames.getMessage_id(), messageId);
-		map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
-		map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
-		map.put("content", new Gson().toJson(request));
-		
-		log.info("【创建企业】请求地址:" + url);
-		log.info("【创建企业】请求参数:" + JSON.toJSONString(map));
-		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
-		log.info("【创建企业】请求结果:" + result);
-		JSONObject jsonObject = JSON.parseObject(result);
-		String retCode = jsonObject.getString("retCode");
-		if (!"0".equals(retCode)) {
-			log.error("【创建企业】请求失败:" + result);
-			throw new RuntimeException("【创建企业】请求失败:" + result);
-		}
-		JSONObject object = jsonObject.getJSONObject("object");
-		String status = object.getString("status");
-		if (!"0".equals(status)) {
-			log.error("【创建企业】请求失败:" + object.toJSONString());
-			throw new RuntimeException("【创建企业】请求失败:" + object.toJSONString());
-		}
-		return object.getObject("data", CreateEnterprise.class);
-	}
-	
-	
 	/**
 	 * 删除企业信息
 	 *
@@ -313,4 +253,55 @@
 		}
 		return true;
 	}
+	
+	public static void main(String[] args) {
+		CheckEnterExist checkEnterExist = EnterpriseUtil.checkEnterNameExist("成都喜望科技有限公司");
+		System.out.println(checkEnterExist);
+	}
+	
+	/**
+	 * 创建企业
+	 *
+	 * @param request
+	 * @return
+	 */
+	public static CreateEnterprise createEnterprise(CreateEnterpriseRequest request) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/createEnterprise";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> map = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		map.put(SystemParameterNames.getAppKey(), appKey);
+		map.put(SystemParameterNames.getMessage_id(), messageId);
+		map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		map.put("content", new Gson().toJson(request));
+		
+		log.info("【创建企业】请求地址:" + url);
+		log.info("【创建企业】请求参数:" + JSON.toJSONString(map));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+		log.info("【创建企业】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【创建企业】请求失败:" + result);
+			throw new RuntimeException("【创建企业】请求失败:" + result);
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		String status = object.getString("status");
+		if (!"0".equals(status)) {
+			log.error("【创建企业】请求失败:" + object.toJSONString());
+			throw new RuntimeException("【创建企业】请求失败:" + object.toJSONString());
+		}
+		return object.getObject("data", CreateEnterprise.class);
+	}
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/NCOSSUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/NCOSSUtil.java
deleted file mode 100644
index 9652a82..0000000
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/NCOSSUtil.java
+++ /dev/null
@@ -1,243 +0,0 @@
-//package com.supersavedriving.driver.modular.system.util.qianyuntong;
-//
-//import com.heredata.hos.HOS;
-//import com.heredata.hos.HOSClientBuilder;
-//import com.heredata.hos.model.CreateBucketRequest;
-//import com.heredata.hos.model.HOSObject;
-//import com.heredata.hos.model.PutObjectRequest;
-//import com.heredata.hos.model.PutObjectResult;
-//import com.heredata.hos.model.bucket.Bucket;
-//import com.heredata.model.VoidResult;
-//import com.supersavedriving.driver.modular.system.util.SpringContextsUtil;
-//import lombok.extern.slf4j.Slf4j;
-//
-//import java.io.InputStream;
-//
-///**
-// * OSS 工具类
-// * @author zhibing.pu
-// * @Date 2025/6/23 17:50
-// */
-//@Slf4j
-//public class NCOSSUtil {
-//
-//	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
-//
-//	/**
-//	 * 创建桶
-//	 * @param bucketName
-//	 * @return
-//	 */
-//	public static Boolean createBucket(String bucketName) {
-//		/**
-//		 * endPoint:HOS的基础路径(公共前缀)
-//		 * account:账户的ID
-//		 * accessKey:向UAAS服务请求到的access_key
-//		 * secretKey:向UAAS服务请求到的secret_key
-//		 */
-//		HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
-//		try {
-//			// 创建请求对象,并且设置创建桶名为"example"的桶
-//			CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
-//			VoidResult result = hos.createBucket(createBucketRequest);
-//			if (result.getResponse().isSuccessful()) {
-//				log.info("创建桶成功:" + bucketName);
-//				return true;
-//			}
-//		} catch (Exception e){
-//			log.info("创建桶失败:" + bucketName);
-//			e.printStackTrace();
-//		}
-//		return false;
-//	}
-//
-//
-//	/**
-//	 * 查询桶详情
-//	 * @param bucketName
-//	 * @return
-//	 */
-//	public static Bucket getBucketInfo(String bucketName) {
-//		/**
-//		 * endPoint:HOS的基础路径(公共前缀)
-//		 * account:账户的ID
-//		 * accessKey:向UAAS服务请求到的access_key
-//		 * secretKey:向UAAS服务请求到的secret_key
-//		 */
-//		HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
-//		try {
-//			// 查询桶名为"example"的详情
-//			Bucket bucket = hos.getBucketInfo(bucketName);
-//			return bucket;
-//		} catch (Exception e){
-//			e.printStackTrace();
-//		}
-//		return null;
-//	}
-//
-//
-//	/**
-//	 * 删除桶
-//	 * @param bucketName
-//	 * @return
-//	 */
-//	public static Boolean deleteBucket(String bucketName) {
-//		/**
-//		 * endPoint:HOS的基础路径(公共前缀)
-//		 * account:账户的ID
-//		 * accessKey:向UAAS服务请求到的access_key
-//		 * secretKey:向UAAS服务请求到的secret_key
-//		 */
-//		HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
-//		try {
-//			VoidResult result = hos.deleteBucket(bucketName);
-//			if (result.getResponse().isSuccessful()) {
-//				log.info("删除桶成功:" + bucketName);
-//				return true;
-//			}
-//		} catch (Exception e){
-//			log.info("删除桶成功:" + bucketName);
-//			e.printStackTrace();
-//		}
-//		return false;
-//	}
-//
-//
-//	/**
-//	 * 设置桶策略
-//	 * @param bucketName    桶名
-//	 * @param policyText    策略规则字符串
-//	 * {
-//	 *   // 策略配置的版本号,由用户定义
-//	 *   "Version": "2012-10-17",
-//	 *   //  策略规则配置,可指定多条策略规则
-//	 *   "Statement": [{
-//	 *     // 策略规则ID,可用户指定,如不指定则服务自动生成一条
-//	 *     "Sid": "sid",
-//	 *     // 策略规则指定的HOS API接口标识,可参照下表填写
-//	 *     "Action": [
-//	 *       "action"
-//	 *     ],
-//	 *     // 策略规则效果,具体表现为允许或拒绝,有效值为Allow(允许),Deny(拒绝);
-//	 *     "Effect": "Allow",
-//	 *     // 策略规则指定的资源参照下面resource配置
-//	 *     "Resource": "resource",
-//	 *     // 策略规则指定的授权人 参照下面Principal配置
-//	 *     "Principal": {
-//	 *       "HWS": [
-//	 *         "account_id:root"
-//	 *       ]
-//	 *     }
-//	 *   }
-//	 *   ]
-//	 * }
-//	 * @return
-//	 */
-//	public static Boolean setBucketPolicy(String bucketName, String policyText) {
-//		/**
-//		 * endPoint:HOS的基础路径(公共前缀)
-//		 * account:账户的ID
-//		 * accessKey:向UAAS服务请求到的access_key
-//		 * secretKey:向UAAS服务请求到的secret_key
-//		 */
-//		HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
-//		// 桶策略字符串
-//		try {
-//			VoidResult result = hos.setBucketPolicy(bucketName, policyText);
-//			if (result.getResponse().isSuccessful()) {
-//				log.info("设置桶策略成功:" + bucketName);
-//				return true;
-//			}
-//		} catch (Exception e) {
-//			log.info("设置桶策略失败:" + bucketName);
-//			e.printStackTrace();
-//		}
-//		return false;
-//	}
-//
-//
-//	/**
-//	 * 上传对象
-//	 * @param bucketName    桶名称
-//	 * @param key           存储文件名
-//	 * @param inputStream      上传文件流
-//	 * @return  对象唯一标识
-//	 */
-//	public static String putObject(String bucketName, String key, InputStream inputStream) {
-//		/**
-//		 * endPoint:HOS的基础路径(公共前缀)
-//		 * account:账户的ID
-//		 * accessKey:向UAAS服务请求到的access_key
-//		 * secretKey:向UAAS服务请求到的secret_key
-//		 */
-//		HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
-//		try {
-//			PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key , inputStream);
-//			PutObjectResult example = hos.putObject(putObjectRequest);
-//			if (example.getResponse().isSuccessful()) {
-//				log.info("上传对象成功:" + bucketName + "--->" + key);
-//				return example.getETag();
-//			}
-//		} catch (Exception e) {
-//			log.info("上传对象成功:" + bucketName);
-//			e.printStackTrace();
-//		}
-//		return null;
-//	}
-//
-//
-//	/**
-//	 * 查询对象
-//	 * @param bucketName    桶名称
-//	 * @param key           存储文件名
-//	 * @return
-//	 */
-//	public static HOSObject getObject(String bucketName, String key) {
-//		/**
-//		 * endPoint:HOS的基础路径(公共前缀)
-//		 * account:账户的ID
-//		 * accessKey:向UAAS服务请求到的access_key
-//		 * secretKey:向UAAS服务请求到的secret_key
-//		 */
-//		HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
-//		try {
-//			HOSObject example = hos.getObject(bucketName, key);
-//			if (example.getResponse().isSuccessful()) {
-//				log.info("查询对象成功:" + bucketName + "--->" + key);
-//				return example;
-//			}
-//		} catch (Exception e) {
-//			log.info("查询对象失败:" + bucketName);
-//			e.printStackTrace();
-//		}
-//		return null;
-//	}
-//
-//
-//	/**
-//	 * 删除对象
-//	 * @param bucketName     桶名称
-//	 * @param key          存储文件名
-//	 * @return
-//	 */
-//	public static Boolean deleteObject(String bucketName, String key) {
-//		/**
-//		 * endPoint:HOS的基础路径(公共前缀)
-//		 * account:账户的ID
-//		 * accessKey:向UAAS服务请求到的access_key
-//		 * secretKey:向UAAS服务请求到的secret_key
-//		 */
-//		HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
-//		try {
-//			VoidResult example = hos.deleteObject(bucketName, key);
-//			if (example.getResponse().isSuccessful()) {
-//				log.info("删除对象成功:" + bucketName + "--->" + key);
-//				return true;
-//			}
-//		} catch (Exception e) {
-//			log.info("删除对象失败:" + bucketName + "--->" + key);
-//			e.printStackTrace();
-//		}
-//		return false;
-//	}
-//}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/OrderUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/OrderUtil.java
index 0823304..4e81e09 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/OrderUtil.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/OrderUtil.java
@@ -183,14 +183,14 @@
 	 * @return
 	 */
 	public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data) {
-		tradePayOff1Data.setPartnerId("5400004");
+		tradePayOff1Data.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
 		tradePayOff1Data.setTimeout("72H");
 		tradePayOff1Data.setScene("TRAFFIC");
 		tradePayOff1Data.setCurrency("RMB");
 		tradePayOff1Data.setNeedLoginFlag("N");
 		tradePayOff1Data.setAccessMode("APP");
 		tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> {
-			goodsInfoRequest.setId("981100006005901");
+			goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
 			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
 			
 			goodsInfoRequest.setAreaInfo("520100");
@@ -200,7 +200,7 @@
 		
 		
 		TradeRequest request = new TradeRequest<TradePayOff1Data>();
-		request.setSceneId("1911676727023968256");
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954795404533583872" : "1911676727023968256");
 		request.setAppId(qianYunTongConfig.getAppkey());
 		request.setConfigVersion(1);
 		request.setRequestId(UUIDUtil.getRandomCode());
@@ -391,12 +391,12 @@
 		tradeOrderCreateData.setTimeout("72H");
 		tradeOrderCreateData.setOrderAppId("52270015");
 		tradeOrderCreateData.setChannelSource("GRJYCXWXXCX");
-		tradeOrderCreateData.setPayPartnerId("5400004");
+		tradeOrderCreateData.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
 		tradeOrderCreateData.setCurrency("RMB");
 		tradeOrderCreateData.setNeedLoginFlag("N");
 		tradeOrderCreateData.setAccessMode("APP");
 		tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> {
-			goodsInfoRequest.setId("981100006005901");
+			goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
 			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
 			goodsInfoRequest.setAreaInfo("520100");
 			goodsInfoRequest.setPayType("0");
@@ -405,7 +405,7 @@
 		
 		
 		TradeRequest request = new TradeRequest<TradeOrderCreateData>();
-		request.setSceneId("1945688132719169536");
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954793280550756352" : "1945688132719169536");
 		request.setAppId(qianYunTongConfig.getAppkey());
 		request.setConfigVersion(1);
 		request.setRequestId(UUIDUtil.getRandomCode());
@@ -457,7 +457,7 @@
 		createOrderRequest.setChannelSource("GRJYCXWXXCX");
 		
 		TradeRequest request = new TradeRequest<CreateOrderRequest>();
-		request.setSceneId("1948289607125864448");
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954792737421942784" : "1948289607125864448");
 		request.setAppId(qianYunTongConfig.getAppkey());
 		request.setConfigVersion(1);
 		request.setRequestId(UUIDUtil.getRandomCode());
@@ -503,7 +503,7 @@
 	 * @return
 	 */
 	public static PayInfo tradePayOff(TradePayOffData tradePayOffData) {
-		tradePayOffData.setPartnerId("5400005");
+		tradePayOffData.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401008" : "5400005");
 		tradePayOffData.setTimeout("72H");
 		tradePayOffData.setScene("TRAFFIC");
 		tradePayOffData.setCurrency("RMB");
@@ -528,20 +528,20 @@
 		tradePayOffData.setPaymentInfos(paymentInfoRequests);
 		List<GoodsInfo> goodsInfo = new ArrayList<>();
 		GoodsInfo goodsInfo1 = new GoodsInfo();
-		goodsInfo1.setMerchantCode("B00000905");
-		goodsInfo1.setCustId("CB0000004686");
-		goodsInfo1.setCustName("证联消费平台交易客户");
+		goodsInfo1.setMerchantCode("prod".equals(qianYunTongConfig.getActiveProfile()) ? "B00001404" : "B00000905");
+		goodsInfo1.setCustId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "CB0000004853" : "CB0000004686");
+		goodsInfo1.setCustName("prod".equals(qianYunTongConfig.getActiveProfile()) ? "黔南云码通数字产业运营有限公司" : "证联消费平台交易客户");
 		goodsInfo1.setBusinessType("10408");
-		goodsInfo1.setAgreementNo("00000000468618354161754464398681");
+		goodsInfo1.setAgreementNo("prod".equals(qianYunTongConfig.getActiveProfile()) ? "00000402485377063581755054680461" : "00000000468618354161754464398681");
 		goodsInfo1.setProfitSharing("1");
 		goodsInfo.add(goodsInfo1);
 		tradePayOffData.setGoodsInfo(goodsInfo);
 		
 		
 		TradeRequest request = new TradeRequest<TradePayOffData>();
-		request.setSceneId("1774717104844095488");
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954794605782913024" : "1774717104844095488");
 		request.setAppId(qianYunTongConfig.getAppkey());
-		request.setConfigVersion(2);
+		request.setConfigVersion("prod".equals(qianYunTongConfig.getActiveProfile()) ? 1 : 2);
 		request.setRequestId(UUIDUtil.getRandomCode());
 		request.setData(tradePayOffData);
 		//请求路径
@@ -586,7 +586,7 @@
 	 * @return
 	 */
 	public static GetPaymentInfo paymentInfo(GetPaymentInfoDataRequest getPaymentInfoDataRequest) {
-		getPaymentInfoDataRequest.setPartnerId("5400004");
+		getPaymentInfoDataRequest.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
 		
 		GetPaymentInfoRequest request = new GetPaymentInfoRequest();
 		request.setRequstType("POST");
@@ -644,7 +644,6 @@
 		request.setMhltiCenterAppId("52270015");
 		request.setPayType(4);
 		request.setPayChannel(6);
-		request.setIsCompensate(1);
 		//请求路径
 		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentOrder";
 		//私钥文件
@@ -677,6 +676,156 @@
 		OrderInfo orderInfo = jsonObject.getObject("busiResp", OrderInfo.class);
 		return orderInfo;
 	}
-	
+
+
+	/**
+	 * 订单退款
+	 * @param request1
+	 * @return
+	 */
+	public static TradeOrderRefund tradeOrderRefund(TradeOrderRefundRequest request1) {
+		request1.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderRefund";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+		TradeRequest request = new TradeRequest<TradeOrderRefundRequest>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1968487381046722560" : "1726529285264269312");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion("prod".equals(qianYunTongConfig.getActiveProfile()) ? 1 : 6);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(request1);
+
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单退款】请求地址:" + url);
+		log.info("【订单退款】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单退款】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单退款】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单退款】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject refundInfo = jsonObject.getJSONObject("busiResp").getJSONObject("refundInfo");
+		String retCode = refundInfo.getString("retCode");
+		if(!"0".equals(retCode)){
+			log.error("【订单退款】失败:" + refundInfo.getString("retMsg"));
+			throw new RuntimeException("【订单退款】失败:" + refundInfo.getString("retMsg"));
+		}
+		JSONObject object = refundInfo.getJSONObject("object");
+		String retCode1 = object.getString("retCode");
+		if(!"000000".equals(retCode1)){
+			log.error("【订单退款】失败:" + object.getString("retMsg"));
+			throw new RuntimeException("【订单退款】失败:" + object.getString("retMsg"));
+		}
+
+		TradeOrderRefund tradeOrderRefund = object.getObject("data", TradeOrderRefund.class);
+		return tradeOrderRefund;
+	}
+
+
+	/**
+	 * 订单退款通知
+	 * @param request
+	 */
+	public static void orderRefundNotice(OrderRefundNoticeRequest request) {
+		request.setScene("TRAFFIC");
+		request.setMhltiCenterAppId("52270015");
+
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/orderRefundNotice";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单退款通知】请求地址:" + url);
+		log.info("【订单退款通知】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单退款通知】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单退款通知】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单退款通知】失败:" + jsonObject.getString("resMsg"));
+		}
+	}
+
+
+
+	/**
+	 * 订单取消
+	 * @param orderId
+	 */
+	public static void tradeOrderCancel(String orderId) {
+		TradeOrderCancelRequest request1 = new TradeOrderCancelRequest();
+		request1.setScene("TRAFFIC");
+		request1.setMhltiCenterAppId("52270015");
+		request1.setOrderId(orderId);
+
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCancel";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+		TradeRequest request = new TradeRequest<TradeOrderRefundRequest>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1968487841979760640" : "1963507067318833152");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion(1);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(request1);
+
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单取消】请求地址:" + url);
+		log.info("【订单取消】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单取消】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单取消】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单取消】失败:" + jsonObject.getString("resMsg"));
+		}
+	}
 	
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/QianYunTongConfig.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/QianYunTongConfig.java
index 80ea075..2523950 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/QianYunTongConfig.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/QianYunTongConfig.java
@@ -1,5 +1,6 @@
 package com.supersavedriving.driver.modular.system.util.qianyuntong;
 
+import lombok.Data;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
@@ -7,6 +8,7 @@
  * @author zhibing.pu
  * @Date 2025/7/8 11:31
  */
+@Data
 @Component
 public class QianYunTongConfig {
 	
@@ -60,107 +62,16 @@
 	 * 向UAAS服务请求到的secret_key
 	 */
 	private String secretKey;
-
-	public String getActiveProfile() {
-		return activeProfile;
-	}
-
-	public void setActiveProfile(String activeProfile) {
-		this.activeProfile = activeProfile;
-	}
-
-	public String getAppkey() {
-		return appkey;
-	}
-
-	public void setAppkey(String appkey) {
-		this.appkey = appkey;
-	}
-
-	public String getPrivateKeyPath() {
-		return privateKeyPath;
-	}
-
-	public void setPrivateKeyPath(String privateKeyPath) {
-		this.privateKeyPath = privateKeyPath;
-	}
-
-	public String getUserName() {
-		return userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-	public String getStatus() {
-		return status;
-	}
-
-	public void setStatus(String status) {
-		this.status = status;
-	}
-
-	public String getApiUrl() {
-		return apiUrl;
-	}
-
-	public void setApiUrl(String apiUrl) {
-		this.apiUrl = apiUrl;
-	}
-
-	public String getBucketName() {
-		return bucketName;
-	}
-
-	public void setBucketName(String bucketName) {
-		this.bucketName = bucketName;
-	}
-
-	public String getAppId() {
-		return appId;
-	}
-
-	public void setAppId(String appId) {
-		this.appId = appId;
-	}
-
-	public String getEndPoint() {
-		return endPoint;
-	}
-
-	public void setEndPoint(String endPoint) {
-		this.endPoint = endPoint;
-	}
-
-	public String getAccount() {
-		return account;
-	}
-
-	public void setAccount(String account) {
-		this.account = account;
-	}
-
-	public String getAccessKey() {
-		return accessKey;
-	}
-
-	public void setAccessKey(String accessKey) {
-		this.accessKey = accessKey;
-	}
-
-	public String getSecretKey() {
-		return secretKey;
-	}
-
-	public void setSecretKey(String secretKey) {
-		this.secretKey = secretKey;
-	}
-
+	/**
+	 * 场景编号
+	 */
+	String sceneId;
+	
+	
 	public QianYunTongConfig getQianYunTongConfig() {
 		if("dev".equals(activeProfile)){
 			this.appkey = "10001104";
-			this.privateKeyPath = "C:\\Users\\Admin\\Desktop\\qyt\\private_key_test.pem";
+			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
 			this.userName = "xiaofei";
 			this.status = "1";
 			this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
@@ -170,6 +81,7 @@
 			this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
 			this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
 			this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
+			this.sceneId = "1948289607125864448";
 		}
 		if("test".equals(activeProfile)){
 			this.setAppkey("10001104");
@@ -183,6 +95,7 @@
 			this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
 			this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
 			this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
+			this.sceneId = "1948289607125864448";
 		}
 		if("prod".equals(activeProfile)){
 			this.setAppkey("10001104");
@@ -196,6 +109,7 @@
 			this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
 			this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
 			this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
+			this.sceneId = "";
 		}
 		return this;
 	}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/SMSUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/SMSUtil.java
index e884660..2e58f7f 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/SMSUtil.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/SMSUtil.java
@@ -70,17 +70,6 @@
 		return object.getString("code");
 	}
 	
-	public static void main(String[] args) {
-		SendSmsRequest request = new SendSmsRequest();
-		request.setDestAddress("15828353127");
-		request.setTemplateId("TPL202507300002");
-		Map<String, String> templateParams = new HashMap<>();
-//		templateParams.put("code", "1234");
-		request.setTemplateParams(templateParams);
-//		request.setCode("code");
-		request.setSpId("Y86asr7J");
-		SMSUtil.sendSms(request);
-	}
 	
 	/**
 	 * 根据模板发送短信
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/UserUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/UserUtil.java
index b1966c6..24c14aa 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/UserUtil.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/UserUtil.java
@@ -25,12 +25,6 @@
 	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
 	
 	
-	public static void main(String[] args) {
-//		List<QYTUserInfo> userInfoByPhone = getUserInfoByPhone("15828353127");
-//		System.out.println(userInfoByPhone);
-	}
-	
-	
 	/**
 	 * 根据手机号码获取人员信息
 	 *
@@ -75,63 +69,6 @@
 		JSONArray data = object.getJSONObject("data").getJSONArray("list");
 		List<QYTUserInfo> list = new ArrayList<>();
 		for (int i = 0; i < data.size(); i++) {
-			QYTUserInfo userInfo = data.getObject(i, QYTUserInfo.class);
-			list.add(userInfo);
-		}
-		return list;
-	}
-	
-	/**
-	 * 根据手机号码获取人员信息
-	 *
-	 * @param mobile   手机号码
-	 * @param enterNum 企业编号
-	 */
-	public static List<QYTUserInfo> getUserInfoByPhone(String mobile, String enterNum) {
-		//请求路径
-		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getUserInfoByPhone";
-		//私钥文件
-		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
-		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
-		String appKey = qianYunTongConfig.getAppkey();//appkey
-		Map<String, String> headers = new HashMap<>();
-		headers.put("Content-Type", "application/json");
-		Map<String, Object> contentMap = new HashMap<String, Object>();
-		Date nowdate = new Date();
-		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
-		
-		String timeStamp = date.format(nowdate);
-		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
-		contentMap.put(SystemParameterNames.getAppKey(), appKey);
-		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
-		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
-		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
-		Map<String, String> map = new HashMap<>();
-		map.put("mobile", mobile);
-		if (null != enterNum) {
-			map.put("enterNum", enterNum);
-		}
-		contentMap.put("content", JSON.toJSONString(map));
-		log.info("【根据手机号码获取人员信息】请求地址:" + url);
-		log.info("【根据手机号码获取人员信息】请求参数:" + JSON.toJSONString(contentMap));
-		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "GET", skprivateKeyFile, timeStamp, contentMap);
-		log.info("【根据手机号码获取人员信息】请求结果:" + result);
-		JSONObject jsonObject = JSON.parseObject(result);
-		String retCode = jsonObject.getString("retCode");
-		if (!"0".equals(retCode)) {
-			log.error("【根据手机号码获取人员信息】请求失败:" + result);
-			return null;
-		}
-		JSONObject object = jsonObject.getJSONObject("object");
-		String status = object.getString("status");
-		if (!"0".equals(status)) {
-			log.error("【根据手机号码获取人员信息】失败:" + object.toJSONString());
-			return null;
-		}
-		JSONArray data = object.getJSONArray("data");
-		List<QYTUserInfo> list = new ArrayList<>();
-		for (int i = 0; i < data.size(); i++) {
-			data.getJSONObject(i).getString("enter_code");
 			QYTUserInfo userInfo = data.getObject(i, QYTUserInfo.class);
 			list.add(userInfo);
 		}
@@ -279,6 +216,64 @@
 	
 	
 	/**
+	 * 根据手机号码获取人员信息
+	 *
+	 * @param mobile   手机号码
+	 * @param enterNum 企业编号
+	 */
+	public static List<QYTUserInfo> getUserInfoByPhone(String mobile, String enterNum) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getUserInfoByPhone";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		Map<String, String> map = new HashMap<>();
+		map.put("mobile", mobile);
+		if (null != enterNum) {
+			map.put("enterNum", enterNum);
+		}
+		contentMap.put("content", JSON.toJSONString(map));
+		log.info("【根据手机号码获取人员信息】请求地址:" + url);
+		log.info("【根据手机号码获取人员信息】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "GET", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【根据手机号码获取人员信息】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【根据手机号码获取人员信息】请求失败:" + result);
+			return null;
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		String status = object.getString("status");
+		if (!"0".equals(status)) {
+			log.error("【根据手机号码获取人员信息】失败:" + object.toJSONString());
+			return null;
+		}
+		JSONArray data = object.getJSONArray("data");
+		List<QYTUserInfo> list = new ArrayList<>();
+		for (int i = 0; i < data.size(); i++) {
+			data.getJSONObject(i).getString("enter_code");
+			QYTUserInfo userInfo = data.getObject(i, QYTUserInfo.class);
+			list.add(userInfo);
+		}
+		return list;
+	}
+	
+	
+	/**
 	 * 实名认证
 	 * @param realName
 	 * @param cardNo
@@ -320,5 +315,4 @@
 		JSONObject object = jsonObject.getJSONObject("object");
 		return object.getBoolean("isok");
 	}
-	
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/GetPaymentInfo.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/GetPaymentInfo.java
index 31f5225..d57ca56 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/GetPaymentInfo.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/GetPaymentInfo.java
@@ -39,14 +39,6 @@
 	 */
 	private String totalFee;
 	/**
-	 * 支付工单状态
-	 * 0	待支付
-	 * 1	部分支付成功
-	 * 2	支付成功
-	 * 3	支付失败
-	 */
-	private String status;
-	/**
 	 * 商品信息
 	 */
 	private List<GoodsInfoRequest> goodsInfo;
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/PaymentOrderRequest.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
index fe05520..a47a35a 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
@@ -50,8 +50,4 @@
 	 * 付款方式,6:微信  7:支付宝  8:银行卡 9:银联二维码 10银联购物车收银台
 	 */
 	private Integer payChannel;
-	/**
-	 * 是否补偿单。1、是,0、否
-	 */
-	private Integer isCompensate;
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
index a179a9c..55bcf0b 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
@@ -11,10 +11,6 @@
 @Data
 public class QYTPaymentCallbackData {
 	/**
-	 * 业务侧行程编号
-	 */
-	private String orderNo;
-	/**
 	 * 商户单标识。行程单ID
 	 */
 	private String partnerPayId;
diff --git a/management/guns-admin/pom.xml b/management/guns-admin/pom.xml
index 2353746..70d59d9 100644
--- a/management/guns-admin/pom.xml
+++ b/management/guns-admin/pom.xml
@@ -72,6 +72,11 @@
             <artifactId>spring-boot-devtools</artifactId>
             <optional>true</optional>
         </dependency>
+        <!--设置共享session-->
+        <dependency>
+            <groupId>org.springframework.session</groupId>
+            <artifactId>spring-session-data-redis</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
@@ -231,6 +236,36 @@
             <artifactId>hutool-all</artifactId>
             <version>5.7.7</version>
         </dependency>
+        <!--中台sdk-->
+        <dependency>
+            <groupId>com.zhongtai</groupId>
+            <artifactId>zhongtai-sdk</artifactId>
+            <version>1.0.0</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/lib/openApiClient-1.0.0.jar</systemPath>
+        </dependency>
+        <!--单点登录sdk-->
+        <dependency>
+            <groupId>com.cas</groupId>
+            <artifactId>cas-client-oncon</artifactId>
+            <version>3.0.5</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/lib/cas-client-oncon-3.0.5.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.cas</groupId>
+            <artifactId>cas-client-oncon-core</artifactId>
+            <version>1.2.2</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/lib/cas-client-oncon-core-1.2.2.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>it.sauronsoftware</groupId>
+            <artifactId>base64</artifactId>
+            <version>1.3.1</version>
+            <scope>system</scope>
+            <systemPath>${pom.basedir}/lib/javabase64-1.3.1.jar</systemPath>
+        </dependency>
         <dependency>
             <groupId>com.ncoss</groupId>
             <artifactId>ncoss-java-sdk</artifactId>
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/config/SpringSessionConfig.java b/management/guns-admin/src/main/java/com/stylefeng/guns/config/SpringSessionConfig.java
index ef9a5bc..9e9627b 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/config/SpringSessionConfig.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/config/SpringSessionConfig.java
@@ -1,6 +1,7 @@
 package com.stylefeng.guns.config;
 
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
 
 /**
  * spring session配置
@@ -8,7 +9,7 @@
  * @author fengshuonan
  * @date 2017-07-13 21:05
  */
-//@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)  //session过期时间  如果部署多机环境,需要打开注释
+@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 28800)  //session过期时间  如果部署多机环境,需要打开注释
 @ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "true")
 public class SpringSessionConfig {
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java b/management/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
index eb64df0..4279b15 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
@@ -1,208 +1,208 @@
-package com.stylefeng.guns.config.web;
-
-import com.stylefeng.guns.config.properties.GunsProperties;
-import com.stylefeng.guns.core.intercept.GunsUserFilter;
-import com.stylefeng.guns.core.shiro.ShiroDbRealm;
-import org.apache.shiro.cache.CacheManager;
-import org.apache.shiro.cache.ehcache.EhCacheManager;
-import org.apache.shiro.codec.Base64;
-import org.apache.shiro.session.mgt.SessionManager;
-import org.apache.shiro.spring.LifecycleBeanPostProcessor;
-import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
-import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.web.mgt.CookieRememberMeManager;
-import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
-import org.apache.shiro.web.servlet.Cookie;
-import org.apache.shiro.web.servlet.ShiroHttpSession;
-import org.apache.shiro.web.servlet.SimpleCookie;
-import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
-import org.apache.shiro.web.session.mgt.ServletContainerSessionManager;
-import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import javax.servlet.Filter;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * shiro权限管理的配置
- *
- * @author fengshuonan
- * @date 2016年11月14日 下午3:03:44
- */
-@Configuration
-public class ShiroConfig {
-
-    /**
-     * 安全管理器
-     */
-    @Bean
-    public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, CacheManager cacheShiroManager, SessionManager sessionManager) {
-        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-        securityManager.setRealm(this.shiroDbRealm());
-        securityManager.setCacheManager(cacheShiroManager);
-        securityManager.setRememberMeManager(rememberMeManager);
-        securityManager.setSessionManager(sessionManager);
-        return securityManager;
-    }
-
-    /**
-     * spring session管理器(多机环境)
-     */
-    @Bean
-    @ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "true")
-    public ServletContainerSessionManager servletContainerSessionManager() {
-        return new ServletContainerSessionManager();
-    }
-
-    /**
-     * session管理器(单机环境)
-     */
-    @Bean
-    @ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "false")
-    public DefaultWebSessionManager defaultWebSessionManager(CacheManager cacheShiroManager, GunsProperties gunsProperties) {
-        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
-        sessionManager.setCacheManager(cacheShiroManager);
-        sessionManager.setSessionValidationInterval(gunsProperties.getSessionValidationInterval() * 1000);
-        sessionManager.setGlobalSessionTimeout(gunsProperties.getSessionInvalidateTime() * 1000);
-        sessionManager.setDeleteInvalidSessions(true);
-        sessionManager.setSessionValidationSchedulerEnabled(true);
-        Cookie cookie = new SimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
-        cookie.setName("shiroCookie");
-        cookie.setHttpOnly(true);
-        sessionManager.setSessionIdCookie(cookie);
-        return sessionManager;
-    }
-
-    /**
-     * 缓存管理器 使用Ehcache实现
-     */
-    @Bean
-    public CacheManager getCacheShiroManager(EhCacheManagerFactoryBean ehcache) {
-        EhCacheManager ehCacheManager = new EhCacheManager();
-        ehCacheManager.setCacheManager(ehcache.getObject());
-        return ehCacheManager;
-    }
-
-    /**
-     * 项目自定义的Realm
-     */
-    @Bean
-    public ShiroDbRealm shiroDbRealm() {
-        return new ShiroDbRealm();
-    }
-
-    /**
-     * rememberMe管理器, cipherKey生成见{@code Base64Test.java}
-     */
-    @Bean
-    public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
-        CookieRememberMeManager manager = new CookieRememberMeManager();
-//        manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA=="));
-        manager.setCookie(rememberMeCookie);
-        return manager;
-    }
-
-    /**
-     * 记住密码Cookie
-     */
-    @Bean
-    public SimpleCookie rememberMeCookie() {
-//        SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
-        SimpleCookie simpleCookie = new SimpleCookie("");
-        simpleCookie.setHttpOnly(true);
-        simpleCookie.setMaxAge(7 * 24 * 60 * 60);//7天
-        return simpleCookie;
-    }
-
-    /**
-     * Shiro的过滤器链
-     */
-    @Bean
-    public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) {
-        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
-        shiroFilter.setSecurityManager(securityManager);
-        /**
-         * 默认的登陆访问url
-         */
-        shiroFilter.setLoginUrl("/login");
-        /**
-         * 登陆成功后跳转的url
-         */
-        shiroFilter.setSuccessUrl("/");
-        /**
-         * 没有权限跳转的url
-         */
-        shiroFilter.setUnauthorizedUrl("/global/error");
-
-        /**
-         * 覆盖默认的user拦截器(默认拦截器解决不了ajax请求 session超时的问题,若有更好的办法请及时反馈作者)
-         */
-        HashMap<String, Filter> myFilters = new HashMap<>();
-        myFilters.put("user", new GunsUserFilter());
-        shiroFilter.setFilters(myFilters);
-
-        /**
-         * 配置shiro拦截器链
-         *
-         * anon  不需要认证
-         * authc 需要认证
-         * user  验证通过或RememberMe登录的都可以
-         *
-         * 当应用开启了rememberMe时,用户下次访问时可以是一个user,但不会是authc,因为authc是需要重新认证的
-         *
-         * 顺序从上到下,优先级依次降低
-         *
-         * api开头的接口,走rest api鉴权,不走shiro鉴权
-         *
-         */
-        Map<String, String> hashMap = new LinkedHashMap<>();
-        hashMap.put("/static/**", "anon");
-        hashMap.put("/base/**", "anon");
-        hashMap.put("/upload/**", "anon");
-        hashMap.put("/gunsApi/**", "anon");
-        hashMap.put("/login", "anon");
-        hashMap.put("/global/sessionError", "anon");
-        hashMap.put("/kaptcha", "anon");
-        hashMap.put("/**", "user");
-        shiroFilter.setFilterChainDefinitionMap(hashMap);
-        return shiroFilter;
-    }
-
-    /**
-     * 在方法中 注入 securityManager,进行代理控制
-     */
-    @Bean
-    public MethodInvokingFactoryBean methodInvokingFactoryBean(DefaultWebSecurityManager securityManager) {
-        MethodInvokingFactoryBean bean = new MethodInvokingFactoryBean();
-        bean.setStaticMethod("org.apache.shiro.SecurityUtils.setSecurityManager");
-        bean.setArguments(new Object[]{securityManager});
-        return bean;
-    }
-
-    /**
-     * Shiro生命周期处理器:
-     * 用于在实现了Initializable接口的Shiro bean初始化时调用Initializable接口回调(例如:UserRealm)
-     * 在实现了Destroyable接口的Shiro bean销毁时调用 Destroyable接口回调(例如:DefaultSecurityManager)
-     */
-    @Bean
-    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
-        return new LifecycleBeanPostProcessor();
-    }
-
-    /**
-     * 启用shrio授权注解拦截方式,AOP式方法级权限检查
-     */
-    @Bean
-    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
-        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor =
-                new AuthorizationAttributeSourceAdvisor();
-        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
-        return authorizationAttributeSourceAdvisor;
-    }
-
-}
+//package com.stylefeng.guns.config.web;
+//
+//import com.stylefeng.guns.config.properties.GunsProperties;
+//import com.stylefeng.guns.core.intercept.GunsUserFilter;
+//import com.stylefeng.guns.core.shiro.ShiroDbRealm;
+//import org.apache.shiro.cache.CacheManager;
+//import org.apache.shiro.cache.ehcache.EhCacheManager;
+//import org.apache.shiro.codec.Base64;
+//import org.apache.shiro.session.mgt.SessionManager;
+//import org.apache.shiro.spring.LifecycleBeanPostProcessor;
+//import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
+//import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
+//import org.apache.shiro.web.mgt.CookieRememberMeManager;
+//import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
+//import org.apache.shiro.web.servlet.Cookie;
+//import org.apache.shiro.web.servlet.ShiroHttpSession;
+//import org.apache.shiro.web.servlet.SimpleCookie;
+//import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
+//import org.apache.shiro.web.session.mgt.ServletContainerSessionManager;
+//import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
+//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+//import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//
+//import javax.servlet.Filter;
+//import java.util.HashMap;
+//import java.util.LinkedHashMap;
+//import java.util.Map;
+//
+///**
+// * shiro权限管理的配置
+// *
+// * @author fengshuonan
+// * @date 2016年11月14日 下午3:03:44
+// */
+//@Configuration
+//public class ShiroConfig {
+//
+//    /**
+//     * 安全管理器
+//     */
+//    @Bean
+//    public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, CacheManager cacheShiroManager, SessionManager sessionManager) {
+//        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
+//        securityManager.setRealm(this.shiroDbRealm());
+//        securityManager.setCacheManager(cacheShiroManager);
+//        securityManager.setRememberMeManager(rememberMeManager);
+//        securityManager.setSessionManager(sessionManager);
+//        return securityManager;
+//    }
+//
+//    /**
+//     * spring session管理器(多机环境)
+//     */
+//    @Bean
+//    @ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "true")
+//    public ServletContainerSessionManager servletContainerSessionManager() {
+//        return new ServletContainerSessionManager();
+//    }
+//
+//    /**
+//     * session管理器(单机环境)
+//     */
+//    @Bean
+//    @ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "false")
+//    public DefaultWebSessionManager defaultWebSessionManager(CacheManager cacheShiroManager, GunsProperties gunsProperties) {
+//        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
+//        sessionManager.setCacheManager(cacheShiroManager);
+//        sessionManager.setSessionValidationInterval(gunsProperties.getSessionValidationInterval() * 1000);
+//        sessionManager.setGlobalSessionTimeout(gunsProperties.getSessionInvalidateTime() * 1000);
+//        sessionManager.setDeleteInvalidSessions(true);
+//        sessionManager.setSessionValidationSchedulerEnabled(true);
+//        Cookie cookie = new SimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
+//        cookie.setName("shiroCookie");
+//        cookie.setHttpOnly(true);
+//        sessionManager.setSessionIdCookie(cookie);
+//        return sessionManager;
+//    }
+//
+//    /**
+//     * 缓存管理器 使用Ehcache实现
+//     */
+//    @Bean
+//    public CacheManager getCacheShiroManager(EhCacheManagerFactoryBean ehcache) {
+//        EhCacheManager ehCacheManager = new EhCacheManager();
+//        ehCacheManager.setCacheManager(ehcache.getObject());
+//        return ehCacheManager;
+//    }
+//
+//    /**
+//     * 项目自定义的Realm
+//     */
+//    @Bean
+//    public ShiroDbRealm shiroDbRealm() {
+//        return new ShiroDbRealm();
+//    }
+//
+//    /**
+//     * rememberMe管理器, cipherKey生成见{@code Base64Test.java}
+//     */
+//    @Bean
+//    public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
+//        CookieRememberMeManager manager = new CookieRememberMeManager();
+////        manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA=="));
+//        manager.setCookie(rememberMeCookie);
+//        return manager;
+//    }
+//
+//    /**
+//     * 记住密码Cookie
+//     */
+//    @Bean
+//    public SimpleCookie rememberMeCookie() {
+////        SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
+//        SimpleCookie simpleCookie = new SimpleCookie("");
+//        simpleCookie.setHttpOnly(true);
+//        simpleCookie.setMaxAge(7 * 24 * 60 * 60);//7天
+//        return simpleCookie;
+//    }
+//
+//    /**
+//     * Shiro的过滤器链
+//     */
+//    @Bean
+//    public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) {
+//        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
+//        shiroFilter.setSecurityManager(securityManager);
+//        /**
+//         * 默认的登陆访问url
+//         */
+//        shiroFilter.setLoginUrl("/login");
+//        /**
+//         * 登陆成功后跳转的url
+//         */
+//        shiroFilter.setSuccessUrl("/");
+//        /**
+//         * 没有权限跳转的url
+//         */
+//        shiroFilter.setUnauthorizedUrl("/global/error");
+//
+//        /**
+//         * 覆盖默认的user拦截器(默认拦截器解决不了ajax请求 session超时的问题,若有更好的办法请及时反馈作者)
+//         */
+//        HashMap<String, Filter> myFilters = new HashMap<>();
+//        myFilters.put("user", new GunsUserFilter());
+//        shiroFilter.setFilters(myFilters);
+//
+//        /**
+//         * 配置shiro拦截器链
+//         *
+//         * anon  不需要认证
+//         * authc 需要认证
+//         * user  验证通过或RememberMe登录的都可以
+//         *
+//         * 当应用开启了rememberMe时,用户下次访问时可以是一个user,但不会是authc,因为authc是需要重新认证的
+//         *
+//         * 顺序从上到下,优先级依次降低
+//         *
+//         * api开头的接口,走rest api鉴权,不走shiro鉴权
+//         *
+//         */
+//        Map<String, String> hashMap = new LinkedHashMap<>();
+//        hashMap.put("/static/**", "anon");
+//        hashMap.put("/base/**", "anon");
+//        hashMap.put("/upload/**", "anon");
+//        hashMap.put("/gunsApi/**", "anon");
+//        hashMap.put("/login", "anon");
+//        hashMap.put("/global/sessionError", "anon");
+//        hashMap.put("/kaptcha", "anon");
+//        hashMap.put("/**", "user");
+//        shiroFilter.setFilterChainDefinitionMap(hashMap);
+//        return shiroFilter;
+//    }
+//
+//    /**
+//     * 在方法中 注入 securityManager,进行代理控制
+//     */
+//    @Bean
+//    public MethodInvokingFactoryBean methodInvokingFactoryBean(DefaultWebSecurityManager securityManager) {
+//        MethodInvokingFactoryBean bean = new MethodInvokingFactoryBean();
+//        bean.setStaticMethod("org.apache.shiro.SecurityUtils.setSecurityManager");
+//        bean.setArguments(new Object[]{securityManager});
+//        return bean;
+//    }
+//
+//    /**
+//     * Shiro生命周期处理器:
+//     * 用于在实现了Initializable接口的Shiro bean初始化时调用Initializable接口回调(例如:UserRealm)
+//     * 在实现了Destroyable接口的Shiro bean销毁时调用 Destroyable接口回调(例如:DefaultSecurityManager)
+//     */
+//    @Bean
+//    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
+//        return new LifecycleBeanPostProcessor();
+//    }
+//
+//    /**
+//     * 启用shrio授权注解拦截方式,AOP式方法级权限检查
+//     */
+//    @Bean
+//    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
+//        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor =
+//                new AuthorizationAttributeSourceAdvisor();
+//        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
+//        return authorizationAttributeSourceAdvisor;
+//    }
+//
+//}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/config/web/WebConfig.java b/management/guns-admin/src/main/java/com/stylefeng/guns/config/web/WebConfig.java
index a94beb7..c050041 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/config/web/WebConfig.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/config/web/WebConfig.java
@@ -11,10 +11,14 @@
 import com.stylefeng.guns.core.intercept.RestApiInteceptor;
 import com.stylefeng.guns.core.listener.ConfigListener;
 import com.stylefeng.guns.core.xss.XssFilter;
+import edu.yale.its.tp.cas.client.filter.OnconMDCasFilter;
+import org.jasig.cas.client.session.SingleSignOutFilter;
+import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
 import org.springframework.aop.Advisor;
 import org.springframework.aop.support.DefaultPointcutAdvisor;
 import org.springframework.aop.support.JdkRegexpMethodPointcut;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
 import org.springframework.boot.web.servlet.ServletRegistrationBean;
@@ -25,7 +29,9 @@
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Properties;
 
 /**
@@ -39,6 +45,9 @@
 
     @Autowired
     private GunsProperties gunsProperties;
+
+    @Value("${spring.profiles.active}")
+    private String activeProfile;
 
     /**
      * 增加swagger的支持
@@ -173,4 +182,92 @@
         defaultKaptcha.setConfig(config);
         return defaultKaptcha;
     }
+
+
+    /********************黔云通单点登录拦截器**********************/
+
+    @Bean
+    public FilterRegistrationBean getOnconMDCasFilter() {
+        OnconMDCasFilter onconMDCasFilter = new OnconMDCasFilter();
+        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
+        if("dev".equals(activeProfile)){
+            registrationBean.setFilter(onconMDCasFilter);
+            List<String> urlPatterns = new ArrayList<String>();
+            urlPatterns.add("/*");
+            registrationBean.setUrlPatterns(urlPatterns);
+            registrationBean.setOrder(2);
+
+            registrationBean.addInitParameter("oncon.com.security.urls", "/**");
+            registrationBean.addInitParameter("erp.si-tech.com.cn.noCheckUrl", "/index.html,/static/**,/upload/**");
+            registrationBean.addInitParameter("erp.si-tech.com.cn.nologinstatus", "/*");
+            registrationBean.addInitParameter("erp.si-tech.com.cn.loginstatus", "/*");
+            registrationBean.addInitParameter("com.oncon.sso.urlparams.nologin", "code,code2");
+
+            registrationBean.addInitParameter("edu.yale.its.tp.cas.client.filter.loginUrl", "https://testsso1.teamshub.com/login");
+            registrationBean.addInitParameter("edu.yale.its.tp.cas.client.filter.validateUrl", "https://testsso1.teamshub.com/serviceValidate");
+            registrationBean.addInitParameter("com.oncon.md.loginUrl", "https://testsso1.teamshub.com/sso-session/login");
+            registrationBean.addInitParameter("edu.yale.its.tp.cas.client.filter.serverName", "http://127.0.0.1:8010");
+        }
+        if("test".equals(activeProfile)){
+            registrationBean.setFilter(onconMDCasFilter);
+            List<String> urlPatterns = new ArrayList<String>();
+            urlPatterns.add("/*");
+            registrationBean.setUrlPatterns(urlPatterns);
+            registrationBean.setOrder(2);
+
+            registrationBean.addInitParameter("oncon.com.security.urls", "/**");
+            registrationBean.addInitParameter("erp.si-tech.com.cn.noCheckUrl", "/index.html,/static/**,/upload/**");
+            registrationBean.addInitParameter("erp.si-tech.com.cn.nologinstatus", "/*");
+            registrationBean.addInitParameter("erp.si-tech.com.cn.loginstatus", "/*");
+            registrationBean.addInitParameter("com.oncon.sso.urlparams.nologin", "code,code2");
+
+            registrationBean.addInitParameter("edu.yale.its.tp.cas.client.filter.loginUrl", "https://testsso1.teamshub.com/login");
+            registrationBean.addInitParameter("edu.yale.its.tp.cas.client.filter.validateUrl", "https://testsso1.teamshub.com/serviceValidate");
+            registrationBean.addInitParameter("com.oncon.md.loginUrl", "https://testsso1.teamshub.com/sso-session/login");
+            registrationBean.addInitParameter("edu.yale.its.tp.cas.client.filter.serverName", "https://test-qncx.sitechcloud.com:443");
+        }
+        if("prod".equals(activeProfile)){
+            registrationBean.setFilter(onconMDCasFilter);
+            List<String> urlPatterns = new ArrayList<String>();
+            urlPatterns.add("/*");
+            registrationBean.setUrlPatterns(urlPatterns);
+            registrationBean.setOrder(2);
+
+            registrationBean.addInitParameter("oncon.com.security.urls", "/**");
+            registrationBean.addInitParameter("erp.si-tech.com.cn.noCheckUrl", "/index.html,/static/**,/upload/**");
+            registrationBean.addInitParameter("erp.si-tech.com.cn.nologinstatus", "/*");
+            registrationBean.addInitParameter("erp.si-tech.com.cn.loginstatus", "/*");
+            registrationBean.addInitParameter("com.oncon.sso.urlparams.nologin", "code,code2");
+
+            registrationBean.addInitParameter("edu.yale.its.tp.cas.client.filter.loginUrl", "https://sso.teamshub.com/login");
+            registrationBean.addInitParameter("edu.yale.its.tp.cas.client.filter.validateUrl", "https://sso.teamshub.com/serviceValidate");
+            registrationBean.addInitParameter("com.oncon.md.loginUrl", "https://passport.teamshub.com/login");
+            registrationBean.addInitParameter("edu.yale.its.tp.cas.client.filter.serverName", "https://traffic.qytzt.cn:443");
+        }
+        return registrationBean;
+    }
+
+    @Bean
+    public FilterRegistrationBean getSingleSignOutFilter() {
+        SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();
+        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
+        registrationBean.setFilter(singleSignOutFilter);
+        List<String> urlPatterns = new ArrayList<String>();
+        urlPatterns.add("/*");//拦截路径,可以添加多个
+        registrationBean.setUrlPatterns(urlPatterns);
+        registrationBean.setOrder(1);
+
+        registrationBean.addInitParameter("wmall.flag", "false");
+
+        return registrationBean;
+    }
+
+
+    @Bean
+    public ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> getSingleSignOutHttpSessionListener() {
+        ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> servletListenerRegistrationBean
+                = new ServletListenerRegistrationBean<>();
+        servletListenerRegistrationBean.setListener(new SingleSignOutHttpSessionListener());
+        return servletListenerRegistrationBean;
+    }
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/core/aop/GlobalExceptionHandler.java b/management/guns-admin/src/main/java/com/stylefeng/guns/core/aop/GlobalExceptionHandler.java
index 5f4f745..fdcc78f 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/core/aop/GlobalExceptionHandler.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/core/aop/GlobalExceptionHandler.java
@@ -44,7 +44,7 @@
     @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
     @ResponseBody
     public ErrorTip notFount(GunsException e) {
-        LogManager.me().executeLog(LogTaskFactory.exceptionLog(ShiroKit.getUser().getId(), e));
+        LogManager.me().executeLog(LogTaskFactory.exceptionLog(shiroExtUtil.getUser().getId(), e));
         getRequest().setAttribute("tip", e.getMessage());
         log.error("业务异常:", e);
         return new ErrorTip(e.getCode(), e.getMessage());
@@ -115,7 +115,7 @@
     @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
     @ResponseBody
     public ErrorTip notFount(RuntimeException e) {
-        LogManager.me().executeLog(LogTaskFactory.exceptionLog(ShiroKit.getUser().getId(), e));
+        LogManager.me().executeLog(LogTaskFactory.exceptionLog(shiroExtUtil.getUser().getId(), e));
         getRequest().setAttribute("tip", "服务器未知运行时异常");
         log.error("运行时异常:", e);
         return new ErrorTip(BizExceptionEnum.SERVER_ERROR.getCode(), BizExceptionEnum.SERVER_ERROR.getMessage());
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/core/aop/LogAop.java b/management/guns-admin/src/main/java/com/stylefeng/guns/core/aop/LogAop.java
index d5123f4..1cd94ac 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/core/aop/LogAop.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/core/aop/LogAop.java
@@ -67,7 +67,7 @@
         String methodName = currentMethod.getName();
 
         //如果当前用户未登录,不做日志
-        ShiroUser user = ShiroKit.getUser();
+        ShiroUser user = shiroExtUtil.getUser();
         if (null == user) {
             return;
         }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/core/beetl/BeetlConfiguration.java b/management/guns-admin/src/main/java/com/stylefeng/guns/core/beetl/BeetlConfiguration.java
index fa53e22..bc97138 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/core/beetl/BeetlConfiguration.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/core/beetl/BeetlConfiguration.java
@@ -3,6 +3,7 @@
 import com.stylefeng.guns.core.tag.DictSelectorTag;
 import com.stylefeng.guns.core.util.KaptchaUtil;
 import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
 import org.beetl.core.Context;
 import org.beetl.core.Function;
 import org.beetl.core.Tag;
@@ -35,7 +36,7 @@
 
     @Override
     public void initOther() {
-        groupTemplate.registerFunctionPackage("shiro", new ShiroExt());
+        groupTemplate.registerFunctionPackage("shiro", SpringContextsUtil.getBean(ShiroExtUtil.class));
         groupTemplate.registerFunctionPackage("tool", new ToolUtil());
         groupTemplate.registerFunctionPackage("kaptcha", new KaptchaUtil());
         groupTemplate.registerTagFactory("dictSelector", new TagFactory() {
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/ShiroKit.java b/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/ShiroKit.java
index eedfe1c..b1866e1 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/ShiroKit.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/ShiroKit.java
@@ -277,7 +277,7 @@
      * 判断当前用户是否是超级管理员
      */
     public static boolean isAdmin() {
-        List<Integer> roleList = ShiroKit.getUser().getRoleList();
+        List<Integer> roleList = shiroExtUtil.getUser().getRoleList();
         for (Integer integer : roleList) {
             String singleRoleTip = ConstantFactory.me().getSingleRoleTip(integer);
             if (singleRoleTip.equals(Const.ADMIN_NAME)) {
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/ShiroUser.java b/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/ShiroUser.java
index defcc45..bf00425 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/ShiroUser.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/ShiroUser.java
@@ -22,6 +22,9 @@
     public List<String> roleNames; // 角色名称集
     public Integer roleType; // 角色类型 1=平台 2=分公司 3=加盟商
     public Integer objectId; // 对象ID
+    public List<String> menuIds;    //菜单
+
+    public boolean isAdmin; //是否是超管
 
 
     public Integer getId() {
@@ -95,4 +98,20 @@
     public void setObjectId(Integer objectId) {
         this.objectId = objectId;
     }
+
+    public List<String> getMenuIds() {
+        return menuIds;
+    }
+
+    public void setMenuIds(List<String> menuIds) {
+        this.menuIds = menuIds;
+    }
+
+    public boolean isAdmin() {
+        return isAdmin;
+    }
+
+    public void setAdmin(boolean admin) {
+        isAdmin = admin;
+    }
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/check/PermissionCheckFactory.java b/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/check/PermissionCheckFactory.java
index 89f602f..16b223d 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/check/PermissionCheckFactory.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/core/shiro/check/PermissionCheckFactory.java
@@ -41,7 +41,7 @@
 
     @Override
     public boolean check(Object[] permissions) {
-        ShiroUser user = ShiroKit.getUser();
+        ShiroUser user = shiroExtUtil.getUser();
         if (null == user) {
             return false;
         }
@@ -55,7 +55,7 @@
     @Override
     public boolean checkAll() {
         HttpServletRequest request = HttpKit.getRequest();
-        ShiroUser user = ShiroKit.getUser();
+        ShiroUser user = shiroExtUtil.getUser();
         if (null == user) {
             return false;
         }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java
index a942f21..fa3094d 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java
@@ -90,7 +90,7 @@
     @ResponseBody
     @PostMapping("/getSumData")
     public Object getSumData(Integer companyId, Date addDate, Date start, Date end){
-        Integer id = ShiroKit.getUser().getId();
+        Integer id = shiroExtUtil.getUser().getId();
         User user = userService.selectById(id);
         if(companyId == null && user.getRoleType() != 1){
             companyId = user.getObjectId();
@@ -382,7 +382,7 @@
     @ResponseBody
     @PostMapping("/getDriverPosition")
     public Object getDriverPosition(Integer companyId){
-        Integer id = ShiroKit.getUser().getId();
+        Integer id = shiroExtUtil.getUser().getId();
         User user = userService.selectById(id);
         if(companyId == null && user.getRoleType() != 1){
             companyId = user.getObjectId();
@@ -448,7 +448,7 @@
     @ResponseBody
     @PostMapping("/getCompanyInfoByUserId")
     public Object getCompanyInfoByUserId(){
-        Integer id = ShiroKit.getUser().getId();
+        Integer id = shiroExtUtil.getUser().getId();
         User user = userService.selectById(id);
         companys = new ArrayList<>();
         List<TCompany> ids = new ArrayList<>();
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysCouponActivityController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysCouponActivityController.java
index 06d0d5f..841da8c 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysCouponActivityController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysCouponActivityController.java
@@ -120,7 +120,7 @@
         }
         if(SinataUtil.isNotEmpty(couponUseType)){wrapper.eq("couponUseType",couponUseType);}
         if(SinataUtil.isNotEmpty(status)){wrapper.eq("status",status);}
-        ShiroUser user = ShiroKit.getUser();
+        ShiroUser user = shiroExtUtil.getUser();
         if(user.getRoleType()!=1){
             wrapper.eq("companyId",user.getObjectId());
             wrapper.eq("companyType",user.getRoleType());
@@ -143,8 +143,8 @@
         sysCouponActivity.setFullMoney(sysCouponRecord.getFullMoney());
         sysCouponActivity.setInsertTime(new Date());
         sysCouponActivity.setCouponId(activityId);
-        sysCouponActivity.setCompanyId(ShiroKit.getUser().getObjectId());
-        sysCouponActivity.setCompanyType(ShiroKit.getUser().getRoleType());
+        sysCouponActivity.setCompanyId(shiroExtUtil.getUser().getObjectId());
+        sysCouponActivity.setCompanyType(shiroExtUtil.getUser().getRoleType());
         sysCouponActivity.setStatus(sysCouponActivity.getCompanyType()==1?3:1);
         sysCouponActivityService.insert(sysCouponActivity);
         if(sysCouponActivity.getCompanyType()==1){
@@ -258,8 +258,8 @@
         sysCouponActivity.setFullMoney(sysCouponRecord.getFullMoney());
         sysCouponActivity.setInsertTime(new Date());
         sysCouponActivity.setCouponId(activityId);
-        sysCouponActivity.setCompanyId(ShiroKit.getUser().getObjectId());
-        sysCouponActivity.setCompanyType(ShiroKit.getUser().getRoleType());
+        sysCouponActivity.setCompanyId(shiroExtUtil.getUser().getObjectId());
+        sysCouponActivity.setCompanyType(shiroExtUtil.getUser().getRoleType());
         sysCouponActivity.setStatus(sysCouponActivity.getCompanyType()==1?3:1);
         sysCouponActivityService.updateById(sysCouponActivity);
         return SUCCESS_TIP;
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysRedPacketRecordController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysRedPacketRecordController.java
index fd0f70a..22f543c 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysRedPacketRecordController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/SysRedPacketRecordController.java
@@ -82,8 +82,8 @@
         if(SinataUtil.isNotEmpty(createTime)){
             wrapper.between("insertTime",startTimes,endTimes);
         }
-        wrapper.eq("companyId",ShiroKit.getUser().getObjectId());
-        wrapper.eq("companyType",ShiroKit.getUser().getRoleType());
+        wrapper.eq("companyId",shiroExtUtil.getUser().getObjectId());
+        wrapper.eq("companyType",shiroExtUtil.getUser().getRoleType());
         wrapper.orderBy("id",false);
         return super.packForBT(sysRedPacketRecordService.selectPage(page,wrapper));
     }
@@ -95,8 +95,8 @@
     @ResponseBody
     public Object add(SysRedPacketRecord sysRedPacketRecord) {
         sysRedPacketRecord.setInsertTime(new Date());
-        sysRedPacketRecord.setCompanyId(ShiroKit.getUser().getObjectId());
-        sysRedPacketRecord.setCompanyType(ShiroKit.getUser().getRoleType());
+        sysRedPacketRecord.setCompanyId(shiroExtUtil.getUser().getObjectId());
+        sysRedPacketRecord.setCompanyType(shiroExtUtil.getUser().getRoleType());
         sysRedPacketRecordService.insert(sysRedPacketRecord);
         return SUCCESS_TIP;
     }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAdvertisementController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAdvertisementController.java
index 91003a0..e4552bb 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAdvertisementController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAdvertisementController.java
@@ -102,7 +102,7 @@
     @ResponseBody
     public Object add(TAdvertisement tAdvertisement) {
         tAdvertisement.setInsertTime(new Date());
-        tAdvertisement.setInsertUser(ShiroKit.getUser().getId());
+        tAdvertisement.setInsertUser(shiroExtUtil.getUser().getId());
         tAdvertisementService.insert(tAdvertisement);
         return SUCCESS_TIP;
     }
@@ -131,7 +131,7 @@
                 tAdvertisement.setState(2);
             }
             tAdvertisement.setUpdateTime(new Date());
-            tAdvertisement.setUpdateUser(ShiroKit.getUser().getId());
+            tAdvertisement.setUpdateUser(shiroExtUtil.getUser().getId());
             tAdvertisementService.updateById(tAdvertisement);
         }
         return SUCCESS_TIP;
@@ -144,7 +144,7 @@
     @ResponseBody
     public Object update(TAdvertisement tAdvertisement) {
         tAdvertisement.setUpdateTime(new Date());
-        tAdvertisement.setUpdateUser(ShiroKit.getUser().getId());
+        tAdvertisement.setUpdateUser(shiroExtUtil.getUser().getId());
         tAdvertisementService.updateById(tAdvertisement);
         return SUCCESS_TIP;
     }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBranchOfficeController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBranchOfficeController.java
index ecda26f..2271853 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBranchOfficeController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBranchOfficeController.java
@@ -71,7 +71,7 @@
      */
     @RequestMapping("")
     public String index(Model model) {
-        model.addAttribute("userType", Objects.requireNonNull(ShiroKit.getUser()).getRoleType());
+        model.addAttribute("userType", Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType());
         return PREFIX + "tBranchOffice.html";
     }
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java
index 76f4eef..aff3d97 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java
@@ -6,13 +6,22 @@
 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.shiro.ShiroKit;
+import com.stylefeng.guns.core.shiro.ShiroUser;
 import com.stylefeng.guns.core.util.SinataUtil;
+import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.ITCompanyCityService;
 import com.stylefeng.guns.modular.system.service.ITRegionService;
 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.EnterpriseUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -23,10 +32,7 @@
 import org.springframework.web.bind.annotation.RequestParam;
 import com.stylefeng.guns.modular.system.service.ITCompanyService;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 分公司管理控制器
@@ -51,6 +57,9 @@
 
     @Autowired
     private ITCompanyCityService tCompanyCityService;
+
+    @Autowired
+    private ShiroExtUtil shiroExtUtil;
 
     /**
      * 跳转到修改平台信息
@@ -294,6 +303,70 @@
         if (count > 0){
             return "error";
         }
+        if(ToolUtil.isEmpty(tCompany.getIdentifier())){
+            return "统一社会信用代码不能为空";
+        }
+        //调用中台接口创建企业
+        CheckEnterExist checkEnterExist = EnterpriseUtil.checkEnterExistByEnterIdCardNo(tCompany.getIdentifier());
+        String enterCode = "";
+        Integer enterNew = null;
+        Long empId = null;
+        Integer empnew = null;
+        //企业未注册,进行注册
+        if (null == checkEnterExist || "0".equals(checkEnterExist.getIsReg())) {
+            CreateEnterpriseRequest request = new CreateEnterpriseRequest();
+            request.setName(tCompany.getName());
+            request.setNickName(tCompany.getName());
+            request.setUscc(tCompany.getIdentifier());
+            request.setIndustry_code("292");
+            request.setMobile(account);
+            CreateEnterprise enterprise = EnterpriseUtil.createEnterprise(request);
+            enterCode = enterprise.getIdCode();
+            enterNew = 1;
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(account, enterCode);
+            if(null != userInfoByPhone && userInfoByPhone.size() > 0){
+                empId = userInfoByPhone.get(0).getEmpId();
+                empnew = 0;
+            }else{
+                empId = 0L;
+                empnew = 1;
+            }
+        }
+        //企业已注册
+        if (null != checkEnterExist && "1".equals(checkEnterExist.getIsReg())) {
+            enterCode = checkEnterExist.getEnterCode();
+            enterNew = 0;
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(account, enterCode);
+            if(null == userInfoByPhone ||userInfoByPhone.size() == 0){
+                //负责人不匹配,则创建新的员工到中台
+                SaveStaffNodeRequest request = new SaveStaffNodeRequest();
+                request.setMobile(checkEnterExist.getMobile());
+                request.setEntercode(enterCode);
+                request.setEmpName(tCompany.getName() + "管理员");
+                request.setEmpNickname(tCompany.getName() + "管理员");
+                request.setLoginNo(account);
+                request.setEmpSex("男");
+                request.setMphone(account);
+                request.setEmail(account + "@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;
+            }
+        }
+
+        tCompany.setEnterCode(enterCode);
+        tCompany.setEnterNew(enterNew);
         tCompany.setType(2);  //2:分公司
         tCompany.setState(0); //0:正常
         tCompany.setInsertTime(new Date());
@@ -312,12 +385,34 @@
         user.setObjectId(tCompany.getId());
         user.setName(tCompany.getName());
         user.setSex(1);
+        user.setEmpId(empId);
+        user.setEntercode(enterCode);
+        user.setEnterId(Long.valueOf(enterCode));
+        user.setEmpnew(empnew);
         userService.insert(user);
-
+        //编写异步延迟处理中台账号延迟创建的问题
+        if(0 == empId){
+            Timer timer = new Timer();
+            String finalEnterCode = enterCode;
+            timer.schedule(new TimerTask() {
+                @Override
+                public void run() {
+                    List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(account, finalEnterCode);
+                    if(null != userInfoByPhone && userInfoByPhone.size() > 0){
+                        Long empId1 = userInfoByPhone.get(0).getEmpId();
+                        user.setEmpId(empId1);
+                        userService.updateById(user);
+                    }
+                }
+            },120*1000);
+        }
         //添加经营区域
         addSocpe(subArr,tCompany.getId());
         return SUCCESS_TIP;
     }
+
+
+
     //添加经营区域
     public void addSocpe(String subArr,Integer id){
         JSONArray jsonArray = JSON.parseArray(subArr);
@@ -354,6 +449,70 @@
         if (count > 0){
             return "error";
         }
+        if(ToolUtil.isEmpty(tCompany.getIdentifier())){
+            return "统一社会信用代码不能为空";
+        }
+        //调用中台接口创建企业
+        CheckEnterExist checkEnterExist = EnterpriseUtil.checkEnterExistByEnterIdCardNo(tCompany.getIdentifier());
+        String enterCode = "";
+        Long empId = null;
+        Integer empnew = null;
+        Integer enterNew = null;
+
+        //企业未注册,进行注册
+        if (null == checkEnterExist || "0".equals(checkEnterExist.getIsReg())) {
+            CreateEnterpriseRequest request = new CreateEnterpriseRequest();
+            request.setName(tCompany.getName());
+            request.setNickName(tCompany.getName());
+            request.setUscc(tCompany.getIdentifier());
+            request.setIndustry_code("292");
+            request.setMobile(account);
+            CreateEnterprise enterprise = EnterpriseUtil.createEnterprise(request);
+            enterCode = enterprise.getIdCode();
+            enterNew = 1;
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(account, enterCode);
+            if(null != userInfoByPhone && userInfoByPhone.size() > 0){
+                empId = userInfoByPhone.get(0).getEmpId();
+                empnew = 0;
+            }else{
+                empId = 0L;
+                empnew = 1;
+            }
+        }
+        //企业已注册
+        if (null != checkEnterExist && "1".equals(checkEnterExist.getIsReg())) {
+            enterCode = checkEnterExist.getEnterCode();
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(account, enterCode);
+            enterNew = 0;
+            if(null == userInfoByPhone || userInfoByPhone.size() == 0){
+                SaveStaffNodeRequest request = new SaveStaffNodeRequest();
+                request.setMobile(checkEnterExist.getMobile());
+                request.setEntercode(enterCode);
+                request.setEmpName(tCompany.getName() + "管理员");
+                request.setEmpNickname(tCompany.getName() + "管理员");
+                request.setLoginNo(account);
+                request.setEmpSex("女");
+                request.setMphone(account);
+                request.setEmail(account + "@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;
+            }
+        }
+
+        tCompany.setEnterCode(enterCode);
+        tCompany.setEnterNew(enterNew);
         tCompany.setType(3);  //2:分公司
         if (ShiroKit.getUser().getRoleType() == 2){
             tCompany.setSuperiorId(ShiroKit.getUser().getObjectId());
@@ -375,8 +534,27 @@
         user.setObjectId(tCompany.getId());
         user.setName(tCompany.getName());
         user.setSex(1);
+        user.setEmpId(empId);
+        user.setEntercode(enterCode);
+        user.setEnterId(Long.valueOf(enterCode));
+        user.setEmpnew(empnew);
         userService.insert(user);
-
+        //编写异步延迟处理中台账号延迟创建的问题
+        if(0 == empId){
+            Timer timer = new Timer();
+            String finalEnterCode = enterCode;
+            timer.schedule(new TimerTask() {
+                @Override
+                public void run() {
+                    List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(account, finalEnterCode);
+                    if(null != userInfoByPhone && userInfoByPhone.size() > 0){
+                        Long empId1 = userInfoByPhone.get(0).getEmpId();
+                        user.setEmpId(empId1);
+                        userService.updateById(user);
+                    }
+                }
+            },120*1000);
+        }
         return SUCCESS_TIP;
     }
 
@@ -387,6 +565,19 @@
     @ResponseBody
     public Object delete(@RequestParam Integer tCompanyId) {
         TCompany tCompany = tCompanyService.selectById(tCompanyId);
+        //调用中台接口创建企业
+        if(1 == tCompany.getEnterNew()){
+            CheckEnterExist checkEnterExist = EnterpriseUtil.checkEnterExistByEnterIdCardNo(tCompany.getIdentifier());
+            if (null != checkEnterExist && "1".equals(checkEnterExist.getIsReg())) {
+                ShiroUser user1 = shiroExtUtil.getUser();
+                User user = userService.selectById(user1.getId());
+                ResultUtil resultUtil = EnterpriseUtil.delEnterprise(checkEnterExist.getEnterCode(), user.getPhone());
+                if(resultUtil.getStatus() != 200){
+                    return new ErrorTip(resultUtil.getStatus(), resultUtil.getMsg());
+                }
+            }
+        }
+
         tCompany.setFlag("3");
         tCompanyService.updateById(tCompany);
         return SUCCESS_TIP;
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverBackController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverBackController.java
index 9191044..856e462 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverBackController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverBackController.java
@@ -101,12 +101,12 @@
         List<TCompany> companyList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 2));
         model.addAttribute("companyList",companyList);
 
-        Integer roleType = ShiroKit.getUser().getRoleType();
+        Integer roleType = shiroExtUtil.getUser().getRoleType();
         model.addAttribute("roleType",roleType);
         if (2 == roleType){
             List<TCompany> franchiseeList = tCompanyService.selectList(new EntityWrapper<TCompany>()
                     .eq("type", 3)
-                    .eq("superiorId",ShiroKit.getUser().getObjectId())
+                    .eq("superiorId",shiroExtUtil.getUser().getObjectId())
                     .notIn("state",1)
                     .notIn("flag",3));
             model.addAttribute("franchiseeList",franchiseeList);
@@ -114,7 +114,7 @@
             model.addAttribute("franchiseeList",null);
         }
         //查询当前用户所属分公司/加盟商
-        model.addAttribute("objectName",tCompanyService.selectById(ShiroKit.getUser().getObjectId()).getName());
+        model.addAttribute("objectName",tCompanyService.selectById(shiroExtUtil.getUser().getObjectId()).getName());
 
         //查询线路列表
         List<TLine> lineList = itLineService.selectList(new EntityWrapper<TLine>().eq("state", 1));
@@ -172,9 +172,9 @@
         model.addAttribute("item",tDriver);
         LogObjectHolder.me().set(tDriver);
 
-        Integer roleType = ShiroKit.getUser().getRoleType();
+        Integer roleType = shiroExtUtil.getUser().getRoleType();
         model.addAttribute("roleType",roleType);
-        model.addAttribute("objectName",tCompanyService.selectById(ShiroKit.getUser().getObjectId()).getName());
+        model.addAttribute("objectName",tCompanyService.selectById(shiroExtUtil.getUser().getObjectId()).getName());
 
         if (1 == roleType){
             List<TCompany> companyList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 2));
@@ -182,7 +182,7 @@
             List<TCompany> franchiseeList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 3).eq("superiorId",tDriver.getCompanyId()));
             model.addAttribute("franchiseeList",franchiseeList);
         }else if (2 == roleType){
-            List<TCompany> franchiseeList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 3).eq("superiorId",ShiroKit.getUser().getObjectId()));
+            List<TCompany> franchiseeList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 3).eq("superiorId",shiroExtUtil.getUser().getObjectId()));
             model.addAttribute("franchiseeList",franchiseeList);
         }
 
@@ -500,7 +500,7 @@
             endTime = timeArray[1];
         }
         Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
-        if (ShiroKit.getUser().getRoleType() != 1){
+        if (shiroExtUtil.getUser().getRoleType() != 1){
             page.setRecords(null);
         }else{
             page.setRecords(tDriverService.getAuthDriverList(page,beginTime,endTime,companyName,phone,account,addType,authState));
@@ -527,7 +527,7 @@
             endTime = timeArray[1];
         }
         Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
-        page.setRecords(tDriverService.getDriverList(page,ShiroKit.getUser().getRoleType(),ShiroKit.getUser().getObjectId(),beginTime,endTime,companyName,phone,name,addType,authState));
+        page.setRecords(tDriverService.getDriverList(page,shiroExtUtil.getUser().getRoleType(),shiroExtUtil.getUser().getObjectId(),beginTime,endTime,companyName,phone,name,addType,authState));
         return super.packForBT(page);
     }
 
@@ -552,7 +552,7 @@
         }*//*
         //2020-08-21:新需求,已被绑定的车辆可以被继续绑定
         Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
-        page.setRecords(tDriverService.getCanSelectCarList(page,ShiroKit.getUser().getRoleType(),ShiroKit.getUser().getObjectId(),null,carLicensePlate,brandName,modelName,color,serverStr));
+        page.setRecords(tDriverService.getCanSelectCarList(page,shiroExtUtil.getUser().getRoleType(),shiroExtUtil.getUser().getObjectId(),null,carLicensePlate,brandName,modelName,color,serverStr));
         return super.packForBT(page);
 
     }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
index 37cb1d2..9c4430f 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
@@ -5,7 +5,9 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.base.tips.ErrorTip;
 import com.stylefeng.guns.core.base.tips.SuccessTip;
+import com.stylefeng.guns.core.beetl.ShiroExtUtil;
 import com.stylefeng.guns.core.log.LogObjectHolder;
 import com.stylefeng.guns.core.shiro.ShiroKit;
 import com.stylefeng.guns.core.shiro.ShiroUser;
@@ -24,6 +26,13 @@
 import com.stylefeng.guns.modular.system.util.DateUtil;
 import com.stylefeng.guns.modular.system.util.RedisUtil;
 //import com.stylefeng.guns.modular.system.util.bank.BankUtil;
+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.DeleteStafNodeRequest;
+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 io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
@@ -100,6 +109,15 @@
     private AccountChangeDetailMapper accountChangeDetailMapper;
 
     private Logger log = LoggerFactory.getLogger(this.getClass());
+
+    @Autowired
+    private ShiroExtUtil shiroExtUtil;
+
+    @Autowired
+    private IUserService userService;
+
+    @Autowired
+    private ITCompanyService companyService;
 
     /**
      * 跳转到首页
@@ -528,10 +546,9 @@
     @RequestMapping(value = "/auditSubmit")
     @ResponseBody
     public Object auditSubmit(Integer id,Integer approvalStatus,String approvalNotes) {
+        ShiroUser user1 = shiroExtUtil.getUser();
+        User user2 = userService.selectById(user1.getId());
         TDriver tDriver = tDriverService.selectById(id);
-
-
-
         tDriver.setApprovalStatus(approvalStatus);
         tDriver.setApprovalNotes(approvalNotes);
         // 审核用户id
@@ -540,8 +557,41 @@
         tDriver.setApprovalUserId(shiroUser.getId());
         tDriver.setApprovalTime(new Date());
         if (approvalStatus==2){
-//            T21000001Response t21000001Response = BankUtil.addAccount(tDriver);
-//            tDriver.setMerchantNumber(t21000001Response.getDATA().getUSER_ID());
+            //审核通过,在中台添加司机账号
+            Integer objectId = tDriver.getBranchOfficeId();
+            TCompany tCompany = companyService.selectById(objectId);
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(tDriver.getPhone(), tCompany.getEnterCode());
+            Long empId = null;
+            Integer empnew = null;
+            if(null == userInfoByPhone || userInfoByPhone.size() == 0){
+                SaveStaffNodeRequest request = new SaveStaffNodeRequest();
+                request.setMobile(user2.getPhone());
+                request.setEntercode(tCompany.getEnterCode());
+                request.setEmpName(tDriver.getName());
+                request.setEmpNickname(tDriver.getName());
+                request.setLoginNo(tDriver.getPhone());
+                request.setEmpSex(tDriver.getSex() == 1 ? "男" : "女");
+                request.setMphone(tDriver.getPhone());
+                request.setEmail(tDriver.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;
+            }
+            tDriver.setEmpId(empId);
+            tDriver.setEntercode(tCompany.getEnterCode());
+            tDriver.setEnterId(Long.valueOf(tCompany.getEnterCode()));
+            tDriver.setEmpnew(empnew);
         }
         tDriverService.updateById(tDriver);
 
@@ -567,10 +617,6 @@
             accountChangeDetailMapper.insert(accountChangeDetail);
             tDriverService.updateById(tDriver1);
         }
-
-
-
-
         return SUCCESS_TIP;
     }
 
@@ -600,6 +646,13 @@
         if(count>0){
             return new SuccessTip(500,"该司机已存在!");
         }
+        if(ToolUtil.isEmpty(tDriver.getIdcard())){
+            return "身份证号不能为空";
+        }
+        Boolean b = UserUtil.idCardAuth(tDriver.getName(), tDriver.getIdcard());
+        if(!b){
+            return "司机姓名和身份证号不匹配";
+        }
         Object o = tDriverService.addOrUpdate(tDriver);
         if(Objects.nonNull(o)){
             return o;
@@ -611,6 +664,48 @@
         tDriver.setBalance(BigDecimal.ZERO);
         tDriver.setBackgroundBalance(BigDecimal.ZERO);
         tDriver.setCommission(BigDecimal.ZERO);
+        if(2 == tDriver.getApprovalStatus()){
+            ShiroUser user = shiroExtUtil.getUser();
+            User user2 = userService.selectById(user.getId());
+            Integer objectId = user.getObjectId();
+            TCompany tCompany = companyService.selectById(objectId);
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(tDriver.getPhone(), tCompany.getEnterCode());
+            Long empId = null;
+            Integer empnew = null;
+            if(null == userInfoByPhone || userInfoByPhone.size() == 0){
+                SaveStaffNodeRequest request = new SaveStaffNodeRequest();
+                request.setMobile(user2.getPhone());
+                request.setEntercode(tCompany.getEnterCode());
+                request.setEmpName(tDriver.getName());
+                request.setEmpNickname(tDriver.getName());
+                request.setLoginNo(tDriver.getPhone());
+                request.setEmpSex(tDriver.getSex() == 1 ? "男" : "女");
+                request.setMphone(tDriver.getPhone());
+                request.setEmail(tDriver.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;
+            }
+
+            TCompany tCompany1 = companyService.selectById(tDriver.getBranchOfficeId());
+            tDriver.setEmpId(empId);
+            tDriver.setEntercode(tCompany1.getEnterCode());
+            tDriver.setEnterId(Long.valueOf(tCompany1.getEnterCode()));
+            tDriver.setEmpnew(empnew);
+        }
+
+
         tDriverService.insert(tDriver);
         return SUCCESS_TIP;
     }
@@ -621,6 +716,24 @@
     @RequestMapping(value = "/delete")
     @ResponseBody
     public Object delete(@RequestParam Integer tDriverId) {
+        TDriver driver = tDriverService.selectById(tDriverId);
+
+        ShiroUser user = shiroExtUtil.getUser();
+        TCompany tCompany = companyService.selectById(user.getObjectId());
+        if (null != driver.getEmpId() && 1 == driver.getEmpnew()) {
+            //中台先删除司机
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(driver.getPhone(), tCompany.getEnterCode());
+            if (null != userInfoByPhone && 0 < userInfoByPhone.size() && 1 == driver.getEmpnew()) {
+                DeleteStafNodeRequest deleteStafNodeRequest = new DeleteStafNodeRequest();
+                deleteStafNodeRequest.setEmpId(driver.getEmpId());
+                deleteStafNodeRequest.setEntercode(tCompany.getEnterCode());
+                deleteStafNodeRequest.setMobile(tCompany.getPrincipalPhone());
+                ResultUtil resultUtil = EmployeeUtil.ecrmDeleteStafNode(deleteStafNodeRequest);
+                if(200 != resultUtil.getStatus()){
+                    return new ErrorTip(resultUtil.getStatus(), resultUtil.getMsg());
+                }
+            }
+        }
         tDriverService.deleteById(tDriverId);
         return SUCCESS_TIP;
     }
@@ -718,8 +831,13 @@
         if(Objects.nonNull(driver) && !tDriver.getId().equals(driver.getId())){
             return new SuccessTip(500,"该司机已存在!");
         }
-//        Object ocr = ocr("E:\\071bf986db0b00355c0ed190bbd3b16.png");
-//        System.err.println(ocr);
+        if(ToolUtil.isEmpty(tDriver.getIdcard())){
+            return "身份证号不能为空";
+        }
+        Boolean b = UserUtil.idCardAuth(tDriver.getName(), tDriver.getIdcard());
+        if(!b){
+            return "司机姓名和身份证号不匹配";
+        }
         Object o = tDriverService.addOrUpdate(tDriver);
         if(Objects.nonNull(o)){
             return o;
@@ -912,6 +1030,9 @@
             e.printStackTrace();
         }
     }
+
+
+
     @ApiOperation(value = "导出司机佣金列表",notes="导出司机佣金列表")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TSysSensitiveWordsController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TSysSensitiveWordsController.java
index e5b3281..39c5f52 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TSysSensitiveWordsController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TSysSensitiveWordsController.java
@@ -65,7 +65,7 @@
             endTime = timeArray[1];
         }
         Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
-        if (ShiroKit.getUser().getRoleType() != 1){
+        if (shiroExtUtil.getUser().getRoleType() != 1){
             page.setRecords(null);
         }else{
             page.setRecords(tSysSensitiveWordsService.getSensitiveWordList(page,beginTime,endTime,content));
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/UserActivityController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/UserActivityController.java
index 51d1c3e..cf67d56 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/UserActivityController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/UserActivityController.java
@@ -263,7 +263,7 @@
     @RequestMapping(value = "/blanceList")
     @ResponseBody
     public Object blanceList(String createTime,Integer activityId) {
-        ShiroUser user = ShiroKit.getUser();
+        ShiroUser user = shiroExtUtil.getUser();
         String beginTime = null;
         String endTime = null;
         if (SinataUtil.isNotEmpty(createTime)){
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/BlackboardController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/BlackboardController.java
index 3d198f7..0765ece 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/BlackboardController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/BlackboardController.java
@@ -72,14 +72,14 @@
     @RequestMapping("")
     public String blackboard(Model model,Integer type,Integer agentId,String dayDate,String yearDate,String monthDate) {
         //查询当前用户是否有"首页"菜单的权限
-        Integer id = ShiroKit.getUser().getId();
+        Integer id = shiroExtUtil.getUser().getId();
         User user = userService.selectById(id);
         Integer menuNum = userService.getMenuNumByRole(user.getRoleid());
         if (menuNum > 0){
             return "/home.html";
         } else {
             //查询登录次数
-//            int count = loginLogService.selectCount(new EntityWrapper<LoginLog>().eq("userid", ShiroKit.getUser().getId()));
+//            int count = loginLogService.selectCount(new EntityWrapper<LoginLog>().eq("userid", shiroExtUtil.getUser().getId()));
 //            model.addAttribute("loginNum", count);
 //
 //            Role role = roleService.selectById(user.getRoleid());
@@ -93,8 +93,8 @@
             if(Objects.isNull(type)){
                 type = 1;
             }
-            Integer objectId = ShiroKit.getUser().getObjectId();
-            Integer roleType = ShiroKit.getUser().getRoleType();
+            Integer objectId = shiroExtUtil.getUser().getObjectId();
+            Integer roleType = shiroExtUtil.getUser().getRoleType();
             if(roleType != 1){
                 if(roleType == 2 && Objects.nonNull(objectId)){
                     // 查询所有分公司
@@ -113,7 +113,7 @@
                 model.addAttribute("agentList",agentList);
             }
             model.addAttribute("txt",new SimpleDateFormat("yyyy年MM月dd日").format(new Date()) + DateUtil.getWeekDay(new Date()) + ",欢迎" +
-                    Objects.requireNonNull(ShiroKit.getUser()).getName() + "登录");
+                    Objects.requireNonNull(shiroExtUtil.getUser()).getName() + "登录");
             Map<String, Object> map = new HashMap<>();
             if(Objects.nonNull(agentId)){
                 // 统计分公司
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
index 33d3b0e..e50af65 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
@@ -1,5 +1,7 @@
 package com.stylefeng.guns.modular.system.controller.system;
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.google.code.kaptcha.Constants;
 import com.stylefeng.guns.core.base.controller.BaseController;
 import com.stylefeng.guns.core.common.constant.Const;
@@ -15,12 +17,19 @@
 import com.stylefeng.guns.core.util.KaptchaUtil;
 import com.stylefeng.guns.core.util.SinataUtil;
 import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.UserMapper;
+import com.stylefeng.guns.modular.system.model.Menu;
+import com.stylefeng.guns.modular.system.model.Relation;
 import com.stylefeng.guns.modular.system.model.User;
 import com.stylefeng.guns.modular.system.service.IMenuService;
+import com.stylefeng.guns.modular.system.service.IRelationService;
 import com.stylefeng.guns.modular.system.service.IUserService;
 import com.stylefeng.guns.modular.system.util.AESUtil;
 import com.stylefeng.guns.modular.system.util.AESUtils;
 import com.stylefeng.guns.modular.system.util.RedisUtil;
+import com.stylefeng.guns.modular.system.warpper.LoginUser;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
 import org.apache.shiro.authc.SimpleAuthenticationInfo;
 import org.apache.shiro.authc.UsernamePasswordToken;
 import org.apache.shiro.subject.Subject;
@@ -33,7 +42,10 @@
 import org.springframework.web.bind.annotation.RequestMethod;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.io.UnsupportedEncodingException;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static com.stylefeng.guns.core.support.HttpKit.getIp;
 
@@ -43,6 +55,7 @@
  * @author fengshuonan
  * @Date 2017年1月10日 下午8:25:24
  */
+@Slf4j
 @Controller
 public class LoginController extends BaseController {
 
@@ -54,7 +67,16 @@
     @Autowired
     private RedisUtil redisUtil;
 
+    @Autowired
+    private IShiro shiro;
+
+    @Autowired
+    private UserMapper userMapper;
+
     private Map<String, Integer> loginFailures = new HashMap<>();
+
+    @Autowired
+    private IRelationService relationService;
 
 
 
@@ -63,32 +85,32 @@
      * 跳转到主页
      */
     @RequestMapping(value = "/", method = RequestMethod.GET)
-    public String index(Model model) {
+    public String index(Model model, HttpServletRequest request) throws UnsupportedEncodingException {
+        //session中解析用户数据
+        HttpSession session = request.getSession();
+        String onconParam = edu.yale.its.tp.cas.client.Util.getOnconParam(session);
+        onconParam = new String(Base64.decodeBase64(onconParam), "UTF-8");
+        LoginUser loginUser = JSON.parseObject(onconParam, LoginUser.class);
+        log.info("session解析结果:" + JSON.toJSONString(loginUser));
         //获取菜单列表
-        List<Integer> roleList = ShiroKit.getUser().getRoleList();
-        if (roleList == null || roleList.size() == 0) {
-            ShiroKit.getSubject().logout();
-            model.addAttribute("tips", "该用户没有角色,无法登陆");
-            return "/login.html";
+        User user = userMapper.getByAccount(loginUser.getImUser());
+        if (null == user) {
+            log.info("用户不存在");
+            return null;
         }
+        ShiroUser shiroUser = shiro.shiroUser(user);
+        List<Integer> roleList = shiroUser.getRoleList();
+        if (roleList == null || roleList.size() == 0) {
+            roleList.add(0);
+        }
+
+        List<Relation> relations = relationService.selectList(new EntityWrapper<Relation>().in("roleid", roleList));
+        Set<Long> collect = relations.stream().map(Relation::getMenuid).collect(Collectors.toSet());
+        List<Menu> menuList = menuService.selectBatchIds(collect);
         List<MenuNode> menus = menuService.getMenusByRoleIds(roleList);
         List<MenuNode> titles = MenuNode.buildTitle(menus);
         titles = ApiMenuFilter.build(titles);
-
-
-        Integer id = ShiroKit.getUser().getId();
-        User user = userService.selectById(id);
-        if (SinataUtil.isEmpty(user)){
-            ShiroKit.getSubject().logout();
-            model.addAttribute("tips", "请重新登录");
-            return "/login.html";
-        }
-        //设置上级ID
-        if (SinataUtil.isNotEmpty(user.getObjectId())){
-            ShiroKit.getUser().setObjectId(user.getObjectId());
-        }
-        //设置角色
-        ShiroKit.getUser().setRoleType(user.getRoleType());
+        shiroUser.setMenuIds(menuList.stream().map(Menu::getUrl).collect(Collectors.toList()));
 
         model.addAttribute("titles", titles);
 
@@ -110,7 +132,7 @@
     @RequestMapping(value = "/login", method = RequestMethod.GET)
     public String login(Model model) {
         model.addAttribute("number",0);
-        if (ShiroKit.isAuthenticated() || ShiroKit.getUser() != null) {
+        if (ShiroKit.isAuthenticated() || shiroExtUtil.getUser() != null) {
             return REDIRECT + "/";
         } else {
             return "/login.html";
@@ -183,7 +205,7 @@
         // 登录成功,错误次数值改0
         loginFailures.put(username, 0);
 
-        ShiroUser shiroUser = ShiroKit.getUser();
+        ShiroUser shiroUser = shiroExtUtil.getUser();
         super.getSession().setAttribute("shiroUser", shiroUser);
         super.getSession().setAttribute("username", shiroUser.getAccount());
 
@@ -198,9 +220,6 @@
      */
     @RequestMapping(value = "/logout", method = RequestMethod.GET)
     public String logOut() {
-        LogManager.me().executeLog(LogTaskFactory.exitLog(ShiroKit.getUser().getId(), getIp()));
-        ShiroKit.getSubject().logout();
-        deleteAllCookie();
-        return REDIRECT + "/login";
+        return REDIRECT + "/";
     }
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
index fbf60a1..d109ffc 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
@@ -5,7 +5,9 @@
 import com.heredata.hos.model.bucket.Bucket;
 import com.stylefeng.guns.config.properties.GunsProperties;
 import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.base.tips.ErrorTip;
 import com.stylefeng.guns.core.base.tips.Tip;
+import com.stylefeng.guns.core.beetl.ShiroExtUtil;
 import com.stylefeng.guns.core.common.annotion.BussinessLog;
 import com.stylefeng.guns.core.common.annotion.Permission;
 import com.stylefeng.guns.core.common.constant.Const;
@@ -33,9 +35,16 @@
 import com.stylefeng.guns.modular.system.service.*;
 import com.stylefeng.guns.modular.system.transfer.UserDto;
 import com.stylefeng.guns.modular.system.util.OssUploadUtil;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
 import com.stylefeng.guns.modular.system.util.huawei.OBSUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.EmployeeUtil;
 import com.stylefeng.guns.modular.system.util.qianyuntong.NCOSSUtil;
 import com.stylefeng.guns.modular.system.util.qianyuntong.QianYunTongConfig;
+import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.DeleteStafNodeRequest;
+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.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -80,6 +89,12 @@
     
     @Autowired
     private QianYunTongConfig qianYunTongConfig;
+
+    @Autowired
+    private ITCompanyService companyService;
+
+    @Autowired
+    private ShiroExtUtil shiroExtUtil;
 
 
     /**
@@ -137,7 +152,7 @@
      */
     @RequestMapping("/user_info")
     public String userInfo(Model model) {
-        Integer userId = ShiroKit.getUser().getId();
+        Integer userId = shiroExtUtil.getUser().getId();
         if (ToolUtil.isEmpty(userId)) {
             throw new GunsException(BizExceptionEnum.REQUEST_NULL);
         }
@@ -166,7 +181,7 @@
         if (!newPwd.equals(rePwd)) {
             throw new GunsException(BizExceptionEnum.TWO_PWD_NOT_MATCH);
         }
-        Integer userId = ShiroKit.getUser().getId();
+        Integer userId = shiroExtUtil.getUser().getId();
         User user = userService.selectById(userId);
         String oldMd5 = ShiroKit.md5(oldPwd, user.getSalt());
         if (user.getPassword().equals(oldMd5)) {
@@ -200,8 +215,8 @@
             page.setRecords(userService.getUserListPage(page,null, name, beginTime, endTime, deptid));
             return super.packForBT(page);
         } else {
-            Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
-            Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
+            Integer objectId = Objects.requireNonNull(shiroExtUtil.getUser()).getObjectId();
+            Integer roleType = Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType();
 
             if(roleType == 3){
                 // 查询下级分公司账号
@@ -243,12 +258,44 @@
         if (result.hasErrors()) {
             throw new GunsException(BizExceptionEnum.REQUEST_NULL);
         }
-
         // 判断账号是否重复
         User theUser = userService.getByAccount(user.getAccount());
         if (theUser != null) {
             throw new GunsException(BizExceptionEnum.USER_ALREADY_REG);
         }
+
+        ShiroUser user1 = shiroExtUtil.getUser();
+        User user2 = userService.selectById(user1.getId());
+        TCompany tCompany = companyService.selectById(user2.getObjectId());
+        List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(user.getPhone(), tCompany.getEnterCode());
+        Long empId = null;
+        Integer empnew = null;
+        if(null == userInfoByPhone || userInfoByPhone.size() == 0){
+            SaveStaffNodeRequest request1 = new SaveStaffNodeRequest();
+            request1.setMobile(user2.getPhone());
+            request1.setEntercode(tCompany.getEnterCode());
+            request1.setEmpName(user.getName());
+            request1.setEmpNickname(user.getName());
+            request1.setLoginNo(user.getAccount());
+            request1.setEmpSex(user.getSex() == 1 ? "男" : "女");
+            request1.setMphone(user.getPhone());
+            request1.setEmail(user.getPhone() + "@qyt.com");
+            request1.setDeptId(0);
+            request1.setPositionId(1);
+            request1.setSuperLevel(0);
+            request1.setHideMobile(0);
+            ResultUtil<SaveStaffNode> resultUtil = EmployeeUtil.saveStaffNode(request1);
+            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;
+        }
+
 
         // 完善账号信息
         user.setSalt(ShiroKit.getRandomSalt(5));
@@ -257,10 +304,13 @@
         user.setCreatetime(new Date());
 
         User objectUser = UserFactory.createUser(user);
-        ShiroUser user1 = ShiroKit.getUser();
         objectUser.setRoleType(user1.getRoleType());
         objectUser.setObjectId(user1.getObjectId());
         objectUser.setPassWordUpdate(new Date());
+        objectUser.setEnterId(empId);
+        objectUser.setEmpnew(empnew);
+        objectUser.setEntercode(tCompany.getEnterCode());
+        objectUser.setEnterId(Long.valueOf(tCompany.getEnterCode()));
         this.userService.insert(objectUser);
 
         return SUCCESS_TIP;
@@ -279,15 +329,49 @@
             throw new GunsException(BizExceptionEnum.REQUEST_NULL);
         }
 
-
         User oldUser = userService.selectById(user.getId());
-
+        ShiroUser user1 = shiroExtUtil.getUser();
+        User user2 = userService.selectById(user1.getId());
+        TCompany tCompany = companyService.selectById(user2.getObjectId());
+        //调用中台接口
+        Long empId = null;
+        Integer empnew = null;
+        List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(oldUser.getPhone(), tCompany.getEnterCode());
+        if(null == userInfoByPhone || userInfoByPhone.size() == 0){
+            SaveStaffNodeRequest request1 = new SaveStaffNodeRequest();
+            request1.setMobile(user2.getPhone());
+            request1.setEntercode(tCompany.getEnterCode());
+            request1.setEmpName(user.getName());
+            request1.setEmpNickname(user.getName());
+            request1.setLoginNo(user.getAccount());
+            request1.setEmpSex(user.getSex() == 1 ? "男" : "女");
+            request1.setMphone(user.getPhone());
+            request1.setEmail(user.getPhone() + "@qyt.com");
+            request1.setDeptId(0);
+            request1.setPositionId(1);
+            request1.setSuperLevel(0);
+            request1.setHideMobile(0);
+            ResultUtil<SaveStaffNode> resultUtil = EmployeeUtil.saveStaffNode(request1);
+            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;
+        }
+        oldUser.setEmpId(empId);
+        oldUser.setEntercode(tCompany.getEnterCode());
+        oldUser.setEnterId(Long.valueOf(tCompany.getEnterCode()));
+        oldUser.setEmpnew(empnew);
         if (ShiroKit.hasRole(Const.ADMIN_NAME)) {
             this.userService.updateById(UserFactory.editUser(user, oldUser));
             return SUCCESS_TIP;
         } else {
             assertAuth(user.getId());
-            ShiroUser shiroUser = ShiroKit.getUser();
+            ShiroUser shiroUser = shiroExtUtil.getUser();
             if (shiroUser.getId().equals(user.getId())) {
                 this.userService.updateById(UserFactory.editUser(user, oldUser));
                 return SUCCESS_TIP;
@@ -312,7 +396,24 @@
         if (userId.equals(Const.ADMIN_ID)) {
             throw new GunsException(BizExceptionEnum.CANT_DELETE_ADMIN);
         }
-
+        User user = userService.selectById(userId);
+        ShiroUser user1 = shiroExtUtil.getUser();
+        User user2 = userService.selectById(user1.getId());
+        TCompany tCompany = companyService.selectById(user2.getObjectId());
+        //调用中台接口
+        if(1 == user.getEmpnew()){
+            List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(user.getPhone(), tCompany.getEnterCode());
+            if (null != userInfoByPhone && 0 < userInfoByPhone.size() && 1 == user.getEmpnew()) {
+                DeleteStafNodeRequest request1 = new DeleteStafNodeRequest();
+                request1.setEmpId(user.getEnterId());
+                request1.setMobile(tCompany.getPrincipalPhone());
+                request1.setEntercode(tCompany.getEnterCode());
+                ResultUtil resultUtil = EmployeeUtil.ecrmDeleteStafNode(request1);
+                if(200 != resultUtil.getStatus()){
+                    return new ErrorTip(resultUtil.getStatus(), resultUtil.getMsg());
+                }
+            }
+        }
 
         assertAuth(userId);
         this.userService.setStatus(userId, ManagerStatus.DELETED.getCode());
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java
index e845f33..dff203b 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/taxi/TOrderTaxiController.java
@@ -126,7 +126,7 @@
             endTime = timeArray[1];
         }
         Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
-        page.setRecords(tOrderTaxiService.getTaxiOrderList(page,beginTime,endTime,ShiroKit.getUser().getRoleType(),ShiroKit.getUser().getObjectId(),orderNum,orderSource,userName,userPhone,passengers,passengersPhone,driver,state));
+        page.setRecords(tOrderTaxiService.getTaxiOrderList(page,beginTime,endTime,shiroExtUtil.getUser().getRoleType(),shiroExtUtil.getUser().getObjectId(),orderNum,orderSource,userName,userPhone,passengers,passengersPhone,driver,state));
         return super.packForBT(page);
     }
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TCompany.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TCompany.java
index fb97a7c..89db5ce 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TCompany.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TCompany.java
@@ -241,6 +241,14 @@
     private String idCardPositive;
     //身份证反面
     private String idCardReverse;
+    /**
+     * 中台企业编号
+     */
+    private String enterCode;
+    /**
+     * 中台新增标识(0=否,1=是)
+     */
+    private Integer enterNew;
 
     public String getIdCardPositive() {
         return idCardPositive;
@@ -674,6 +682,22 @@
         this.detailAddress = detailAddress;
     }
 
+    public String getEnterCode() {
+        return enterCode;
+    }
+
+    public void setEnterCode(String enterCode) {
+        this.enterCode = enterCode;
+    }
+
+    public Integer getEnterNew() {
+        return enterNew;
+    }
+
+    public void setEnterNew(Integer enterNew) {
+        this.enterNew = enterNew;
+    }
+
     @Override
     protected Serializable pkVal() {
         return this.id;
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java
index 4886b05..8009c67 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java
@@ -207,6 +207,26 @@
     @TableField(exist = false)
     @ApiModelProperty(value = "邀请人电话")
     private String inviterPhone;
+    /**
+     * 中台员工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 BigDecimal getCouponBalance() {
@@ -574,6 +594,63 @@
     public void setOnlineTime(Long onlineTime) {
         this.onlineTime = onlineTime;
     }
+
+    public String getMerchantNumber() {
+        return merchantNumber;
+    }
+
+    public void setMerchantNumber(String merchantNumber) {
+        this.merchantNumber = merchantNumber;
+    }
+
+    public Integer getOpenOrderQRCode() {
+        return openOrderQRCode;
+    }
+
+    public void setOpenOrderQRCode(Integer openOrderQRCode) {
+        this.openOrderQRCode = openOrderQRCode;
+    }
+
+    public Integer getCheckServer() {
+        return checkServer;
+    }
+
+    public void setCheckServer(Integer checkServer) {
+        this.checkServer = checkServer;
+    }
+
+    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/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TUser.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TUser.java
index 78249f9..968f8f0 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TUser.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TUser.java
@@ -1,5 +1,6 @@
 package com.stylefeng.guns.modular.system.model;
 
+import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.enums.IdType;
 import java.math.BigDecimal;
 import java.util.Date;
@@ -126,6 +127,11 @@
     private Integer insertUser;
     private Date updateTime;
     private Integer updateUser;
+    /**
+     * 中台用户ID
+     */
+    @TableField("onconUUID")
+    private String onconUUID;
 
 
     public Integer getId() {
@@ -360,6 +366,14 @@
         this.updateUser = updateUser;
     }
 
+    public String getOnconUUID() {
+        return onconUUID;
+    }
+
+    public void setOnconUUID(String onconUUID) {
+        this.onconUUID = onconUUID;
+    }
+
     @Override
     protected Serializable pkVal() {
         return this.id;
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java
index 58a9ed9..0e287d7 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/User.java
@@ -99,6 +99,26 @@
 	 */
 	@TableField(value = "object_id")
 	private Integer objectId;
+	/**
+	 * 中台员工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 getRoleType() {
 		return roleType;
@@ -244,6 +264,38 @@
 		this.version = version;
 	}
 
+	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/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyFundFlowServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyFundFlowServiceImpl.java
index 356f5b4..d20130c 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyFundFlowServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyFundFlowServiceImpl.java
@@ -27,11 +27,11 @@
      */
     @Override
     public List<Map<String, Object>> queryCompanyFundFlow(Page<Map<String, Object>> page, Integer type, String time) {
-        Integer roleType = ShiroKit.getUser().getRoleType();
+        Integer roleType = shiroExtUtil.getUser().getRoleType();
         if(roleType == 3){
             roleType = 2;
         }
-        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer objectId = shiroExtUtil.getUser().getObjectId();
         String start = "";
         String end = "";
         if(ToolUtil.isNotEmpty(time)){
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverActivityServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverActivityServiceImpl.java
index 06d4769..7bb3100 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverActivityServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverActivityServiceImpl.java
@@ -58,13 +58,13 @@
             String[] timeArray = startTime.split(" - ");
             Date startTimes = DateUtil.getDate_str3(timeArray[0]);
             Date endTimes = DateUtil.getDate_str3(timeArray[1]);
-            ShiroUser user = ShiroKit.getUser();
+            ShiroUser user = shiroExtUtil.getUser();
             Date nowDay = new Date();
             //添加活动
             DriverActivity driverActivity = new DriverActivity();
             driverActivity.setInsertTime(nowDay);
-            driverActivity.setCompanyId(ShiroKit.getUser().getObjectId());
-            driverActivity.setCompanyType(ShiroKit.getUser().getRoleType());
+            driverActivity.setCompanyId(shiroExtUtil.getUser().getObjectId());
+            driverActivity.setCompanyType(shiroExtUtil.getUser().getRoleType());
             driverActivity.setStatus(driverActivity.getCompanyType()==1?3:1);
             driverActivity.setName(num1);
             driverActivity.setStartTime(startTimes);
@@ -139,14 +139,14 @@
             String[] timeArray = startTime.split(" - ");
             Date startTimes = DateUtil.getDate_str3(timeArray[0]);
             Date endTimes = DateUtil.getDate_str3(timeArray[1]);
-            ShiroUser user = ShiroKit.getUser();
+            ShiroUser user = shiroExtUtil.getUser();
 
             Date nowDay = new Date();
             //添加活动
             DriverActivity driverActivity = new DriverActivity();
             driverActivity.setId(id);
-            driverActivity.setCompanyId(ShiroKit.getUser().getObjectId());
-            driverActivity.setCompanyType(ShiroKit.getUser().getRoleType());
+            driverActivity.setCompanyId(shiroExtUtil.getUser().getObjectId());
+            driverActivity.setCompanyType(shiroExtUtil.getUser().getRoleType());
             driverActivity.setStatus(driverActivity.getCompanyType()==1?3:1);
             driverActivity.setName(num1);
             driverActivity.setStartTime(startTimes);
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java
index f0fbe97..6693c08 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TAgentServiceImpl.java
@@ -85,8 +85,8 @@
             wrapper.between("createTime",startTime,endTime);
         }
         // 判断是否为代理商
-        if(Objects.requireNonNull(ShiroKit.getUser()).getRoleType() == 3){
-            wrapper.eq("id",ShiroKit.getUser().getObjectId());
+        if(Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType() == 3){
+            wrapper.eq("id",shiroExtUtil.getUser().getObjectId());
         }
         // 状态
         if(Objects.nonNull(status)){
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBillServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBillServiceImpl.java
index 2aec94b..31c686b 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBillServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBillServiceImpl.java
@@ -66,8 +66,8 @@
             startTime = split[0]+" 00:00:00";
             endTime = split[1] + " 23:59:59";
         }
-        Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
-        Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
+        Integer roleType = Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType();
+        Integer objectId = Objects.requireNonNull(shiroExtUtil.getUser()).getObjectId();
         return tBillMapper.getPageList(startTime, endTime, addresseePhone,state,billType,billHeaderType,roleType,objectId);
     }
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java
index b89f6ad..51136f0 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBranchOfficeServiceImpl.java
@@ -138,8 +138,8 @@
         wrapper.ne("status", StatusEnum.DELETE.getCode());
         wrapper.orderBy("createTime",false);
         // 判断代理商 分公司
-        Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
-        Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
+        Integer roleType = Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType();
+        Integer objectId = Objects.requireNonNull(shiroExtUtil.getUser()).getObjectId();
         if(2 == roleType){
             // 分公司
             wrapper.eq("id",objectId);
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCancelOrderServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCancelOrderServiceImpl.java
index 9366c42..bda2755 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCancelOrderServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCancelOrderServiceImpl.java
@@ -42,8 +42,8 @@
             startTime = split[0];
             endTime = split[1];
         }
-        Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
-        Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
+        Integer roleType = Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType();
+        Integer objectId = Objects.requireNonNull(shiroExtUtil.getUser()).getObjectId();
         return tCancelOrderMapper.getCancelOrderList(startTime,endTime,code,source,userName,userPhone,state,driverName,roleType,objectId);
     }
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCheckCarActivityServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCheckCarActivityServiceImpl.java
index 81c2b8e..3af4892 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCheckCarActivityServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCheckCarActivityServiceImpl.java
@@ -35,7 +35,7 @@
     
     @Override
     public Page<TCheckCarActivity> getOrderList(String createTime, String branchOfficeName, String name, String activityAreaCode, Integer status) {
-        ShiroUser user = ShiroKit.getUser();
+        ShiroUser user = shiroExtUtil.getUser();
         String beginTime = null;
         String endTime = null;
         if (SinataUtil.isNotEmpty(createTime)){
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCheckCarExplainServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCheckCarExplainServiceImpl.java
index 3197667..0db73a5 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCheckCarExplainServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TCheckCarExplainServiceImpl.java
@@ -22,7 +22,7 @@
         if (ShiroKit.isAdmin()) {
             tCheckCarExplain.setBranchOfficeId(-1);
         } else {
-            tCheckCarExplain.setBranchOfficeId(ShiroKit.getUser().getObjectId());
+            tCheckCarExplain.setBranchOfficeId(shiroExtUtil.getUser().getObjectId());
         }
         if (tCheckCarExplain.getId() == null) {
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TComplaintServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TComplaintServiceImpl.java
index bc26094..75d322b 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TComplaintServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TComplaintServiceImpl.java
@@ -39,8 +39,8 @@
             startTime = split[0] + " 00:00:00";
             endTime = split[1] + " 23:59:59";
         }
-        Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
-        Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
+        Integer roleType = Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType();
+        Integer objectId = Objects.requireNonNull(shiroExtUtil.getUser()).getObjectId();
         return tComplaintMapper.getPageList(startTime,endTime,userName,userPhone,driverPhone,state,roleType,objectId);
     }
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java
index 421ac17..4b16590 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverServiceImpl.java
@@ -104,13 +104,13 @@
         }
         wrapper.orderBy(true,"approvalStatus");
         // 判断是否为代理商或者分公司
-        if(Objects.requireNonNull(ShiroKit.getUser()).getRoleType() == 2){
+        if(Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType() == 2){
             // 分公司
-            wrapper.eq("branchOfficeId",ShiroKit.getUser().getObjectId());
+            wrapper.eq("branchOfficeId",shiroExtUtil.getUser().getObjectId());
         }
-        if(Objects.requireNonNull(ShiroKit.getUser()).getRoleType() == 3){
+        if(Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType() == 3){
             // 代理商
-            wrapper.eq("agentId",ShiroKit.getUser().getObjectId());
+            wrapper.eq("agentId",shiroExtUtil.getUser().getObjectId());
         }
         return wrapper;
     }
@@ -391,13 +391,13 @@
         }
         wrapper.orderBy(true,"approvalStatus");
         // 判断是否为代理商或者分公司
-        if(Objects.requireNonNull(ShiroKit.getUser()).getRoleType() == 2){
+        if(Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType() == 2){
             // 分公司
-            wrapper.eq("branchOfficeId",ShiroKit.getUser().getObjectId());
+            wrapper.eq("branchOfficeId",shiroExtUtil.getUser().getObjectId());
         }
-        if(Objects.requireNonNull(ShiroKit.getUser()).getRoleType() == 3){
+        if(Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType() == 3){
             // 代理商
-            wrapper.eq("agentId",ShiroKit.getUser().getObjectId());
+            wrapper.eq("agentId",shiroExtUtil.getUser().getObjectId());
         }
         return wrapper;
     }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TEvaluateServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TEvaluateServiceImpl.java
index d49a1f5..7db79b0 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TEvaluateServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TEvaluateServiceImpl.java
@@ -50,8 +50,8 @@
             endTime = split[1] + " 23:59:59";
         }
         List<TEvaluateResp> list = tEvaluateMapper.selectPageList(startTime, endTime, userName, driverName, orderType, score);
-        Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
-        Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
+        Integer roleType = Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType();
+        Integer objectId = Objects.requireNonNull(shiroExtUtil.getUser()).getObjectId();
         if(3 == roleType){
             list = list.stream().filter(tEvaluate -> tEvaluate.getAgentId().equals(objectId)).collect(Collectors.toList());
         }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderCheckServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderCheckServiceImpl.java
index a1100fc..8c9b9d3 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderCheckServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderCheckServiceImpl.java
@@ -98,7 +98,7 @@
     public Page<TOrderCheck> getOrderCheckList(String createTime, String code, Integer source, String userName, String userPhone, Integer state, String driverName) {
         //获取当前登录用户身份
         boolean admin = ShiroKit.isAdmin();
-        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer objectId = shiroExtUtil.getUser().getObjectId();
         String startTime = null;
         String endTime = null;
         // 开始,结束时间
@@ -191,7 +191,7 @@
         Page<DriverDispatchInfoResp> page = new PageFactory<DriverDispatchInfoResp>().defaultPage();
         //获取当前登录信息
         boolean admin = ShiroKit.isAdmin();
-        Integer branchOfficeId  = admin ? null : ShiroKit.getUser().getObjectId();
+        Integer branchOfficeId  = admin ? null : shiroExtUtil.getUser().getObjectId();
         // 查询有车检服务权限的司机列表(支持搜索)
         List<DriverDispatchInfoResp> driverList = tDriverMapper.queryCheckServiceDriversWithSearch(page,
                 1, // checkServer = 1 (有车检服务权限)
@@ -244,8 +244,8 @@
         TOrderCheck updateOrder = new TOrderCheck();
         updateOrder.setId(orderId);
         updateOrder.setState(OrderStateEnum.PENDING_ORDER.getCode()); // 设置为待接单状态
-        updateOrder.setOperatorId(ShiroKit.getUser().getId());
-        updateOrder.setOperatorName(ShiroKit.getUser().getName());
+        updateOrder.setOperatorId(shiroExtUtil.getUser().getId());
+        updateOrder.setOperatorName(shiroExtUtil.getUser().getName());
         updateOrder.setDispatchTime(new Date());
         this.updateById(updateOrder);
     }
@@ -395,7 +395,7 @@
             // 设置默认状态(正常)
             order.setStatus(1);
             //设置分公司id
-            order.setBranchOfficeId(ShiroKit.getUser().getObjectId());
+            order.setBranchOfficeId(shiroExtUtil.getUser().getObjectId());
             //处理费用
             handleOrderPrice(order.getBranchOfficeId(), order);
             // 保存订单
@@ -438,7 +438,7 @@
                                                  String userName, String userPhone, Integer state, String driverName) {
         //获取当前登录用户身份
         boolean admin = ShiroKit.isAdmin();
-        Integer objectId = ShiroKit.getUser().getObjectId();
+        Integer objectId = shiroExtUtil.getUser().getObjectId();
         String startTime = null;
         String endTime = null;
         // 开始,结束时间
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
index 54bb372..b0d745c 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
@@ -63,8 +63,8 @@
             startTime = split[0] + " 00:00:00";
             endTime = split[1] + " 23:59:59";
         }
-        Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
-        Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
+        Integer roleType = Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType();
+        Integer objectId = Objects.requireNonNull(shiroExtUtil.getUser()).getObjectId();
         return tOrderMapper.getOrderList(startTime,endTime,code,source,userName,userPhone,state,driverName,isException,roleType,objectId);
     }
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRechargeRecordServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRechargeRecordServiceImpl.java
index 9fae351..7cd576a 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRechargeRecordServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRechargeRecordServiceImpl.java
@@ -49,8 +49,8 @@
             startTime = split[0] + " 00:00:00";
             endTime = split[1] + " 23:59:59";
         }
-        Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
-        Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
+        Integer roleType = Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType();
+        Integer objectId = Objects.requireNonNull(shiroExtUtil.getUser()).getObjectId();
         if(Objects.nonNull(branchOfficeId)){
             roleType = 2;
             objectId = branchOfficeId;
@@ -87,8 +87,8 @@
             startTime = split[0] + " 00:00:00";
             endTime = split[1] + " 23:59:59";
         }
-        Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
-        Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
+        Integer roleType = Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType();
+        Integer objectId = Objects.requireNonNull(shiroExtUtil.getUser()).getObjectId();
         if(Objects.nonNull(branchOfficeId)){
             roleType = 2;
             objectId = branchOfficeId;
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRevenueServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRevenueServiceImpl.java
index 63e961a..cb43106 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRevenueServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TRevenueServiceImpl.java
@@ -57,8 +57,8 @@
             startTime = split[0] + " 00:00:00";
             endTime = split[1] + " 23:59:59";
         }
-        Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
-        Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
+        Integer roleType = Objects.requireNonNull(shiroExtUtil.getUser()).getRoleType();
+        Integer objectId = Objects.requireNonNull(shiroExtUtil.getUser()).getObjectId();
         if(Objects.nonNull(branchOfficeId)){
             objectId = branchOfficeId;
             roleType = 2;
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityServiceImpl.java
index caf80bc..13be684 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserActivityServiceImpl.java
@@ -64,12 +64,12 @@
             String[] timeArray = startTime.split(" - ");
             Date startTimes = DateUtil.getDate_str3(timeArray[0]);
             Date endTimes = DateUtil.getDate_str3(timeArray[1]);
-            ShiroUser user = ShiroKit.getUser();
+            ShiroUser user = shiroExtUtil.getUser();
             Date nowDay = new Date();
             UserActivity userActivity = new UserActivity();
             userActivity.setInsertTime(nowDay);
-            userActivity.setCompanyId(ShiroKit.getUser().getObjectId());
-            userActivity.setCompanyType(ShiroKit.getUser().getRoleType());
+            userActivity.setCompanyId(shiroExtUtil.getUser().getObjectId());
+            userActivity.setCompanyType(shiroExtUtil.getUser().getRoleType());
             userActivity.setStatus(userActivity.getCompanyType()==1?3:1);
             userActivity.setName(name);
             userActivity.setStartTime(startTimes);
@@ -168,13 +168,13 @@
             String[] timeArray = startTime.split(" - ");
             Date startTimes = DateUtil.getDate_str3(timeArray[0]);
             Date endTimes = DateUtil.getDate_str3(timeArray[1]);
-            ShiroUser user = ShiroKit.getUser();
+            ShiroUser user = shiroExtUtil.getUser();
             Date nowDay = new Date();
             UserActivity userActivity = new UserActivity();
             userActivity.setId(id);
             userActivity.setInsertTime(nowDay);
-            userActivity.setCompanyId(ShiroKit.getUser().getObjectId());
-            userActivity.setCompanyType(ShiroKit.getUser().getRoleType());
+            userActivity.setCompanyId(shiroExtUtil.getUser().getObjectId());
+            userActivity.setCompanyType(shiroExtUtil.getUser().getRoleType());
             userActivity.setStatus(userActivity.getCompanyType()==1?3:1);
             userActivity.setName(name);
             userActivity.setStartTime(startTimes);
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
index aa42025..48de991 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
@@ -160,7 +160,7 @@
 	public QianYunTongConfig getQianYunTongConfig() {
 		if("dev".equals(activeProfile)){
 			this.appkey = "10001104";
-			this.privateKeyPath = "C:\\Users\\Admin\\Desktop\\qyt\\private_key_test.pem";
+			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
 			this.userName = "xiaofei";
 			this.status = "1";
 			this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java
index ab18fe9..bab630e 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java
@@ -17,6 +17,10 @@
 	 */
 	private String nickName;
 	/**
+	 * 社会信用代码
+	 */
+	private String uscc;
+	/**
 	 * 行业编码
 	 */
 	private String industry_code;
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java
index 581cbc1..9d3e3eb 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java
@@ -11,7 +11,7 @@
 	/**
 	 * 人员ID
 	 */
-	private Long empId;
+	private Integer empId;
 	/**
 	 * 操作人手机号
 	 */
@@ -51,7 +51,7 @@
 	/**
 	 * 员工所属部门ID多个部门英文; 分割
 	 */
-	private String deptIds;
+	private Integer deptId;
 	/**
 	 * 员工职务ID
 	 */
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTUserInfo.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTUserInfo.java
index b0a0231..2db06fd 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTUserInfo.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTUserInfo.java
@@ -10,35 +10,28 @@
 @Data
 public class QYTUserInfo {
 	/**
-	 * 员工名称
-	 */
-	private String empName;
-	/**
-	 * 企业编号
-	 */
-	private String enterNum;
-	/**
-	 * 节点路径
-	 */
-	private String nodePath;
-	/**
-	 * 员工昵称
-	 */
-	private String nickName;
-	/**
-	 * 员工编号
+	 * 用户id
 	 */
 	private Long empId;
 	/**
 	 * 手机号码
 	 */
-	private String mphone;
+	private String mobile;
 	/**
-	 * 员工在企业内部的编号
+	 * 用户昵称
 	 */
-	private String loginNo;
+	private String nickname;
 	/**
-	 * 部门ID
+	 * 小头像url
 	 */
-	private Long deptId;
+	private String photoUrl;
+	/**
+	 * 大头像url
+	 */
+	private String photoUrlBig;
+	/**
+	 * 企业名称
+	 */
+	private String enterName;
+	
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/StaffNodeInfo.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/StaffNodeInfo.java
index e0fcb39..84383c5 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/StaffNodeInfo.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/StaffNodeInfo.java
@@ -11,7 +11,7 @@
 	/**
 	 * 人员ID
 	 */
-	private Long empId;
+	private Integer empId;
 	/**
 	 * 主要号码
 	 */
diff --git a/management/guns-admin/src/main/resources/application-dev.yml b/management/guns-admin/src/main/resources/application-dev.yml
index 6791308..2685506 100644
--- a/management/guns-admin/src/main/resources/application-dev.yml
+++ b/management/guns-admin/src/main/resources/application-dev.yml
@@ -54,14 +54,11 @@
 
 spring:
   datasource:
-    url: jdbc:mysql://192.168.110.80:3306/qyt_driving?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
+    url: jdbc:mysql://127.0.0.1:3306/qyt_driving?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
     username: root
     password: 123456
     db-name: qyt_driving #用来搜集数据库的所有表
     filters: wall,mergeStat
-  data:
-    mongodb:
-      uri: mongodb://192.168.110.80:27017/test
 
 
 
@@ -69,7 +66,7 @@
 spring:
   data:
     mongodb:
-      uri: mongodb://192.168.110.80:27017/test
+      uri: mongodb://127.0.0.1:27017/test
 
 
 filePath: /usr/local/server/app/orderPostionFile/ #存储订单轨迹文件路径
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java
index 254421c..c172303 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java
@@ -15,6 +15,8 @@
 import com.supersavedriving.user.modular.system.util.GaoDe.model.District;
 import com.supersavedriving.user.modular.system.util.qianyuntong.QianYunTongConfig;
 import com.supersavedriving.user.modular.system.util.qianyuntong.SMSUtil;
+import com.supersavedriving.user.modular.system.util.qianyuntong.UserUtil;
+import com.supersavedriving.user.modular.system.util.qianyuntong.model.QYTUserInfo;
 import com.supersavedriving.user.modular.system.util.qianyuntong.model.SendSmsRequest;
 import com.supersavedriving.user.modular.system.util.weChat.WeChatUtil;
 import com.supersavedriving.user.modular.system.warpper.*;
@@ -30,10 +32,8 @@
 import javax.annotation.Resource;
 import java.io.File;
 import java.io.InputStream;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 用户控制器
@@ -150,7 +150,29 @@
     })
     public ResponseWarpper queryCaptcha(String phone){
         try {
-            AppUserUtil.queryCaptcha(phone);
+            Random random = new Random();
+            StringBuffer sb = new StringBuffer();
+            for (int i = 0; i < 4; i++) {
+                sb.append((int) (random.nextDouble() * 10));
+            }
+            String authCode = sb.toString();
+            //中台没有用户数据,需要走注册接口,验证码校验走中台
+            List<QYTUserInfo> infoByPhone = UserUtil.getUserInfoByPhone(phone);
+            if (null == infoByPhone || infoByPhone.isEmpty()) {
+                SMSUtil.sendVerifyCode(phone);
+            } else {
+                SendSmsRequest request = new SendSmsRequest();
+                request.setDestAddress(phone);
+                request.setTemplateId("TPL202410290001");
+                Map<String, String> templateParams = new HashMap<>();
+                templateParams.put("code", authCode);
+                request.setTemplateParams(templateParams);
+                request.setCode("code");
+                request.setSpId("T8d5hdfg");
+                SMSUtil.sendSms(request);
+                //发送验证码短信
+                redisUtil.setStrValue(phone, authCode, 5);//设置五分钟过期
+            }
             return ResponseWarpper.success();
         }catch (Exception e){
             e.printStackTrace();
@@ -246,6 +268,11 @@
                 return ResponseWarpper.success(ResultUtil.tokenErr());
             }
             AppUser appUser = appUserService.selectById(uid);
+            if(ToolUtil.isEmpty(appUser.getOnconUUID())){
+                String onconUUIDByMobile = UserUtil.getOnconUUIDByMobile(appUser.getPhone());
+                appUser.setOnconUUID(onconUUIDByMobile);
+                appUserService.updateById(appUser);
+            }
             UserInfoWarpper userInfoWarpper = new UserInfoWarpper();
             BeanUtils.copyProperties(appUser, userInfoWarpper);
 
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
index ce8d16a..bca299c 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
@@ -628,41 +628,6 @@
 
             //返回success字符串,否则支付系统将重复推送通知,间隔通知频率为0/30/60/90/120/150,单位:秒
             return "false";
-
-
-            // 验签
-//            boolean verify = RSASignature.validate(interfaceResponse.content(), interfaceResponse.getSign());
-//            if (verify) {//验签成功业务处理逻辑
-//                if("0000".equals(interfaceResponse.getCode())){
-//                    JSONObject jsonObject = JSON.parseObject(interfaceResponse.getResult());
-//                    Integer status = jsonObject.getInteger("status");
-//                    String orderId = jsonObject.getString("parameter1");
-//                    String parameter2 = jsonObject.getString("parameter2");
-//                    if(2 == status){
-//                        Order order = orderService.selectById(orderId);
-//                        AccountChangeDetail accountChangeDetail = accountChangeDetailService.selectById(parameter2);
-//                        Double m = new BigDecimal(accountChangeDetail.getOldData()).subtract(new BigDecimal(accountChangeDetail.getNewData())).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-//                        AppUser appUser1 = appUserService.selectById(order.getUserId());
-//                        appUser1.setAccountBalance(new BigDecimal(appUser1.getAccountBalance()).add(new BigDecimal(m)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
-//                        appUserService.updateById(appUser1);
-//                        accountChangeDetailService.deleteById(accountChangeDetail.getId());
-//                        System.err.println("支付失败");
-//                    }
-//                    if(1 == status){
-//                        String merOrderId = jsonObject.getString("merOrderId");
-//                        ResultUtil resultUtil = orderService.orderPayCallback(orderId, merOrderId);
-//                        if(resultUtil.getCode() == 10000){
-//                            response.setStatus(200);
-//                            PrintWriter out = response.getWriter();
-//                            out.print("OK");
-//                            out.flush();
-//                            out.close();
-//                        }
-//                    }
-//                }
-//            } else {//验签失败业务处理逻辑
-//                System.err.println("支付回调验签失败");
-//            }
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/AppUser.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/AppUser.java
index 38b1210..bc0edab 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/AppUser.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/AppUser.java
@@ -117,4 +117,9 @@
      */
     @TableField("taxiUserId")
     private Integer taxiUserId;
+    /**
+     * 中台用户ID
+     */
+    @TableField("onconUUID")
+    private String onconUUID;
 }
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Driver.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Driver.java
index 346a477..a88ec84 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Driver.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Driver.java
@@ -259,4 +259,19 @@
      */
     @TableField("referralCode")
     private String referralCode;
+    /**
+     * 中台员工ID
+     */
+    @TableField("empId")
+    private Long empId;
+    /**
+     * 中台员工所属企业ID
+     */
+    @TableField("enterId")
+    private Long enterId;
+    /**
+     * 中台员工所属企业编号
+     */
+    @TableField("entercode")
+    private String entercode;
 }
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java
index c9f4c61..5310f8b 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java
@@ -340,4 +340,14 @@
     @TableField("endTime")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date endTime;
+    /**
+     * 中台行程id
+     */
+    @TableField("travelId")
+    private String travelId;
+    /**
+     * 中台是否已创建订单(0=否,1=是)
+     */
+    @TableField("isCreated")
+    private Integer isCreated;
 }
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java
index 8002e42..da46130 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java
@@ -23,6 +23,11 @@
 import com.supersavedriving.user.modular.system.util.MallBook.model.QueryOrder;
 import com.supersavedriving.user.modular.system.util.MallBook.util.Transfer;
 import com.supersavedriving.user.modular.system.util.MallBook.util.TrhRequest;
+import com.supersavedriving.user.modular.system.util.qianyuntong.AESUtils;
+import com.supersavedriving.user.modular.system.util.qianyuntong.UserUtil;
+import com.supersavedriving.user.modular.system.util.qianyuntong.model.QYTUserInfo;
+import com.supersavedriving.user.modular.system.util.qianyuntong.model.RegisterViaMobile;
+import com.supersavedriving.user.modular.system.util.qianyuntong.model.RegisterViaMobileRequest;
 import com.supersavedriving.user.modular.system.util.weChat.WXCore;
 import com.supersavedriving.user.modular.system.util.weChat.WeChatUtil;
 import com.supersavedriving.user.modular.system.util.weChat.model.Code2Session;
@@ -268,6 +273,37 @@
             }
             String openid = code2Session.getOpenid();
             AppUser appUser = this.selectOne(new EntityWrapper<AppUser>().eq("phone", phone).ne("status", 3));
+
+            String nickName = null;
+            if (null == appUser) {
+                nickName = this.getDefaultName();
+            } else {
+                nickName = appUser.getNickname();
+            }
+            //调中台接口查询用户
+            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 ResultUtil.error(register.getDesc());
+                }
+                onconUUID = register.getOnconUUID();
+            } else {
+                boolean b = AppUserUtil.checkCaptcha(phone, code);
+                if (!b) {
+                    return ResultUtil.error("验证码无效");
+                }
+            }
+
+
             if(null == appUser){
                 appUser = new AppUser();
                 appUser.setNickname("亲爱的用户");
@@ -283,8 +319,11 @@
                     appUser.setInviterId(verificationCodeLogin.getInviterId());
                     appUser.setInviterType(verificationCodeLogin.getInviterType());
                 }
+                if(null != onconUUID){
+                    appUser.setOnconUUID(onconUUID);
+                }
                 //同步用户数据到打车系统
-                String s = AppUserUtil.addUser(phone, code, verificationCodeLogin.getAreaCode());
+                String s = AppUserUtil.addUser(phone, code, verificationCodeLogin.getAreaCode(), onconUUID);
                 if(ToolUtil.isEmpty(s)){
                     return ResultUtil.error("登录失败");
                 }
@@ -777,4 +816,14 @@
     public List<CouponsWarpper> queryMyCoupons(Integer uid, Integer state, Integer pageNum, Integer pageSize) throws Exception {
         return null;
     }
+
+
+    /**
+     * 获取默认名称
+     * @return
+     */
+    public String getDefaultName(){
+        int num = this.selectCount(new EntityWrapper<AppUser>().ne("status", 3)) + 1000001;
+        return "GRJY-DJ" + String.valueOf(num).substring(1);
+    }
 }
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
index 132dce8..bf878f9 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.supersavedriving.user.core.util.ToolUtil;
 import com.supersavedriving.user.modular.system.dao.OrderMapper;
+import com.supersavedriving.user.modular.system.dao.TCompanyMapper;
 import com.supersavedriving.user.modular.system.model.*;
 import com.supersavedriving.user.modular.system.service.*;
 import com.supersavedriving.user.modular.system.util.*;
@@ -16,6 +17,8 @@
 import com.supersavedriving.user.modular.system.util.MallBook.util.Transfer;
 import com.supersavedriving.user.modular.system.util.MallBook.util.TrhRequest;
 import com.supersavedriving.user.modular.system.util.mongodb.model.Location;
+import com.supersavedriving.user.modular.system.util.qianyuntong.OrderUtil;
+import com.supersavedriving.user.modular.system.util.qianyuntong.model.*;
 import com.supersavedriving.user.modular.system.warpper.*;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
@@ -37,8 +40,12 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -132,6 +139,9 @@
 
     @Value("${callbackPath}")
     private String callbackPath;//支付回调网关地址
+
+    @Autowired
+    private TCompanyMapper companyMapper;
 
 
 
@@ -521,11 +531,27 @@
                 appUserService.updateById(appUser);
             }
 
+
             List<Order> orderList = new ArrayList<>();
             for (Integer i = 0; i < travelOrder.getDriverNum(); i++) {
                 order.setId(null);
                 order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5));
                 boolean insert = this.insert(order);
+                if(null != order.getDriverId()){
+                    Driver driver = driverService.selectById(order.getDriverId());
+                    TCompany company = companyMapper.selectById(order.getDriverId());
+                    //调三方订单中心创建行程单
+                    CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
+                    request.setOrderNo("DJ" + order.getId());
+                    request.setCustomerId(appUser.getOnconUUID());
+                    request.setDriverId(driver.getEmpId().toString());
+                    request.setSupplierShopId(company.getEnterCode());
+                    request.setServiceType(2);
+                    String travelItinerary = OrderUtil.createTravelItinerary(request);
+                    order.setTravelId(travelItinerary);
+                    this.insertOrUpdate(order);
+                }
+
                 if(insert){
                     orderList.add(order);
                 }
@@ -842,13 +868,25 @@
         order.setState(301);
         this.updateById(order);
         redisUtil.delSetValue("orderService", order.getId().toString());
+
+        Driver driver = driverService.selectById(order.getDriverId());
+        if(null != order.getTravelId()){
+            //中台修改订单状态
+            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+            request.setOrderId(order.getTravelId());
+            request.setStatus(getState(order.getState()));
+            TCompany company = companyMapper.selectById(driver.getBranchOfficeId());
+            request.setDriverId(driver.getEmpId().toString());
+            request.setSupplierShopId(company.getEnterCode());
+            OrderUtil.modifyTravelItinerary(request);
+        }
+
         AppUser appUser = appUserService.selectById(uid);
         appUser.setCancelCount(appUser.getCancelCount() + 1);
         if(appUser.getCancelCount() >= 3){
             appUser.setIsException(2);
         }
         appUserService.updateById(appUser);
-        Driver driver = driverService.selectById(order.getDriverId());
         if(null != driver){
             driver.setServerStatus(1);
             driverService.updateById(driver);
@@ -864,6 +902,36 @@
         }
         redisUtil.setStrValue("cancelOrder", "true");
         return ResultUtil.success();
+    }
+
+
+
+    private Integer getState(Integer state){
+        switch (state){
+            case 101://待接单
+                return 1;
+            case 102://已接单
+                return 2;
+            case 103://前往预约点
+                return 3;
+            case 104://到达预约点
+                return 4;
+            case 105://开始服务
+                return 5;
+            case 106://到达目的地
+                return 6;
+            case 107://待支付
+                return 7;
+            case 108://待评价
+                return 8;
+            case 109://已完成
+                return 9;
+            case 201://转单中
+                return 11;
+            case 301://已取消
+                return 10;
+        }
+        return null;
     }
 
 
@@ -1100,16 +1168,16 @@
         }
         //开始支付操作
         if(orderPayment.getPayType() == 1){//微信支付
-            return weixinPay(order, appUser, orderPayment.getCouponId());
+            return weixinPay(order, appUser, orderPayment.getCouponId(), orderPayment.getPath(), orderPayment.getIp());
         }
         if(orderPayment.getPayType() == 2){//余额支付
             return balancePayment(order, appUser, orderPayment.getCouponId());
         }
 //        if(orderPayment.getPayType() == 3){//线下支付(由司机端操作)
 //        }
-        if(orderPayment.getPayType() == 4){//微信+余额
-            return weixinAndBalancePayment(order, appUser, orderPayment.getCouponId());
-        }
+//        if(orderPayment.getPayType() == 4){//微信+余额
+//            return weixinAndBalancePayment(order, appUser, orderPayment.getCouponId());
+//        }
         return ResultUtil.success();
     }
 
@@ -1123,100 +1191,100 @@
      * @return
      * @throws Exception
      */
-    public ResultUtil weixinPay(Order order, AppUser appUser, Integer couponId) throws Exception{
+    public ResultUtil weixinPay(Order order, AppUser appUser, Integer couponId, String path, String ip) throws Exception{
         Double payMoney = order.getPayMoney();
         order.setPayType(1);
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
-        String out_trade_no = sdf.format(new Date()) + order.getId();
+        ResultUtil resultUtil = ResultUtil.success(new Object());
+        Driver driver = driverService.selectById(order.getDriverId());
+        if(null == order.getIsCreated() || 0 == order.getIsCreated()){
+            //调用中台创建订单及拉起支付接口
+            TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData();
+            tradeOrderCreateData.setTreatShopId(driver.getEmpId().toString());
+            tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isCompensate\":\"0\",\"isPromote\":\"0\"}");
+            tradeOrderCreateData.setCharge(new BigDecimal(payMoney).setScale(2, RoundingMode.HALF_EVEN));
+            tradeOrderCreateData.setOrderNo("DJ" + order.getId());
+            tradeOrderCreateData.setCustomerId(appUser.getOnconUUID());
+            tradeOrderCreateData.setPartnerPayId(order.getTravelId());
+            tradeOrderCreateData.setTotalFee(Double.valueOf(payMoney * 100).intValue() + "");
+            tradeOrderCreateData.setOrderDesc("完成订单");
+            tradeOrderCreateData.setRetUrl(path);
+            tradeOrderCreateData.setClientIp(ip);
+            tradeOrderCreateData.setServiceType(3);
 
-//
-//        PaymentOrder paymentOrder = new PaymentOrder();
-//        paymentOrder.setBizOrderId(out_trade_no);
-//        paymentOrder.setAmount(new BigDecimal(payMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
-//        paymentOrder.setOrderName("代驾服务费");
-//        paymentOrder.setPayType("WX_MINI");
-//        paymentOrder.setTransferType("0");
-//        paymentOrder.setAsynSplitFlag("1");
-//        paymentOrder.setAppid(appletsAppid);
-//        paymentOrder.setOpenid(appUser.getOpenid());
-//        paymentOrder.setTerminalIp(InetAddress.getLocalHost().getHostAddress());
-//        List<PaymentOrderGood> goodsDetail = new ArrayList<>();
-//        PaymentOrderGood paymentOrderGood = new PaymentOrderGood();
-//        paymentOrderGood.setGoodsName("服务费");
-//        goodsDetail.add(paymentOrderGood);
-//        paymentOrder.setGoodsDetail(goodsDetail);
-//        paymentOrder.setFrontUrl(callbackPath + "/base/order/orderPayCallback");
-//        paymentOrder.setNotifyUrl(callbackPath + "/base/order/orderPayCallback");
-//        paymentOrder.setParameter1(order.getId().toString());
-//
-//        TrhRequest<PaymentOrder> request = new TrhRequest();
-//        InterfaceResponse execute = request.execute(paymentOrder, PaymentOrder.SERVICE_CODE);
-        return  MiniAppPay.pay(appUser.getOpenid(),new BigDecimal(payMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "","/base/order/orderPayCallback",order.getCode());
-//        return payMoneyUtil.weixinpay("服务费", String.valueOf(order.getId()),out_trade_no,new BigDecimal(payMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "","/base/order/orderPayCallback","APP");
+            List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+            GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+            goodsInfoRequest.setSubOpenId(appUser.getOpenid());
+            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());
+            }
+            order.setIsCreated(1);
+            order.setTravelId(tradeOrderCreate.getOrderInfo().getOrderId());
+            resultUtil = ResultUtil.success(payInfo.getData().getRedirectUrl());
+        }else{
+            //拉起支付
+            TradePayOff1Data tradePayOff1Data = new TradePayOff1Data();
+            tradePayOff1Data.setPartnerPayId(order.getTravelId());
+            tradePayOff1Data.setTotalFee(Double.valueOf(payMoney * 100).intValue() + "");
+            tradePayOff1Data.setRetUrl(path);
+            tradePayOff1Data.setClientIp(ip);
+            tradePayOff1Data.setOrderDesc("完成订单");
+            List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+            GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+            goodsInfoRequest.setSubOpenId(appUser.getOpenid());
+            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());
+            }
+            resultUtil = ResultUtil.success(payInfo.getData().getRedirectUrl());
+        }
+        this.updateById(order);
 
+        //创建定时任务查询订单支付状态
+        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);
+                    Order order1 = this.selectById(order.getId());
+                    if (order1.getState() != 107) {
+                        break;
+                    }
+                    GetTravelItineraryListRequest request = new GetTravelItineraryListRequest();
+                    request.setCustomerId(appUser.getOnconUUID());
+                    request.setOrderNo("DJ" + order1.getId());
+                    request.setDriverId(driver.getEmpId().toString());
+                    ListPage<List<TravelItinerary>> travelItineraryList = OrderUtil.getTravelItineraryList(request);
+                    TravelItinerary travelItinerary = travelItineraryList.getList().get(0);
+                    if(travelItinerary.getStatus() != 7 || Arrays.asList(3, 11).contains(travelItinerary.getOrderStatus())){
+                        GetPaymentInfoDataRequest getPaymentInfoDataRequest1 = new GetPaymentInfoDataRequest();
+                        getPaymentInfoDataRequest1.setPartnerPayId(order1.getTravelId());
+                        GetPaymentInfo getPaymentInfo1 = OrderUtil.paymentInfo(getPaymentInfoDataRequest1);
+                        orderPayCallback(order1.getId().toString(), getPaymentInfo1.getPayId());
+                        break;
+                    }
+                    Thread.sleep(wait);
+                    num++;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }finally {
+                threadPoolExecutor.shutdown();
+            }
 
+        });
 
-//
-//        if(!"0000".equals(execute.getCode())){
-//            return ResultUtil.error(execute.getMsg());
-//        }
-//        JSONObject jsonObject = JSON.parseObject(execute.getResult());
-//        String status = jsonObject.getString("status");
-//        if("2".equals(status)){
-//            return ResultUtil.error("失败");
-//        }
-//        String merOrderId = jsonObject.getString("merOrderId");
-//        String payCode = jsonObject.getString("payCode");
-//        this.updateById(order);
-
-//        if(ToolUtil.isNotEmpty(payCode)){
-//            new Thread(new Runnable() {
-//                @Override
-//                public void run() {
-//                    try {
-//                        int num = 1;
-//                        int wait = 0;
-//                        while (num <= 10){
-//                            int min = 5000;
-//                            wait += (min * num);
-//                            Order order1 = OrderServiceImpl.this.selectById(order.getId());
-//                            if(order1.getState() != 107){
-//                                return;
-//                            }
-//                            QueryOrder queryOrder = new QueryOrder();
-//                            queryOrder.setOriginalMerOrderId(merOrderId);
-//                            queryOrder.setQueryType("1");
-//                            TrhRequest<QueryOrder> request = new TrhRequest();
-//                            InterfaceResponse execute1 = request.execute(queryOrder, QueryOrder.SERVICE_CODE);
-//                            if("0000".equals(execute1.getCode())){
-//                                JSONObject jsonObject1 = JSON.parseObject(execute1.getResult());
-//                                String status1 = jsonObject1.getString("status");
-//                                if("0".equals(status1)){//待处理
-//                                    Thread.sleep(wait);
-//                                    num++;
-//                                }
-//                                if("1".equals(status1)){//成功
-//                                    String merOrderId = jsonObject1.getString("merOrderId");
-//                                    ResultUtil resultUtil = orderPayCallback(order1.getId().toString(), merOrderId);
-
-//                                    break;
-//                                }
-//                                if("2".equals(status1) || 10 == num){//失败
-//                                    break;
-//                                }
-//                            }else{
-//                                Thread.sleep(wait);
-//                                num++;
-//                            }
-//                        }
-//                    }catch (Exception e){
-//                        e.printStackTrace();
-//                    }
-//                }
-//            }).start();
-//        }
-
-//        return ResultUtil.success(payCode);
+        return resultUtil;
     }
 
 
@@ -1501,6 +1569,18 @@
         }
         order.setState(109);
         this.updateById(order);
+        Driver driver = driverService.selectById(order.getDriverId());
+        //中台修改订单状态
+        if(null != order.getTravelId()){
+            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+            request.setOrderId(order.getTravelId());
+            request.setStatus(getState(order.getState()));
+            TCompany company = companyMapper.selectById(driver.getBranchOfficeId());
+            request.setDriverId(driver.getEmpId().toString());
+            request.setSupplierShopId(company.getEnterCode());
+            OrderUtil.modifyTravelItinerary(request);
+        }
+
         Evaluate evaluate = new Evaluate();
         evaluate.setOrderId(orderId.intValue());
         evaluate.setCreateTime(new Date());
@@ -1509,7 +1589,6 @@
         evaluate.setStatus(1);
         evaluate.setUserId(uid);
         evaluateService.insert(evaluate);
-        Driver driver = driverService.selectById(order.getDriverId());
         driver.setScore(((null == driver.getScore() ? 0 : driver.getScore()) + score) / 2);
         if(score == 5){//司机积分奖励
             SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/AppUserUtil.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/AppUserUtil.java
index 4649170..8f6be83 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/AppUserUtil.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/AppUserUtil.java
@@ -61,11 +61,12 @@
 	 * @return
 	 * @throws Exception
 	 */
-	public static String addUser(String phone, String code, String areaCode) throws Exception{
+	public static String addUser(String phone, String code, String areaCode, String onconUUID) throws Exception{
 		HttpRequest post = HttpUtil.createPost(qytConfig.getChuxingUrl() + "/user-server/base/user/addAppUser");
 		post.form("phone", phone);
 		post.form("code", code);
 		post.form("areaCode", areaCode);
+		post.form("onconUUID", onconUUID);
 		HttpResponse execute = post.execute();
 		if(200 != execute.getStatus()){
 			log.error("打车系统-注册用户失败:{}", execute.body());
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/EmployeeUtil.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/EmployeeUtil.java
index f27aadf..55ff458 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/EmployeeUtil.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/EmployeeUtil.java
@@ -81,6 +81,11 @@
 		if (!"0".equals(retCode)) {
 			log.error("【企业增加员工】请求失败:" + result);
 			String retMsg = jsonObject.getString("retMsg");
+			if(retMsg.contains("员工昵称已存在")){
+				request.setEmpName(request.getEmpName() + Double.valueOf(Math.random() * 100).intValue());
+				request.setEmpNickname(request.getEmpName());
+				return saveStaffNode(request);
+			}
 			retMsg = retMsg.substring(retMsg.indexOf("{"));
 			jsonObject = JSON.parseObject(retMsg);
 			return ResultUtil.error("【企业增加员工】请求失败:" + jsonObject.getString("msg"));
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/OrderUtil.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/OrderUtil.java
index 44e9a2c..a0614f7 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/OrderUtil.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/OrderUtil.java
@@ -180,18 +180,23 @@
 	 * 拉起支付
 	 *
 	 * @param tradePayOff1Data
+	 * @param recoveryOrder
 	 * @return
 	 */
-	public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data) {
-		tradePayOff1Data.setPartnerId("5400004");
+	public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data, Integer recoveryOrder) {
+		tradePayOff1Data.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
 		tradePayOff1Data.setTimeout("72H");
 		tradePayOff1Data.setScene("TRAFFIC");
 		tradePayOff1Data.setCurrency("RMB");
 		tradePayOff1Data.setNeedLoginFlag("N");
 		tradePayOff1Data.setAccessMode("APP");
 		tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> {
-			goodsInfoRequest.setId("981100006005901");
-			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+			if(0 == recoveryOrder){
+				goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
+			}else{
+				goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "981100006228370" : "981100006005901");
+			}
+			goodsInfoRequest.setSubAppId(qianYunTongConfig.getAppId());
 			
 			goodsInfoRequest.setAreaInfo("520100");
 			goodsInfoRequest.setPayType("0");
@@ -200,7 +205,7 @@
 		
 		
 		TradeRequest request = new TradeRequest<TradePayOff1Data>();
-		request.setSceneId("1911676727023968256");
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954795404533583872" : "1911676727023968256");
 		request.setAppId(qianYunTongConfig.getAppkey());
 		request.setConfigVersion(1);
 		request.setRequestId(UUIDUtil.getRandomCode());
@@ -385,19 +390,23 @@
 	 * @param tradeOrderCreateData
 	 * @return
 	 */
-	public static TradeOrderCreate tradeOrderCreate1(TradeOrderCreateData tradeOrderCreateData) {
+	public static TradeOrderCreate tradeOrderCreate1(TradeOrderCreateData tradeOrderCreateData, Integer recoveryOrder) {
 		tradeOrderCreateData.setScene("TRAFFIC");
 		tradeOrderCreateData.setPartnerId("522700");
 		tradeOrderCreateData.setTimeout("72H");
 		tradeOrderCreateData.setOrderAppId("52270015");
 		tradeOrderCreateData.setChannelSource("GRJYCXWXXCX");
-		tradeOrderCreateData.setPayPartnerId("5400004");
+		tradeOrderCreateData.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
 		tradeOrderCreateData.setCurrency("RMB");
 		tradeOrderCreateData.setNeedLoginFlag("N");
 		tradeOrderCreateData.setAccessMode("APP");
 		tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> {
-			goodsInfoRequest.setId("981100006005901");
-			goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+			if(0 == recoveryOrder){
+				goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
+			}else{
+				goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "981100006228370" : "981100006005901");
+			}
+			goodsInfoRequest.setSubAppId(qianYunTongConfig.getAppId());
 			goodsInfoRequest.setAreaInfo("520100");
 			goodsInfoRequest.setPayType("0");
 			goodsInfoRequest.setBusinessType("10408");
@@ -405,7 +414,7 @@
 		
 		
 		TradeRequest request = new TradeRequest<TradeOrderCreateData>();
-		request.setSceneId("1945688132719169536");
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954793280550756352" : "1945688132719169536");
 		request.setAppId(qianYunTongConfig.getAppkey());
 		request.setConfigVersion(1);
 		request.setRequestId(UUIDUtil.getRandomCode());
@@ -457,7 +466,7 @@
 		createOrderRequest.setChannelSource("GRJYCXWXXCX");
 		
 		TradeRequest request = new TradeRequest<CreateOrderRequest>();
-		request.setSceneId("1948289607125864448");
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954792737421942784" : "1948289607125864448");
 		request.setAppId(qianYunTongConfig.getAppkey());
 		request.setConfigVersion(1);
 		request.setRequestId(UUIDUtil.getRandomCode());
@@ -503,7 +512,7 @@
 	 * @return
 	 */
 	public static PayInfo tradePayOff(TradePayOffData tradePayOffData) {
-		tradePayOffData.setPartnerId("5400005");
+		tradePayOffData.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401008" : "5400005");
 		tradePayOffData.setTimeout("72H");
 		tradePayOffData.setScene("TRAFFIC");
 		tradePayOffData.setCurrency("RMB");
@@ -528,20 +537,20 @@
 		tradePayOffData.setPaymentInfos(paymentInfoRequests);
 		List<GoodsInfo> goodsInfo = new ArrayList<>();
 		GoodsInfo goodsInfo1 = new GoodsInfo();
-		goodsInfo1.setMerchantCode("B00000905");
-		goodsInfo1.setCustId("CB0000004686");
-		goodsInfo1.setCustName("证联消费平台交易客户");
+		goodsInfo1.setMerchantCode("prod".equals(qianYunTongConfig.getActiveProfile()) ? "B00001404" : "B00000905");
+		goodsInfo1.setCustId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "CB0000004853" : "CB0000004686");
+		goodsInfo1.setCustName("prod".equals(qianYunTongConfig.getActiveProfile()) ? "黔南云码通数字产业运营有限公司" : "证联消费平台交易客户");
 		goodsInfo1.setBusinessType("10408");
-		goodsInfo1.setAgreementNo("00000000468618354161754464398681");
+		goodsInfo1.setAgreementNo("prod".equals(qianYunTongConfig.getActiveProfile()) ? "00000402485377063581755054680461" : "00000000468618354161754464398681");
 		goodsInfo1.setProfitSharing("1");
 		goodsInfo.add(goodsInfo1);
 		tradePayOffData.setGoodsInfo(goodsInfo);
 		
 		
 		TradeRequest request = new TradeRequest<TradePayOffData>();
-		request.setSceneId("1774717104844095488");
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954794605782913024" : "1774717104844095488");
 		request.setAppId(qianYunTongConfig.getAppkey());
-		request.setConfigVersion(2);
+		request.setConfigVersion("prod".equals(qianYunTongConfig.getActiveProfile()) ? 1 : 2);
 		request.setRequestId(UUIDUtil.getRandomCode());
 		request.setData(tradePayOffData);
 		//请求路径
@@ -586,7 +595,7 @@
 	 * @return
 	 */
 	public static GetPaymentInfo paymentInfo(GetPaymentInfoDataRequest getPaymentInfoDataRequest) {
-		getPaymentInfoDataRequest.setPartnerId("5400004");
+		getPaymentInfoDataRequest.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
 		
 		GetPaymentInfoRequest request = new GetPaymentInfoRequest();
 		request.setRequstType("POST");
@@ -644,7 +653,6 @@
 		request.setMhltiCenterAppId("52270015");
 		request.setPayType(4);
 		request.setPayChannel(6);
-		request.setIsCompensate(1);
 		//请求路径
 		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentOrder";
 		//私钥文件
@@ -677,6 +685,156 @@
 		OrderInfo orderInfo = jsonObject.getObject("busiResp", OrderInfo.class);
 		return orderInfo;
 	}
-	
-	
+
+
+
+	/**
+	 * 订单退款
+	 * @param request1
+	 * @return
+	 */
+	public static TradeOrderRefund tradeOrderRefund(TradeOrderRefundRequest request1) {
+		request1.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderRefund";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+		TradeRequest request = new TradeRequest<TradeOrderRefundRequest>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1968487381046722560" : "1726529285264269312");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion("prod".equals(qianYunTongConfig.getActiveProfile()) ? 1 : 6);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(request1);
+
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单退款】请求地址:" + url);
+		log.info("【订单退款】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单退款】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单退款】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单退款】失败:" + jsonObject.getString("resMsg"));
+		}
+		JSONObject refundInfo = jsonObject.getJSONObject("busiResp").getJSONObject("refundInfo");
+		String retCode = refundInfo.getString("retCode");
+		if(!"0".equals(retCode)){
+			log.error("【订单退款】失败:" + refundInfo.getString("retMsg"));
+			throw new RuntimeException("【订单退款】失败:" + refundInfo.getString("retMsg"));
+		}
+		JSONObject object = refundInfo.getJSONObject("object");
+		String retCode1 = object.getString("retCode");
+		if(!"000000".equals(retCode1)){
+			log.error("【订单退款】失败:" + object.getString("retMsg"));
+			throw new RuntimeException("【订单退款】失败:" + object.getString("retMsg"));
+		}
+
+		TradeOrderRefund tradeOrderRefund = object.getObject("data", TradeOrderRefund.class);
+		return tradeOrderRefund;
+	}
+
+
+	/**
+	 * 订单退款通知
+	 * @param request
+	 */
+	public static void orderRefundNotice(OrderRefundNoticeRequest request) {
+		request.setScene("TRAFFIC");
+		request.setMhltiCenterAppId("52270015");
+
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/orderRefundNotice";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单退款通知】请求地址:" + url);
+		log.info("【订单退款通知】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单退款通知】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单退款通知】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单退款通知】失败:" + jsonObject.getString("resMsg"));
+		}
+	}
+
+
+
+	/**
+	 * 订单取消
+	 * @param orderId
+	 */
+	public static void tradeOrderCancel(String orderId) {
+		TradeOrderCancelRequest request1 = new TradeOrderCancelRequest();
+		request1.setScene("TRAFFIC");
+		request1.setMhltiCenterAppId("52270015");
+		request1.setOrderId(orderId);
+
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCancel";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+		TradeRequest request = new TradeRequest<TradeOrderRefundRequest>();
+		request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1968487841979760640" : "1963507067318833152");
+		request.setAppId(qianYunTongConfig.getAppkey());
+		request.setConfigVersion(1);
+		request.setRequestId(UUIDUtil.getRandomCode());
+		request.setData(request1);
+
+		String timeStamp = date.format(nowdate);
+		String messageId = UUIDUtil.getRandomCode();
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		contentMap.put("content", new Gson().toJson(request));
+		log.info("【订单取消】请求地址:" + url);
+		log.info("【订单取消】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【订单取消】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String resCode = jsonObject.getString("resCode");
+		if (!"000000".equals(resCode)) {
+			log.error("【订单取消】失败:" + jsonObject.getString("resMsg"));
+			throw new RuntimeException("【订单取消】失败:" + jsonObject.getString("resMsg"));
+		}
+	}
 }
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java
index be8c20b..29b102e 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/QianYunTongConfig.java
@@ -160,7 +160,7 @@
 	public QianYunTongConfig getQianYunTongConfig() {
 		if("dev".equals(activeProfile)){
 			this.appkey = "10001104";
-			this.privateKeyPath = "C:\\Users\\Admin\\Desktop\\qyt\\private_key_test.pem";
+			this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
 			this.userName = "xiaofei";
 			this.status = "1";
 			this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/UserUtil.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/UserUtil.java
index e2caa34..03a13d5 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/UserUtil.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/UserUtil.java
@@ -25,10 +25,7 @@
 	private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
 	
 	
-	public static void main(String[] args) {
-//		List<QYTUserInfo> userInfoByPhone = getUserInfoByPhone("15828353127");
-//		System.out.println(userInfoByPhone);
-	}
+	
 	
 	
 	/**
@@ -321,4 +318,51 @@
 		return object.getBoolean("isok");
 	}
 	
+	
+	/**
+	 * 根据手机号码获取易信uuid
+	 * @param mobile
+	 * @return
+	 */
+	public static String getOnconUUIDByMobile(String mobile) {
+		//请求路径
+		String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getOnconUUIDByMobile";
+		//私钥文件
+		String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+		//注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+		String appKey = qianYunTongConfig.getAppkey();//appkey
+		Map<String, String> headers = new HashMap<>();
+		headers.put("Content-Type", "application/json");
+		Map<String, Object> contentMap = new HashMap<String, Object>();
+		Date nowdate = new Date();
+		SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+		
+		String timeStamp = date.format(nowdate);
+		String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+		contentMap.put(SystemParameterNames.getAppKey(), appKey);
+		contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+		contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+		contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+		Map<String, String> map = new HashMap<>();
+		map.put("mobile", mobile);
+		contentMap.put("content", JSON.toJSONString(map));
+		log.info("【根据手机号码获取易信uuid】请求地址:" + url);
+		log.info("【根据手机号码获取易信uuid】请求参数:" + JSON.toJSONString(contentMap));
+		String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+		log.info("【根据手机号码获取易信uuid】请求结果:" + result);
+		JSONObject jsonObject = JSON.parseObject(result);
+		String retCode = jsonObject.getString("retCode");
+		if (!"0".equals(retCode)) {
+			log.error("【根据手机号码获取易信uuid】请求失败:" + result);
+			throw new RuntimeException("【根据手机号码获取易信uuid】请求失败:" + result);
+		}
+		JSONObject object = jsonObject.getJSONObject("object");
+		Integer status = object.getInteger("status");
+		if(0 != status){
+			log.error("【身份证实名认证】请求失败:" + object.getString("desc"));
+			throw new RuntimeException("【身份证实名认证】请求失败:" + object.getString("desc"));
+		}
+		return object.getString("onconUUID");
+	}
+	
 }
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GoodsInfoRequest.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
index 68efe51..5aeee7a 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
@@ -36,4 +36,8 @@
 	 * 业务类型,默认传10408
 	 */
 	private String businessType;
+	/**
+	 * 结算日期yyyyMMdd
+	 */
+	private String settleDate;
 }
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentOrderRequest.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
index 103bf3c..467595d 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
@@ -50,8 +50,4 @@
 	 * 付款方式,6:微信  7:支付宝  8:银行卡 9:银联二维码 10银联购物车收银台
 	 */
 	private Integer payChannel;
-	/**
-	 * 是否补偿单。1、是,0、否
-	 */
-	private Integer isCompensate;
 }
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeOrderCreateData.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
index e6f32e1..00c95bd 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
@@ -56,6 +56,18 @@
 	 */
 	private String customerId;
 	/**
+	 * 推广人id
+	 */
+	private String promoterId;
+	/**
+	 * 服务商商户ID(serviceType为3时必传)
+	 */
+	private String supplierShopId;
+	/**
+	 * 场景服务类型。1、出租;2、网约车;3、城际;4、顺风车,5、代驾
+	 */
+	private Integer serviceType;
+	/**
 	 * 商户号,由支付中心分配。测试环境5400004
 	 */
 	private String payPartnerId;
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TravelItinerary.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TravelItinerary.java
index fd91bfc..3169090 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TravelItinerary.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/qianyuntong/model/TravelItinerary.java
@@ -45,7 +45,7 @@
 	 */
 	private Integer serviceType;
 	/**
-	 * 订单状态。1、待支付,11、已完结(可结算)
+	 * 订单状态。1、待支付,3=已支付,11、已完结(可结算),16、已取消,32、已全部退款
 	 */
 	private Integer orderStatus;
 	/**
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderPayment.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderPayment.java
index 2b70d88..31d0330 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderPayment.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderPayment.java
@@ -17,4 +17,8 @@
     private Integer payType;
     @ApiModelProperty(value = "优惠券id", required = false, dataType = "int")
     private Integer couponId;
+    @ApiModelProperty(value = "支付成功后的回调页面地址", required = true, dataType = "string")
+    private String path;
+    @ApiModelProperty(value = "ip地址", required = true, dataType = "string")
+    private String ip;
 }

--
Gitblit v1.7.1