From a3990d3644885c51f4ea0fc7a27c1097f4808bfb Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期四, 30 五月 2024 11:05:42 +0800
Subject: [PATCH] 5.30

---
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/email/KaiPiaoEmail.java               |   86 ++++
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/MaterialInfo.java              |   30 +
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml                 |    2 
 DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTransferService.java         |    5 
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/ChargeInfo.java                |   26 +
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/KaiPiaoUtil.java                      |  106 +++++
 DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTransferMapper.java               |    2 
 DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTransferServiceImpl.java |  165 ++++++++
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java                          |   33 +
 DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTransferMapper.xml        |   20 +
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/InvoiceController.java                           |    1 
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/AmapGeocoding.java                       |   79 +++
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java                      |   26 +
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/GlobalInfo.java                |   56 ++
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/transfer/controller/OrderTransferController.java     |   11 
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/SptBlueInvOpenDemo.java               |  154 +++++++
 UserNTTravel/guns-admin/target/classes/META-INF/spring-configuration-metadata.json                                    |   30 +
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/InvoiceDetails.java            |   50 ++
 DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java                           |   10 
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/InvoiceData.java               |   14 
 UserNTTravel/guns-admin/target/classes/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml                |    2 
 DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java          |   53 ++
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UrlLinkUtil.java                         |   50 ++
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java       |    1 
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/util/CreatAndSendUtil.java            |  106 +++++
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/ReturnData.java                |   31 +
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java          |   24 +
 27 files changed, 1,159 insertions(+), 14 deletions(-)

diff --git a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index 0d9c26d..844d62a 100644
--- a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -106,19 +106,19 @@
                 case 1:
                     OrderPrivateCar orderPrivateCar = privateCarService.selectById(orderId);
                     orderPrivateCar.setRecordTime(new Date());
-                    orderPrivateCar.setRouteRecord(fileLink);
+                    orderPrivateCar.setRouteRecord(orderPrivateCar.getRouteRecord()==null? fileLink: orderPrivateCar.getRouteRecord()+","+fileLink);
                     privateCarService.updateById(orderPrivateCar);
                     break;
                     case 5:
                     OrderCrossCity orderCrossCity = crossCityService.selectById(orderId);
                         orderCrossCity.setRecordTime(new Date());
-                        orderCrossCity.setRouteRecord(fileLink);
+                        orderCrossCity.setRouteRecord(orderCrossCity.getRouteRecord()==null? fileLink: orderCrossCity.getRouteRecord()+","+fileLink);
                         crossCityService.updateById(orderCrossCity);
                     break;
                     case 7:
                         TOrderTransfer orderTransfer = orderTransferService.selectById(orderId);
                         orderTransfer.setRecordTime(new Date());
-                        orderTransfer.setRouteRecord(fileLink);
+                        orderTransfer.setRouteRecord(orderTransfer.getRouteRecord()==null? fileLink: orderTransfer.getRouteRecord()+","+fileLink);
                         orderTransferService.updateById(orderTransfer);
                     break;
             }
@@ -273,7 +273,7 @@
     @ApiOperation(value = "获取抢单界面的订单详情", tags = {"司机端-首页"}, notes = "")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
-            @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城)", name = "orderType", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城7=接送机)", name = "orderType", required = true, dataType = "int"),
             @ApiImplicitParam(value = "当前定位经度", name = "lon", required = true, dataType = "string"),
             @ApiImplicitParam(value = "当前定位纬度", name = "lat", required = true, dataType = "string"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
@@ -301,7 +301,7 @@
     @ApiOperation(value = "司机抢单操作", tags = {"司机端-首页"}, notes = "")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
-            @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城)", name = "orderType", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城 7接送机)", name = "orderType", required = true, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
     public ResultUtil grabOrder(Integer orderId, Integer orderType, HttpServletRequest request){
diff --git a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTransferMapper.java b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTransferMapper.java
index b50dd2b..0be0ab6 100644
--- a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTransferMapper.java
+++ b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderTransferMapper.java
@@ -17,6 +17,8 @@
  * @since 2020-09-02
  */
 public interface TOrderTransferMapper extends BaseMapper<TOrderTransfer> {
+    Map<String, Object> queryPushOrder(@Param("orderId") Integer orderId);
+
     /**
      * 根据条件查询专车订单列表
      * @return
diff --git a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTransferMapper.xml b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTransferMapper.xml
index 846ba88..026cc5d 100644
--- a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTransferMapper.xml
+++ b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderTransferMapper.xml
@@ -217,5 +217,25 @@
             and state = 2 and (UNIX_TIMESTAMP(travelTime) - UNIX_TIMESTAMP(now())) &gt;= 1800
         </if>
     </select>
+    <select id="queryPushOrder" resultType="map">
+        select
+            id as orderId,
+            state as orderState,
+            ('接送机订单') as orderName,
+            DATE_FORMAT(travelTime, '%m月%d日 %H:%i') as travelTime,
+            startAddress as startAddress,
+            endAddress as endAddress,
+            startLon as startLon,
+            startLat as startLat,
+            endLon as endLon,
+            endLat as endLat,
+            isReassign as isReassign,
+            orderType as reservation,
+            orderSource as orderSource,
+            orderType as orderType,
+            isReassign as isReassign,
+            companyId as companyId
+        from t_order_private_car where id = #{orderId}
+    </select>
 
 </mapper>
diff --git a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTransferService.java b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTransferService.java
index 71b2fbe..288ca3a 100644
--- a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTransferService.java
+++ b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderTransferService.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.IService;
 import com.stylefeng.guns.modular.system.model.TOrderTransfer;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -17,6 +18,10 @@
  * @since 2020-09-02
  */
 public interface ITOrderTransferService extends IService<TOrderTransfer> {
+    ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception;
+
+    Map<String, Object> queryPushOrder(Integer orderId) throws Exception;
+
 
     /**
      * 根据条件查询专车订单列表
diff --git a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
index ac02be9..868fdd1 100644
--- a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
+++ b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -205,6 +205,10 @@
         List<Map<String, Object>> list3 = orderLogisticsService.queryMyAllOrder(state, uid);
         datas.addAll(list3);
 
+        //接送机
+        List<Map<String, Object>> list4 = orderTransferService.queryOrderList(state,uid);
+        datas.addAll(list4);
+
         List<OrderListWarpper> orderListWarpper = OrderListWarpper.getOrderListWarpper(datas);
 
         //分页
@@ -462,6 +466,53 @@
                 break;
             case 6:
                 break;
+
+            case 7://专车
+                map = orderTransferService.queryPushOrder(orderId);
+                String order7 = String.valueOf(map.get("startLon")) + "," + String.valueOf(map.get("startLat"));
+                String distance7 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, order7, 1).get("distance");
+                map.put("startDistance", ToolUtil.isNotEmpty(distance7) ? Double.valueOf(distance7) / 1000 : 0);
+
+                try {
+                    //总距离
+                    String end = String.valueOf(map.get("endLon")) + "," + String.valueOf(map.get("endLat"));
+                    distance = gdMapElectricFenceUtil.getDistance(end, order7, 1).get("distance");
+                    map.put("totalDistance", ToolUtil.isNotEmpty(distance) ? Double.valueOf(distance) / 1000 : 0);
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+
+
+                Integer orderSource7 = Integer.valueOf(String.valueOf(map.get("orderSource")));
+                if(orderSource7 == 1 || orderSource7 == 2 || orderSource7 == 3){
+                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){
+                        map.put("type", "乘客下单");
+                    }
+                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){
+                        map.put("type", "改派");
+                    }
+                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){
+                        map.put("type", "预约");
+                    }
+                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){
+                        map.put("type", "改派");
+                    }
+                }
+                if(orderSource7 == 5){
+                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){
+                        map.put("type", "调度下单");
+                    }
+                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){
+                        map.put("type", "改派");
+                    }
+                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){
+                        map.put("type", "预约");
+                    }
+                    if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){
+                        map.put("type", "改派");
+                    }
+                }
+                break;
         }
         return map;
     }
@@ -490,6 +541,8 @@
                 return orderLogisticsService.grabOrder(orderId, uid);
             case 6:
                 break;
+            case 7://接送机
+                return orderTransferService.grabOrder(orderId, uid);
         }
         return null;
     }
diff --git a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTransferServiceImpl.java b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTransferServiceImpl.java
index 9b8e9c2..667a3a8 100644
--- a/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTransferServiceImpl.java
+++ b/DriverNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderTransferServiceImpl.java
@@ -1,12 +1,26 @@
 package com.stylefeng.guns.modular.system.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
 import com.stylefeng.guns.modular.system.dao.TOrderTransferMapper;
+import com.stylefeng.guns.modular.system.model.Driver;
 import com.stylefeng.guns.modular.system.model.TOrderTransfer;
+import com.stylefeng.guns.modular.system.service.IDriverService;
+import com.stylefeng.guns.modular.system.service.ISystemNoticeService;
 import com.stylefeng.guns.modular.system.service.ITOrderTransferService;
+import com.stylefeng.guns.modular.system.util.GDFalconUtil;
+import com.stylefeng.guns.modular.system.util.PushMinistryOfTransportUtil;
+import com.stylefeng.guns.modular.system.util.PushUtil;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -20,12 +34,163 @@
  */
 @Service
 public class TOrderTransferServiceImpl extends ServiceImpl<TOrderTransferMapper, TOrderTransfer> implements ITOrderTransferService {
+        @Resource
+        private TOrderTransferMapper orderTransferMapper;
+    @Autowired
+    private IDriverService driverService;
+    @Autowired
+    private GDFalconUtil gdFalconUtil;
+    @Autowired
+    private PushUtil pushUtil;
+    @Autowired
+    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
+
+    @Autowired
+    private ISystemNoticeService systemNoticeService;
+    @Value("${pushMinistryOfTransport}")
+    private boolean pushMinistryOfTransport;
+    @Override
+    public Map<String, Object> queryPushOrder(Integer orderId) throws Exception {
+        return orderTransferMapper.queryPushOrder(orderId);
+    }
+
+
+
     @Override
     public List<Map<String, Object>> getTransferOrderList(Page<Map<String, Object>> page, String beginTime, String endTime, Integer roleType, Integer nowUserId, String orderNum, Integer orderSource, String userName, String userPhone, String passengers, String passengersPhone, Integer serverCarModelId, String driver, Integer state) {
         return this.baseMapper.getTransferOrderList(page, beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state);
     }
 
     @Override
+    public synchronized ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception {
+        TOrderTransfer orderPrivateCar = this.selectById(orderId);
+        //处理摆渡车的情况
+        if(orderPrivateCar.getType() == 2){
+            //查看用户下的摆渡车是否已被人抢了
+//            List<OrderPrivateCar> list = this.selectList(
+//                    new EntityWrapper<OrderPrivateCar>()
+//                            .eq("type", 2)
+//                            .eq("userId", orderPrivateCar.getUserId())
+//                            .ne("state", 1)
+//                            .eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId())
+//                            .eq("place", orderPrivateCar.getPlace())
+//            );
+//            List<OrderTaxi> list1 = orderTaxiService.selectList(
+//                    new EntityWrapper<OrderTaxi>()
+//                            .eq("type", 2)
+//                            .eq("userId", orderPrivateCar.getUserId())
+//                            .ne("state", 1)
+//                            .eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId())
+//                            .eq("place", orderPrivateCar.getPlace())
+//            );
+//            if(list.size() > 0 || list1.size() > 0){
+//                return ResultUtil.error("手速有点慢哦,订单已被抢啦!");
+//            }
+        }
+
+        if(orderPrivateCar.getState() == 9){
+            return ResultUtil.error("订单已取消");
+        }
+        if(orderPrivateCar.getState() != 1){
+            return ResultUtil.error("手速有点慢哦,订单已被抢啦!");
+        }
+        Driver driver = driverService.selectById(uid);
+        orderPrivateCar.setDriverId(uid);
+        orderPrivateCar.setCarId(driver.getCarId());
+        orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : (
+                driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1));
+        orderPrivateCar.setState(2);
+        orderPrivateCar.setSnatchOrderTime(new Date());
+
+        //调用高德创建轨迹
+        String s = gdFalconUtil.selectTerminal(driver.getPhone());
+        String track = gdFalconUtil.createTrack(s);
+        orderPrivateCar.setTrackId(track);
+
+        //调用移动的小号接口
+//        Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
+//        Region region = regionMapper.query(geocode.get("districtCode"));
+//        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1)));
+//        if(String.valueOf(map.get("code")).equals("200")){
+//            orderPrivateCar.setTelX(map.get("telX"));
+//            orderPrivateCar.setBindId(map.get("bindId"));
+//        }
+
+        //处理摆渡车的情况
+        if(orderPrivateCar.getType() == 2){
+//            //查看用户下的摆渡车是否已被人抢了
+//            List<OrderPrivateCar> list = this.selectList(
+//                    new EntityWrapper<OrderPrivateCar>()
+//                            .eq("type", 2)
+//                            .eq("userId", orderPrivateCar.getUserId())
+//                            .ne("state", 1)
+//                            .eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId())
+//                            .eq("place", orderPrivateCar.getPlace())
+//            );
+//            List<OrderTaxi> list1 = orderTaxiService.selectList(
+//                    new EntityWrapper<OrderTaxi>()
+//                            .eq("type", 2)
+//                            .eq("userId", orderPrivateCar.getUserId())
+//                            .ne("state", 1)
+//                            .eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId())
+//                            .eq("place", orderPrivateCar.getPlace())
+//            );
+//            for(OrderPrivateCar orderPrivateCar1 : list){
+//                orderPrivateCar1.setState(10);
+//                this.updateById(orderPrivateCar1);
+//            }
+//            for(OrderTaxi orderTaxi : list1){
+//                orderTaxi.setState(10);
+//                orderTaxiService.updateById(orderTaxi);
+//            }
+        }
+
+        this.updateById(orderPrivateCar);
+
+        //如果是预约单,则不修改司机为服务中
+        if(orderPrivateCar.getOrderType() != 2 || (orderPrivateCar.getOrderType() == 2 && orderPrivateCar.getTravelTime().getTime() < System.currentTimeMillis() + 600000)){
+            //修改司机为服务中
+            driver.setState(3);
+            driverService.updateById(driver);
+        }
+
+        //推送相关代码------------------start----------------
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 7, orderPrivateCar.getState());
+                pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 7, orderPrivateCar.getState());
+                if(orderPrivateCar.getType() == 2){
+                    pushUtil.pushFerryOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2);
+                }
+            }
+        }).start();
+
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                pushUtil.pushDriverPosition(orderId, 7);
+            }
+        }).start();
+
+        systemNoticeService.addSystemNotice(2, "您已成功抢得专车订单,请及时联系客户!", orderPrivateCar.getDriverId());
+        systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver.getName().substring(0, 1) + "师傅,请保持电话畅通!", orderPrivateCar.getUserId());
+
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                if(pushMinistryOfTransport){
+                    //上传数据
+                    pushMinistryOfTransportUtil.orderCreate(orderId);
+                    pushMinistryOfTransportUtil.orderMatch(orderId);
+                }
+            }
+        }).start();
+
+        return ResultUtil.success();
+    }
+
+    @Override
     public Map<String, Object> getTransferOrderDetailById(Integer orderId) {
         return this.baseMapper.getTransferOrderDetailById(orderId);
     }
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/InvoiceController.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/InvoiceController.java
index 1815537..ae04a93 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/InvoiceController.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/InvoiceController.java
@@ -60,6 +60,7 @@
     })
     public ResultUtil invoicing(Invoice invoice, String order, HttpServletRequest request){
         try {
+
             Integer uid = userInfoService.getUserIdFormRedis(request);
             if(null == uid){
                 return ResultUtil.tokenErr();
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java
index 41b3c49..6ee982a 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java
@@ -7,10 +7,7 @@
 import com.stylefeng.guns.modular.system.service.*;
 //import com.stylefeng.guns.modular.system.util.ICBCPayUtil;
 import com.stylefeng.guns.modular.system.service.impl.UserServiceImpl;
-import com.stylefeng.guns.modular.system.util.ALiSendSms;
-import com.stylefeng.guns.modular.system.util.PayMoneyUtil;
-import com.stylefeng.guns.modular.system.util.RedisUtil;
-import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.util.*;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
@@ -216,8 +213,7 @@
     @PostMapping("/get/coupon/info")
     @ApiOperation(value = "使用说明", tags = {"线下推广页面"}, notes = "")
     @ApiImplicitParams({
-            @ApiImplicitParam(value = "电话", name = "phone", required = true, dataType = "String"),
-            @ApiImplicitParam(value = "验证码", name = "code", required = true, dataType = "String")
+
     })
     public ResultUtil coupon(Integer acId){
         TActivityGeneralization tActivityGeneralization = activityGeneralizationService.selectById(acId);
@@ -225,6 +221,24 @@
         return ResultUtil.success(tActivityGeneralization.getUseExplain());
     }
 
+    @Autowired
+    private WeChatUtil weChatUtil;
+
+    @ResponseBody
+    @PostMapping("/get/coupon/toWe")
+    @ApiOperation(value = "获取微信链接", tags = {"线下推广页面"}, notes = "")
+    @ApiImplicitParams({
+
+    })
+    public ResultUtil toWe(){
+        try {
+            String urlLink = weChatUtil.getUrlLink(null, null);
+            return ResultUtil.success(urlLink);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return ResultUtil.error("请稍后再试");
+    }
 
 
 
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java
index 2261739..61647f6 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java
@@ -72,6 +72,7 @@
         if(c.getTimeInMillis() > sdf.parse(day).getTime()){
             throw new SystemException("日期不能小于当天");
         }
+
         List<Map<String, Object>> list = new ArrayList<>();
         List<LineShift> lineShifts = lineShiftMapper.queryByLineId(lineId);
         List<Map<String, Object>> s = lineSiteMapper.queryDriver(lineId, sdf.parse(day), driverId);
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml
index b56811d..e4b4588 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml
@@ -22,7 +22,7 @@
 
 
 
-    <select id="queryMyInvoice" resultType="Invoice">
+    <select id="queryMyInvoice" resultType="map">
         select
         id as id,
         insertTime as insertTime,
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/KaiPiaoUtil.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/KaiPiaoUtil.java
new file mode 100644
index 0000000..5e7bdbe
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/KaiPiaoUtil.java
@@ -0,0 +1,106 @@
+package com.stylefeng.guns.modular.system.kaipiao;
+
+import cn.hutool.json.JSONUtil;
+import com.stylefeng.guns.modular.system.kaipiao.email.KaiPiaoEmail;
+import com.stylefeng.guns.modular.system.kaipiao.entity.InvoiceData;
+import com.stylefeng.guns.modular.system.kaipiao.entity.InvoiceDetails;
+import com.stylefeng.guns.modular.system.kaipiao.entity.MaterialInfo;
+import com.stylefeng.guns.modular.system.kaipiao.entity.ReturnData;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class KaiPiaoUtil {
+    public static void main(String[] args) {
+        InvoiceData invoiceData  = new InvoiceData();
+        //设置纳税人识别号
+        invoiceData.setNsrsbh("");
+
+        InvoiceDetails invoiceDetails = new InvoiceDetails();
+        //设置订单号
+        invoiceDetails.setOrderNo("");
+        //设置发票种类 01专票 02普票
+        invoiceDetails.setFppzDm("02");
+        //设置销售方税号
+        invoiceDetails.setXsfnsrsbh("");
+        //设置销售方名称
+        invoiceDetails.setXsfmc("");
+        //设置销售方地址
+        invoiceDetails.setXsfdz("");
+        //设置销售方电话
+        invoiceDetails.setXsflxdh("");
+        //设置销售方开户行
+        invoiceDetails.setXsfkhh("");
+        //设置销售方银行账号
+        invoiceDetails.setXsfyhzh("");
+        //设置购买方税号
+        invoiceDetails.setGmfnsrsbh("");
+        //设置购买方名称
+        invoiceDetails.setGmfmc("");
+        //设置合计金额
+        invoiceDetails.setHjje("");
+        //设置合计税额
+        invoiceDetails.setHjse("");
+        //设置价税总计
+        invoiceDetails.setJshj("");
+        //设置开票方纳税人识别号
+        invoiceDetails.setKpfnsrsbh("");
+        //设置明细行数
+        invoiceDetails.setSpsl("1");
+        //设置含税标识
+        invoiceDetails.setHsbz("2");
+
+
+        //新建一个明细表
+        List<MaterialInfo> materialInfos = new ArrayList<>();
+        MaterialInfo materialInfo = new MaterialInfo();
+        materialInfos.add(materialInfo);
+        invoiceDetails.setMxzbList(materialInfos);
+
+
+
+        invoiceData.setData(invoiceDetails);
+
+
+
+        System.err.println(JSONUtil.parse(invoiceData));
+        //开票
+
+
+//        String testData = "{\"nsrsbh\": \"91440400MA4WKU0K8A\", \"data\": {\"orderNo\": \"9d957b7229de4496ae487d1041415bbwasc\",\"fppzDm\": \"02\",\"tdyslxDm\":\"\",\"xsfnsrsbh\": \"91440400MA4WKU0K8A\",\"xsfmc\": \"广东欣档科技有限公司\",\"xsfdz\": \"珠海市高新区唐家湾镇大学路101号3栋102号\",\"xsflxdh\": \"13902872568\",\"xsfkhh\": \"中国建设银行股份有限公司珠海市分行营业部\",\"xsfyhzh\": \"22050164864700000347\",\"gmfnsrsbh\": \"91110105101781969R\",\"gmfmc\": \"北京市红牛维他命饮料有限责任公司\",\"gmfdz\": \"北京市朝阳区建国门外大街永安东里8号\",\"gmflxdh\": \"010-85288069\",\"gmfkhh\": \"中国工商银行北京商务中心区支行国贸大厦分理处\",\"gmfyhzh\": \"0200041609067021427\",\"kpr\": \"\",\"skr\": \"\",\"fhr\": \"\",\"hjje\": 69.29,\"hjse\": 9.01,\"jehj\": 0,\"jshj\": \"78.30\",\"kce\": 0,\"kpfnsrsbh\": \"91440400MA4WKU0K8A\",\"spsl\": 1,\"bz\": \"\",\"hsbz\": \"2\",\"sfzsgmfyhzh\": \"N\",\"sfzsxsfyhzh\": \"N\",\"mxzbList\": [{\"xh\": 1,\"fphxzDm\": \"0\",\"xmmc\": \"唯他可可椰子水/凤梨口味/330ML\",\"hwhyslwfwmc\": \"*软饮料*唯他可可椰子水/凤梨口味/330ML\",\"sphfwssflhbbm\": \"1030307020000000000\",\"spfwjc\": \"软饮料\",\"ggxh\": \"12瓶/箱\",\"dw\": \"箱\",\"spsl\": \"1\",\"dj\": 69.29,\"je\": 69.29,\"hsje\": 78.3,\"slv\": \"0.13\",\"se\": 9.01,\"kce\": \"\",\"hsdj\": 78.3,\"bhsdj\": 69.29,\"bhsje\": 69.29}]}}";
+//        SptBlueInvOpenDemo blueInvOpenDemo = new SptBlueInvOpenDemo();
+//        ReturnData returnData = blueInvOpenDemo.blueInvOpen(testData, "43b9ef0799534e298ca2b6b73a6cab48", "31s1m151s161");
+//        System.out.println(returnData);
+
+        //拿文件地址
+//        String testData = "{\n" +
+//                "\t\"nsrsbh\": \"91440400MA4WKU0K8A\",\n" +
+//                "\t\"fphm\": \"24442000000000372439\",\n" +
+//                "\t\"kprq\": \"2024-05-29 11:52:25\"\n" +
+//                "}";
+//        SptBlueInvOpenDemo blueInvOpenDemo = new SptBlueInvOpenDemo();
+//        ReturnData returnData = blueInvOpenDemo.getUrl(testData, "43b9ef0799534e298ca2b6b73a6cab48", "31s1m151s161");
+//        System.out.println(returnData);
+
+//        发邮件
+//        String testData = "{\n" +
+//                "\t\"nsrsbh\": \"91440400MA4WKU0K8A\",\n" +
+//                "\t\"fphm\": \"24442000000000372439\",\n" +
+//                "\t\"sjyx\": \"2855143437@qq.com\"\n" +
+//                "}";
+//        SptBlueInvOpenDemo blueInvOpenDemo = new SptBlueInvOpenDemo();
+//        ReturnData returnData = blueInvOpenDemo.toEmail(testData, "43b9ef0799534e298ca2b6b73a6cab48", "31s1m151s161");
+//        System.out.println(returnData);
+
+//        查结果
+//        String testData = "{\n" +
+//                "\t\"nsrsbh\": \"91440400MA4WKU0K8A\",\n" +
+//                "\t\"jflsh\": \"3230867364023107584\"\n" +
+//                "}";
+//        SptBlueInvOpenDemo blueInvOpenDemo = new SptBlueInvOpenDemo();
+//        ReturnData returnData = blueInvOpenDemo.checkEamil(testData, "43b9ef0799534e298ca2b6b73a6cab48", "31s1m151s161");
+//        System.out.println(returnData);
+
+
+    }
+}
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/SptBlueInvOpenDemo.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/SptBlueInvOpenDemo.java
new file mode 100644
index 0000000..675c071
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/SptBlueInvOpenDemo.java
@@ -0,0 +1,154 @@
+package com.stylefeng.guns.modular.system.kaipiao;
+
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.modular.system.kaipiao.entity.ReturnData;
+import com.stylefeng.guns.modular.system.kaipiao.util.CreatAndSendUtil;
+
+
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+
+public class SptBlueInvOpenDemo {
+
+    /**
+     * 调用数票通接口开具蓝字发票
+     * @param dataJson 需要开具发票的订单信息及明细组成的json字符串,具体字段见接口对接文档
+     * @param appSecret 企业密钥 由江苏航信分配获取
+     * @param appId 企业标识 由江苏航信分配获取
+     * @return ReturnData
+     */
+    public static ReturnData blueInvOpen(String dataJson, String appSecret, String appId){
+        /*
+           TODO
+            校验订单流水号(orderNo),不能为空且不能与已开票据的重复
+         */
+
+        //接口代码详见各业务接口说明 全电蓝字发票开具为:SALE.DZSJLZINVOPEN
+        String interfaceCode = "SALE.DZSJLZINVOPEN";
+
+        ReturnData returnData = CreatAndSendUtil.creatAndSend(dataJson, appSecret, appId, interfaceCode);
+
+        if (returnData != null){
+            if ("0000".equals(returnData.getReturn_info().getReturn_code())){
+                String data = returnData.getData();
+                byte[] decode = Base64.getDecoder().decode(data.getBytes(StandardCharsets.UTF_8));
+                returnData.setData(new String(decode));
+                JSONObject jsonObject = JSONObject.parseObject(new String(decode));
+//                System.out.println("发票号码:" + jsonObject.get("fphm"));
+//                System.out.println("开票日期:" + jsonObject.get("kprq"));
+            /*
+                TODO
+                 开票成功,改变数据库中的数据等操作
+             */
+            }else {
+            /*
+                 开票失败,return_message查看失败原因
+             */
+            }
+            return returnData;
+        }
+        return null;
+    }
+
+
+    public static ReturnData getUrl(String dataJson, String appSecret, String appId){
+        /*
+           TODO
+            校验订单流水号(orderNo),不能为空且不能与已开票据的重复
+         */
+
+        //接口代码详见各业务接口说明 全电蓝字发票开具为:SALE.DZSJLZINVOPEN
+        String interfaceCode = "SALE.QDINVDOWNURL";
+
+        ReturnData returnData = CreatAndSendUtil.creatAndSend(dataJson, appSecret, appId, interfaceCode);
+
+        if (returnData != null){
+            if ("0000".equals(returnData.getReturn_info().getReturn_code())){
+                String data = returnData.getData();
+                byte[] decode = Base64.getDecoder().decode(data.getBytes(StandardCharsets.UTF_8));
+                returnData.setData(new String(decode));
+                JSONObject jsonObject = JSONObject.parseObject(new String(decode));
+//                System.out.println("发票号码:" + jsonObject.get("fphm"));
+//                System.out.println("开票日期:" + jsonObject.get("kprq"));
+            /*
+                TODO
+                 开票成功,改变数据库中的数据等操作
+             */
+            }else {
+            /*
+                 开票失败,return_message查看失败原因
+             */
+            }
+            return returnData;
+        }
+        return null;
+    }
+
+    public static ReturnData toEmail(String dataJson, String appSecret, String appId){
+        /*
+           TODO
+            校验订单流水号(orderNo),不能为空且不能与已开票据的重复
+         */
+
+        //接口代码详见各业务接口说明 全电蓝字发票开具为:SALE.DZSJLZINVOPEN
+        String interfaceCode = "SALE.OWNEMAILDELIVERY";
+
+        ReturnData returnData = CreatAndSendUtil.creatAndSend(dataJson, appSecret, appId, interfaceCode);
+
+        if (returnData != null){
+            if ("0000".equals(returnData.getReturn_info().getReturn_code())){
+                String data = returnData.getData();
+                byte[] decode = Base64.getDecoder().decode(data.getBytes(StandardCharsets.UTF_8));
+                returnData.setData(new String(decode));
+                JSONObject jsonObject = JSONObject.parseObject(new String(decode));
+//                System.out.println("发票号码:" + jsonObject.get("fphm"));
+//                System.out.println("开票日期:" + jsonObject.get("kprq"));
+            /*
+                TODO
+                 开票成功,改变数据库中的数据等操作
+             */
+            }else {
+            /*
+                 开票失败,return_message查看失败原因
+             */
+            }
+            return returnData;
+        }
+        return null;
+    }
+
+    public static ReturnData checkEamil(String dataJson, String appSecret, String appId){
+        /*
+           TODO
+            校验订单流水号(orderNo),不能为空且不能与已开票据的重复
+         */
+
+        //接口代码详见各业务接口说明 全电蓝字发票开具为:SALE.DZSJLZINVOPEN
+        String interfaceCode = "SALE.OWNEMAILDELIVERYQUERY";
+
+        ReturnData returnData = CreatAndSendUtil.creatAndSend(dataJson, appSecret, appId, interfaceCode);
+
+        if (returnData != null){
+            if ("0000".equals(returnData.getReturn_info().getReturn_code())){
+                String data = returnData.getData();
+                byte[] decode = Base64.getDecoder().decode(data.getBytes(StandardCharsets.UTF_8));
+                returnData.setData(new String(decode));
+                JSONObject jsonObject = JSONObject.parseObject(new String(decode));
+//                System.out.println("发票号码:" + jsonObject.get("fphm"));
+//                System.out.println("开票日期:" + jsonObject.get("kprq"));
+            /*
+                TODO
+                 开票成功,改变数据库中的数据等操作
+             */
+            }else {
+            /*
+                 开票失败,return_message查看失败原因
+             */
+            }
+            return returnData;
+        }
+        return null;
+    }
+
+
+}
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/email/KaiPiaoEmail.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/email/KaiPiaoEmail.java
new file mode 100644
index 0000000..fcb1500
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/email/KaiPiaoEmail.java
@@ -0,0 +1,86 @@
+package com.stylefeng.guns.modular.system.kaipiao.email;
+
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.modular.system.kaipiao.entity.GlobalInfo;
+import com.stylefeng.guns.modular.system.kaipiao.util.CreatAndSendUtil;
+import org.springframework.util.Base64Utils;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Base64;
+
+public class KaiPiaoEmail {
+    /** 带格式的正文内容 */
+    public static String emailContent(){
+        StringBuilder contentBuilder = new StringBuilder();
+        contentBuilder.append("<h2>尊敬的友商,您好!</h2>");
+        contentBuilder.append("<br/>");
+        contentBuilder.append("<br/>");
+        contentBuilder.append("购买方名称:某某某公司<br/>");
+        contentBuilder.append("发票号码 : 11223344<br/>");
+        contentBuilder.append("开具日期 : 2023-09-26<br/>");
+        contentBuilder.append("价税合计 : 100¥<br/>");
+        contentBuilder.append("<br/>");
+        contentBuilder.append("<br/>");
+        contentBuilder.append("<br/>");
+        contentBuilder.append("<hr>");
+        contentBuilder.append("您好!您已接收到全面数字化的电子发票。目前,全面数字化的电子发票在全国部分省(区、市)试点推广," +
+                "其法律效力、基本用途等与现有纸质发票相同。如您在办理涉及数电票业务的过程中遇到问题," +
+                "可以拨打当地12366纳税服务热线或到就近办税服务厅进行咨询或反馈意见建议,我们将竭诚帮助您解决相关问题。");
+        return contentBuilder.toString();
+    }
+    // 调用邮件代发接口时,需要的内层数据
+    public static String agentEmailData(){
+        JSONObject str = new JSONObject();
+        str.put("subject","由power项目代发qq邮箱,经由jxfw项目,到163邮箱的的邮件");
+        str.put("content",emailContent());
+        str.put("nsrsbh","91440400MA4WKU0K8A");
+        str.put("agentEmail","2855143437@qq.com");
+        str.put("targetEmail","420516635@qq.com");
+        str.put("host","smtp.qq.com");
+        str.put("port","587");
+//        str.put("fileBytes",fjBytes);
+//        str.put("fileName","通用蓝票.pdf");
+        str.put("agentPasscode","rzkoxcfzwtizddaj");
+// base64编码
+        String data = Base64Utils.encodeToString(str.toString().getBytes());
+        return data;
+    }
+    /**
+     * 构建通用请求信息体
+     * @param interfaceCode 接口code
+     * @param innerData 内部请求信息
+     *
+     * */
+    public static JSONObject createParam(String interfaceCode, String innerData){
+
+        // 对报名信息做签名认证操作
+
+        //生成报文globalInfo
+        GlobalInfo globalInfo = CreatAndSendUtil.createGlobalInfo(interfaceCode, "31s1m151s161");
+        //生成数据签名
+        String dataSign = CreatAndSendUtil.createDataSign(globalInfo.toString(), innerData, "43b9ef0799534e298ca2b6b73a6cab48");
+
+        JSONObject param = new JSONObject();
+        param.put("global_info",globalInfo);
+        // 具体接口需要的报文信息
+        param.put("data",innerData);
+        param.put("data_sign",dataSign);
+        return param;
+    }
+    public static JSONObject sendEmail() throws IOException {
+        RestTemplate restTemplate = new RestTemplate();
+// url换成真实地址,这里用的是本地地址
+        String url = "https://csfw.jsaisino.com/csapp/invincomeservice";
+// 附件文件经过一次编码,byte[]类型数据经过一次编码
+//        String enCodeData =  Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get("D:\\MyText\\正常蓝票.pdf")));
+// createParam()方法是构建post请求的方法,自由实现
+        JSONObject param = createParam("SALE.DZSJSENDEMAIL",agentEmailData());
+        String result = restTemplate.postForObject(url, param, String.class);
+        System.err.println(result);
+        JSONObject resultJsonObject = JSONObject.parseObject(result);
+        return resultJsonObject;
+    }
+}
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/ChargeInfo.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/ChargeInfo.java
new file mode 100644
index 0000000..978ad5e
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/ChargeInfo.java
@@ -0,0 +1,26 @@
+package com.stylefeng.guns.modular.system.kaipiao.entity;
+
+import lombok.Data;
+
+@Data
+    public  class ChargeInfo {
+
+        private String xh;
+        private String pzlx;
+        private String fpdm;
+        private String fphm;
+        private String zzfphm;
+        private String pzhm;
+        private String kjrq;
+        private String hjje;
+        private String kce;
+        private String bz;
+        private String ly;
+        private String bckcje;
+        private String pzhjje;
+
+        // getters and setters
+
+
+        // ... similar getters and setters for other fields ...
+    }
\ No newline at end of file
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/GlobalInfo.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/GlobalInfo.java
new file mode 100644
index 0000000..9af7f64
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/GlobalInfo.java
@@ -0,0 +1,56 @@
+package com.stylefeng.guns.modular.system.kaipiao.entity;
+
+import lombok.Data;
+
+@Data
+public class GlobalInfo {
+
+    /**
+     * 应用代码
+     */
+    public String application_code;
+
+    /**
+     * 接口代码
+     */
+    public String interface_code;
+
+    /**
+     * 版本号
+     */
+    public String version;
+
+    /**
+     * 企业简称
+     */
+    public String app_abbr;
+
+    /**
+     * 企业标识
+     */
+    public String app_id;
+
+    /**
+     * 数据流水号
+     */
+    public String data_id;
+
+    /**
+     * 重写toString方法,用于签名
+     * @see Object#toString()
+     */
+    @Override
+    public String toString() {
+
+        String str = "{"
+                + "\"global_info\":{"
+                + "\"application_code\":\"" + this.application_code + "\","
+                + "\"interface_code\":\""  + this.interface_code + "\","
+                + "\"version\":\"" + this.version + "\","
+                + "\"app_abbr\":\"" + this.app_abbr + "\","
+                + "\"app_id\":\""  + this.app_id + "\","
+                + "\"data_id\":\"" + this.data_id + "\""
+                + "},";
+        return str;
+    }
+}
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/InvoiceData.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/InvoiceData.java
new file mode 100644
index 0000000..aaa54a9
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/InvoiceData.java
@@ -0,0 +1,14 @@
+package com.stylefeng.guns.modular.system.kaipiao.entity;
+
+import lombok.Data;
+
+import java.util.List;
+@Data
+public class InvoiceData {
+
+    private String nsrsbh ="";
+    private InvoiceDetails data;
+
+
+
+}
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/InvoiceDetails.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/InvoiceDetails.java
new file mode 100644
index 0000000..475c6d7
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/InvoiceDetails.java
@@ -0,0 +1,50 @@
+package com.stylefeng.guns.modular.system.kaipiao.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+    public  class InvoiceDetails {
+
+        private String orderNo ="";
+        private String fppzDm ="";
+//        private String tdyslxDm ="";
+//        private String cezslxDm ="";
+        private String xsfnsrsbh = "";
+        private String xsfmc ="";
+        private String xsfdz ="";
+        private String xsflxdh ="";
+        private String xsfkhh = "";
+        private String xsfyhzh = "";
+        private String gmfnsrsbh = "";
+        private String gmfmc = "";
+//        private String gmfdz = "";
+//        private String gmflxdh = "";
+//        private String gmfkhh ="";
+//        private String gmfyhzh = "";
+//        private String kpr = "";
+//        private String skr = "";
+//        private String fhr = "";
+        private String hjje = "";
+        private String hjse = "";
+//        private String jehj = "";
+        private String jshj = "";
+//        private String kce = "";
+        private String kpfnsrsbh = "";
+        private String spsl = "";
+//        private String bz = "";
+        private String hsbz = "";
+//        private String sfwzzfp ;
+//        private String zpFppzDm ;
+        private String fpdm = "";
+        private String zzfphm = "";
+//        private String kjly ;
+//        private String gmfZrrbs = "";
+        private String sfzsgmfyhzh = "";
+        private String sfzsxsfyhzh = "";
+        private List<MaterialInfo> mxzbList;
+//        private List<ChargeInfo> cepzmxList;
+
+
+    }
\ No newline at end of file
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/MaterialInfo.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/MaterialInfo.java
new file mode 100644
index 0000000..17c0dd5
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/MaterialInfo.java
@@ -0,0 +1,30 @@
+package com.stylefeng.guns.modular.system.kaipiao.entity;
+
+import lombok.Data;
+
+@Data
+public  class MaterialInfo {
+
+        private String xh ="";
+        private String fphxzDm = "";
+        private String xmmc = "";
+        private String spfwjc = "";
+        private String sphfwssflhbbm = "";
+        private String hwhyslwfwmc = "";
+        private String ggxh = "";
+        private String dw = "";
+        private String spsl = "";
+        private String dj = "";
+        private String hsdj = "";
+        private String je = "";
+        private String hsje = "";
+        private String slv = "";
+        private String se = "";
+        private String kce = "";
+        private String lslbz = "";
+        private String xsyhzcbz = "";
+        private String ssyhzclxDm = "";
+        private String tdzsfsDm = "";
+        private String zzstsgl = "";
+
+    }
\ No newline at end of file
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/ReturnData.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/ReturnData.java
new file mode 100644
index 0000000..473737e
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/entity/ReturnData.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.kaipiao.entity;
+
+import lombok.Data;
+
+@Data
+public class ReturnData {
+
+    /**
+     * 返回结果
+     */
+    private ReturnInfo return_info;
+
+    /**
+     * 返回数据 业务接口响应报文的Base64编码
+     */
+    private String data;
+
+    @Data
+    public static class ReturnInfo {
+
+        /**
+         * 返回代码 0000:成功,其他:失败
+         */
+        private String return_code;
+
+        /**
+         * 返回信息
+         */
+        private String return_message;
+    }
+}
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/util/CreatAndSendUtil.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/util/CreatAndSendUtil.java
new file mode 100644
index 0000000..7d1438e
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/kaipiao/util/CreatAndSendUtil.java
@@ -0,0 +1,106 @@
+package com.stylefeng.guns.modular.system.kaipiao.util;
+
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.modular.system.kaipiao.entity.GlobalInfo;
+import com.stylefeng.guns.modular.system.kaipiao.entity.ReturnData;
+import org.springframework.util.Base64Utils;
+import cn.hutool.core.codec.Base64;
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Objects;
+
+public class CreatAndSendUtil {
+
+    /**
+     * 通用调用数票通接口
+     * @param dataJson 业务接口请求报文json,具体字段见接口对接文档
+     * @param appSecret 企业密钥 由江苏航信分配获取
+     * @param appId 企业标识 由江苏航信分配获取
+     * @param interfaceCode 接口代码 接口代码详见接口对接文档
+     * @return ReturnData
+     */
+    public static ReturnData creatAndSend(String dataJson, String appSecret, String appId, String interfaceCode){
+        ReturnData returnData = new ReturnData();
+        ReturnData.ReturnInfo returnInfo = new ReturnData.ReturnInfo();
+
+        //对json进行Base64编码
+        String dataBase64Str = Base64.encode(dataJson, "UTF-8");
+        //生成报文globalInfo
+        GlobalInfo globalInfo = CreatAndSendUtil.createGlobalInfo(interfaceCode, appId);
+        //生成数据签名
+        String dataSign = CreatAndSendUtil.createDataSign(globalInfo.toString(), dataBase64Str, appSecret);
+        //组装请求报文
+        JSONObject jsonObj = new JSONObject();
+        jsonObj.put("global_info", globalInfo);
+        jsonObj.put("data", dataBase64Str);
+        jsonObj.put("data_sign", dataSign);
+        String qqbw = JSONObject.toJSONString(jsonObj);
+        //System.out.println(qqbw);
+        //发送请求,数票通url见接口对接文档
+        String sptUrl = "https://csfw.jsaisino.com/csapp/invincomeservice";
+        String returnStr = "";
+        try {
+            returnStr = HttpUtil.post(sptUrl, qqbw);
+        } catch (Exception e) {
+            e.printStackTrace();
+            returnInfo.setReturn_code("9998");
+            returnInfo.setReturn_message("http接口请求异常:" + e.getMessage());
+            returnData.setReturn_info(returnInfo);
+            return returnData;
+        }
+        if (!Objects.equals(returnStr, "")){
+            //将调用返回的数据进行转换
+            JSONObject returnObj = JSONObject.parseObject(returnStr);
+            returnData = JSONObject.toJavaObject(returnObj, ReturnData.class);
+            return returnData;
+        }
+        return returnData;
+    }
+
+    /**
+     * 创建外层报文
+     * @param appId 企业标识 由江苏航信分配获取
+     * @param interfaceCode 接口代码 接口代码详见接口对接文档
+     * @return ReturnData
+     */
+    public static GlobalInfo createGlobalInfo(String interfaceCode, String appId){
+        GlobalInfo globalInfo = new GlobalInfo();
+        globalInfo.setApplication_code("JXFW");
+        globalInfo.setInterface_code(interfaceCode);
+        //版本 目前为1.0
+        globalInfo.setVersion("1.0");
+        globalInfo.setApp_abbr("");
+        //企业标识 由江苏航信分配获取
+        globalInfo.setApp_id(appId);
+        //数据流水号 企业标识+日期(yyyyMMdd)+序列号
+        globalInfo.setData_id("");
+        return globalInfo;
+    }
+
+    /**
+     * 对报文进行加密,生成数据签名
+     * @param globalInfoStr 外层报文Json
+     * @param data 数据 业务接口请求报文的Base64编码
+     * @param appSecret 企业密钥 由江苏航信分配获取
+     * @return String
+     */
+    public static String createDataSign(String globalInfoStr, String data, String appSecret){
+        String str = globalInfoStr + "\"data\":\"" + data + "\"," + "\"data_sign\":\"" + "\"" + "}";
+        byte[] byteKey = appSecret.getBytes(StandardCharsets.UTF_8);
+        SecretKeySpec secretKeySpec = new SecretKeySpec(byteKey, "HmacSHA512");
+        byte[] byteData = null;
+        try {
+            Mac mac = Mac.getInstance("HmacSHA512");
+            mac.init(secretKeySpec);
+            byteData = mac.doFinal(str.getBytes(StandardCharsets.UTF_8));
+        } catch (NoSuchAlgorithmException | InvalidKeyException e) {
+            e.printStackTrace();
+        }
+        return Base64Utils.encodeToString(byteData);
+    }
+}
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java
index 2502751..83df717 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/InvoiceServiceImpl.java
@@ -4,11 +4,19 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.CharteredCar.model.OrderCharteredCar;
+import com.stylefeng.guns.modular.CharteredCar.server.IOrderCharteredCarService;
+import com.stylefeng.guns.modular.crossCity.dao.OrderCrossCityMapper;
+import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
+import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
+import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
+import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
 import com.stylefeng.guns.modular.system.dao.InvoiceMapper;
 import com.stylefeng.guns.modular.system.model.Invoice;
 import com.stylefeng.guns.modular.system.service.IInvoiceService;
 import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
 import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
+import com.stylefeng.guns.modular.transfer.model.OrderTransferCar;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -28,6 +36,12 @@
     @Autowired
     private IOrderTaxiService orderTaxiService;
 
+    @Autowired
+    private IOrderPrivateCarService orderPrivateCarService;
+    @Autowired
+    private IOrderCrossCityService crossCityService;
+    @Autowired
+    private IOrderCharteredCarService orderCharteredCarService;
 
 
     /**
@@ -46,17 +60,27 @@
             Integer orderId = jsonObject.getIntValue("id");
             switch (orderType){
                 case 1://专车
+                    OrderPrivateCar privateCar= orderPrivateCarService.selectById(orderId);
+                    sum.add(new BigDecimal(privateCar.getPayMoney()));
                     break;
                 case 2://出租车
                     OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
                     sum.add(new BigDecimal(orderTaxi.getPayMoney()));
                     break;
                 case 3://跨城出行
+                    OrderCrossCity orderCrossCity = crossCityService.selectById(orderId);
+                    sum.add(new BigDecimal(orderCrossCity.getPayMoney()));
                     break;
                 case 4://同城小件物流
                     break;
                 case 5://跨城小件物流
                     break;
+//                    case 6://包车
+//                        OrderCharteredCar   orderCharteredCar = orderCharteredCarService.selectById(orderId);
+//                        sum.add(new BigDecimal(orderCharteredCar.getPayMoney()));
+//                    break;
+                case 7://接送机
+                    break;
             }
         }
 
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/AmapGeocoding.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/AmapGeocoding.java
new file mode 100644
index 0000000..b4df786
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/AmapGeocoding.java
@@ -0,0 +1,79 @@
+package com.stylefeng.guns.modular.system.util;
+
+import org.codehaus.jettison.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+
+public class AmapGeocoding {
+
+    private static final String AMAP_GEOCODING_API = "https://restapi.amap.com/v3/geocode/regeo";
+    private static final String AMAP_KEY = "116e73b6d14f7da0292daa6037955749"; // 替换为你的高德地图API Key
+
+    public static String getCityCode(double latitude, double longitude) throws Exception {
+        String url = AMAP_GEOCODING_API + "?location=" + longitude + "," + latitude
+                + "&output=json&key=" + AMAP_KEY + "&radius=1000&extensions=all";
+
+        HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
+        connection.setRequestMethod("GET");
+        connection.connect();
+
+        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+        StringBuilder response = new StringBuilder();
+        String line;
+        while ((line = reader.readLine()) != null) {
+            response.append(line);
+        }
+        reader.close();
+        connection.disconnect();
+
+        JSONObject jsonObject = new JSONObject(response.toString());
+        if ("1".equals(jsonObject.getString("status"))) {
+            JSONObject regeocode = jsonObject.getJSONObject("regeocode");
+            JSONObject addressComponent = regeocode.getJSONObject("addressComponent");
+            String cityCode = addressComponent.getString("adcode"); // adcode即为citycode
+            return cityCode;
+        } else {
+            throw new RuntimeException("Failed to fetch city code. Error message: " + jsonObject.getString("info"));
+        }
+    }
+
+    public static String getCityName(double latitude, double longitude) throws Exception {
+        String url = AMAP_GEOCODING_API + "?location=" + longitude + "," + latitude
+                + "&output=json&key=" + AMAP_KEY + "&radius=1000&extensions=all";
+
+        HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
+        connection.setRequestMethod("GET");
+        connection.connect();
+
+        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+        StringBuilder response = new StringBuilder();
+        String line;
+        while ((line = reader.readLine()) != null) {
+            response.append(line);
+        }
+        reader.close();
+        connection.disconnect();
+
+        JSONObject jsonObject = new JSONObject(response.toString());
+        if ("1".equals(jsonObject.getString("status"))) {
+            JSONObject regeocode = jsonObject.getJSONObject("regeocode");
+            JSONObject addressComponent = regeocode.getJSONObject("addressComponent");
+            String cityName = addressComponent.getString("city"); // 这里改为了获取城市名称
+            return cityName;
+        } else {
+            throw new RuntimeException("Failed to fetch city name. Error message: " + jsonObject.getString("info"));
+        }
+    }
+
+
+
+    public static void main(String[] args) throws Exception {
+        double lat = 116.3913; // 纬度
+        double lng = 39.90539; // 经度
+        System.out.println("City Code: " + getCityCode(lat, lng));
+    }
+}
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UrlLinkUtil.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UrlLinkUtil.java
new file mode 100644
index 0000000..5a6e58c
--- /dev/null
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/UrlLinkUtil.java
@@ -0,0 +1,50 @@
+//package com.stylefeng.guns.modular.system.util;
+//
+//import com.alibaba.fastjson.JSON;
+//import com.alibaba.fastjson.JSONObject;
+//import com.stylefeng.guns.core.util.ToolUtil;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.http.HttpEntity;
+//import org.springframework.http.ResponseEntity;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.HashMap;
+//import java.util.Map;
+//
+//@Component
+//public class UrlLinkUtil {
+//    @Autowired
+//    private HttpClientUtil httpClientUtil;
+//
+//    @Autowired
+//    private RedisUtil redisUtil;
+//    public String getWxAppletsAccessToken() throws Exception{
+//        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + "wxc89ecab90d24edd8" + "&secret=" + "bca863174d22736a4a9758a67484947e";
+//        String s = httpClientUtil.pushHttpRequset("GET", url, null, null, "form");
+//        if(ToolUtil.isEmpty(s)){
+//            return null;
+//        }
+//        JSONObject jsonObject = JSON.parseObject(s);
+//        return jsonObject.getString("access_token");
+//    }
+//
+//    public String getUrlLink(String path, String query) throws Exception{
+//        String wxAppletsAccessToken = redisUtil.getValue("wxAppletsAccessToken");
+//        String url = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=" + wxAppletsAccessToken;
+//        Map<String, Object> param = new HashMap<>();
+//        param.put("expire_type", 1);
+//        param.put("expire_interval", 1);
+//        param.put("path", path);
+//        param.put("query", query);
+//        param.put("env_version", "release");
+//        HttpHeaders httpHeaders = new HttpHeaders();
+//        MediaType type=MediaType.parseMediaType("application/json;charset=UTF-8");
+//        httpHeaders.setContentType(type);
+//        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(param, httpHeaders);
+//        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
+//        String body1 = exchange.getBody();
+//        return body1;
+//    }
+//
+//
+//}
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java
index 1961a68..5432cb4 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java
@@ -2,16 +2,27 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.util.HttpClientUtil;
+import com.stylefeng.guns.modular.system.util.RedisUtil;
+import com.stylefeng.guns.modular.system.util.UUIDUtil;
 import org.apache.commons.codec.digest.DigestUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.*;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
 
 /**
  * 微信工具类
@@ -27,6 +38,7 @@
 
     @Autowired
     private RestTemplate restTemplate;
+
 
 
     /**
@@ -112,9 +124,28 @@
      * @return
      */
     public String getAccessToken(){
-        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx0e72f86394831b34&secret=930f857abc74f7bb5cbd89e1544c5669";
+        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxc89ecab90d24edd8&secret=bca863174d22736a4a9758a67484947e";
         String backData = restTemplate.getForObject(url, String.class);
         String accessToken = JSONObject.parseObject(backData).getString("access_token");
         return accessToken;
     }
+
+    public String getUrlLink(String path, String query) throws Exception{
+        String wxAppletsAccessToken = getAccessToken();
+        String url = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=" + wxAppletsAccessToken;
+        Map<String, Object> param = new HashMap<>();
+        param.put("expire_type", 1);
+        param.put("expire_interval", 1);
+        param.put("path", path);
+        param.put("query", query);
+        param.put("env_version", "release");
+        HttpHeaders httpHeaders = new HttpHeaders();
+        MediaType type=MediaType.parseMediaType("application/json;charset=UTF-8");
+        httpHeaders.setContentType(type);
+        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(param, httpHeaders);
+        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
+        String body1 = exchange.getBody();
+        return body1;
+    }
+
 }
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/transfer/controller/OrderTransferController.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/transfer/controller/OrderTransferController.java
index eb685d7..a8137a0 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/transfer/controller/OrderTransferController.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/transfer/controller/OrderTransferController.java
@@ -153,4 +153,15 @@
         }
     }
 
+    @ResponseBody
+    @PostMapping("/get/site")
+    @ApiOperation(value = "获取站点", tags = {"用户端-接送机"}, notes = "")
+    @ApiImplicitParams({
+
+    })
+    public ResultUtil site(double latitude, double longitude){
+
+
+    }
+
 }
diff --git a/UserNTTravel/guns-admin/target/classes/META-INF/spring-configuration-metadata.json b/UserNTTravel/guns-admin/target/classes/META-INF/spring-configuration-metadata.json
index 0588f89..312304b 100644
--- a/UserNTTravel/guns-admin/target/classes/META-INF/spring-configuration-metadata.json
+++ b/UserNTTravel/guns-admin/target/classes/META-INF/spring-configuration-metadata.json
@@ -72,12 +72,27 @@
     },
     {
       "sourceType": "com.stylefeng.guns.core.config.properties.MutiDataSourceProperties",
+      "name": "guns.muti-datasource.data-source-names",
+      "type": "java.lang.String[]"
+    },
+    {
+      "sourceType": "com.stylefeng.guns.core.config.properties.MutiDataSourceProperties",
       "name": "guns.muti-datasource.driver-class-name",
       "type": "java.lang.String"
     },
     {
       "sourceType": "com.stylefeng.guns.core.config.properties.MutiDataSourceProperties",
       "name": "guns.muti-datasource.driver-class-name",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.stylefeng.guns.core.config.properties.MutiDataSourceProperties",
+      "name": "guns.muti-datasource.driver-class-name",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.stylefeng.guns.core.config.properties.MutiDataSourceProperties",
+      "name": "guns.muti-datasource.password",
       "type": "java.lang.String"
     },
     {
@@ -102,6 +117,11 @@
     },
     {
       "sourceType": "com.stylefeng.guns.core.config.properties.MutiDataSourceProperties",
+      "name": "guns.muti-datasource.url",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.stylefeng.guns.core.config.properties.MutiDataSourceProperties",
       "name": "guns.muti-datasource.username",
       "type": "java.lang.String"
     },
@@ -112,6 +132,16 @@
     },
     {
       "sourceType": "com.stylefeng.guns.core.config.properties.MutiDataSourceProperties",
+      "name": "guns.muti-datasource.username",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.stylefeng.guns.core.config.properties.MutiDataSourceProperties",
+      "name": "guns.muti-datasource.validation-query",
+      "type": "java.lang.String"
+    },
+    {
+      "sourceType": "com.stylefeng.guns.core.config.properties.MutiDataSourceProperties",
       "name": "guns.muti-datasource.validation-query",
       "type": "java.lang.String"
     },
diff --git a/UserNTTravel/guns-admin/target/classes/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml b/UserNTTravel/guns-admin/target/classes/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml
index b56811d..e4b4588 100644
--- a/UserNTTravel/guns-admin/target/classes/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml
+++ b/UserNTTravel/guns-admin/target/classes/com/stylefeng/guns/modular/system/dao/mapping/InvoiceMapper.xml
@@ -22,7 +22,7 @@
 
 
 
-    <select id="queryMyInvoice" resultType="Invoice">
+    <select id="queryMyInvoice" resultType="map">
         select
         id as id,
         insertTime as insertTime,

--
Gitblit v1.7.1