From 4f75e746dc006f487a1a7de8e14c497148911b0e Mon Sep 17 00:00:00 2001
From: guyue <1721849008@qq.com>
Date: 星期六, 16 八月 2025 00:30:09 +0800
Subject: [PATCH] 抢单以及转派

---
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java   |   90 +++++++
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java           |    6 
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java            |    2 
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java                         |    7 
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java         |  313 ++++++++++++++++++++++---
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverService.java                   |    7 
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java |  109 +++++++++
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java         |   11 
 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml                    |   78 ++++++
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml                  |   47 +++
 DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReassignService.java                 |    2 
 11 files changed, 628 insertions(+), 44 deletions(-)

diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java
index ee583d1..7b164fd 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/controller/OrderCrossCityController.java
@@ -1,27 +1,42 @@
 package com.stylefeng.guns.modular.crossCity.controller;
 
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.core.util.SpringContextHolder;
 import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.crossCity.dao.LineShiftMapper;
+import com.stylefeng.guns.modular.crossCity.model.LineShift;
+import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
+import com.stylefeng.guns.modular.crossCity.server.ILineShiftDriverService;
+import com.stylefeng.guns.modular.crossCity.server.ILineSiteService;
 import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
 import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityInfoWrapper;
 import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper;
 import com.stylefeng.guns.modular.crossCity.warpper.OrderWarpper;
+import com.stylefeng.guns.modular.system.model.Driver;
 import com.stylefeng.guns.modular.system.model.Reassign;
+import com.stylefeng.guns.modular.system.model.TDriverLine;
 import com.stylefeng.guns.modular.system.service.IDriverService;
 import com.stylefeng.guns.modular.system.service.IReassignService;
+import com.stylefeng.guns.modular.system.service.TDriverLineService;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
 import com.stylefeng.guns.modular.system.util.SystemException;
 import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
+import com.stylefeng.guns.modular.system.warpper.DriverInfoWarpper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 
 @Api
@@ -37,6 +52,12 @@
 
     @Autowired
     private IReassignService reassignService;
+
+    @Autowired
+    private LineShiftMapper lineShiftMapper;
+
+    @Autowired
+    private TDriverLineService driverLineService;
 //
 //    @Autowired
 //    private ICBCPayUtil icbcPayUtil;
@@ -73,6 +94,30 @@
      * @param request
      * @return
      */
+//    @ResponseBody
+//    @PostMapping("/api/orderCrossCity/reassignOrderCrossCityReassign")
+//    @ApiOperation(value = "提交改派申请(跨城)", tags = {"司机端-服务中"}, notes = "")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(value = "订单id(多个以逗号分隔)", name = "orderIds", required = true, dataType = "string"),
+//            @ApiImplicitParam(value = "改派支付方式(1=微信,2=支付宝,3=余额)", name = "payType", required = false, dataType = "int"),
+//            @ApiImplicitParam(value = "改派原因", name = "reason", required = true, dataType = "string"),
+//            @ApiImplicitParam(value = "备注", name = "remark", required = false, dataType = "string"),
+//            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+//    })
+//    public ResultUtil reassignOrderCrossCityReassign(Reassign reassign, String orderIds, HttpServletRequest request){
+//        try {
+//            Integer uid = driverService.getUserIdFormRedis(request);
+//            if(null == uid){
+//                return ResultUtil.tokenErr();
+//            }
+//            return reassignService.saveData_(reassign, orderIds, uid, null);
+//        }catch (SystemException s){
+//            return ResultUtil.error(s.getMsg());
+//        } catch (Exception e){
+//            e.printStackTrace();
+//            return ResultUtil.runErr();
+//        }
+//    }
     @ResponseBody
     @PostMapping("/api/orderCrossCity/reassignOrderCrossCityReassign")
     @ApiOperation(value = "提交改派申请(跨城)", tags = {"司机端-服务中"}, notes = "")
@@ -81,15 +126,16 @@
             @ApiImplicitParam(value = "改派支付方式(1=微信,2=支付宝,3=余额)", name = "payType", required = false, dataType = "int"),
             @ApiImplicitParam(value = "改派原因", name = "reason", required = true, dataType = "string"),
             @ApiImplicitParam(value = "备注", name = "remark", required = false, dataType = "string"),
+            @ApiImplicitParam(value = "改派司机id", name = "newDriverId", required = false, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResultUtil reassignOrderCrossCityReassign(Reassign reassign, String orderIds, HttpServletRequest request){
+    public ResultUtil reassignOrderCrossCityReassign(Reassign reassign, String orderIds,Integer newDriverId, HttpServletRequest request){
         try {
             Integer uid = driverService.getUserIdFormRedis(request);
             if(null == uid){
                 return ResultUtil.tokenErr();
             }
-            return reassignService.saveData_(reassign, orderIds, uid, null);
+            return reassignService.saveData_(reassign, orderIds, uid, null,newDriverId);
         }catch (SystemException s){
             return ResultUtil.error(s.getMsg());
         } catch (Exception e){
@@ -97,7 +143,47 @@
             return ResultUtil.runErr();
         }
     }
+//获取同线路下的司机
+    @ResponseBody
+    @PostMapping("/api/orderCrossCity/querySameLineDriver")
+    @ApiOperation(value = "获取同线路下的司机", tags = {"司机端-服务中"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "订单id(多个以逗号分隔)", name = "orderIds", required = true, dataType = "string"),
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil< List<DriverInfoWarpper>> querySameLineDriver(String orderIds, HttpServletRequest request){
+        try {
+            Integer driverId = driverService.getUserIdFormRedis(request);
+            if(null == driverId){
+                return ResultUtil.tokenErr();
+            }
+            //获取线路id
+            String[] split = orderIds.split(",");
+            OrderCrossCity orderCrossCity = orderCrossCityService.selectById(split[0]);
+            Integer lineId = orderCrossCity.getLineId();
+            //查出该线路的司机
+            EntityWrapper<TDriverLine>  driverLineWrapper =   new EntityWrapper<>();
+            driverLineWrapper.eq("lineId", lineId);
+            List<TDriverLine> tDriverLines = driverLineService.selectList(driverLineWrapper);
+            List<Integer> driverIds = tDriverLines.stream()
+                    .map(TDriverLine::getDriverid)
+                    .filter(id -> !id.equals(driverId))   // 去掉当前司机
+                    .distinct()                           // 去重
+                    .collect(Collectors.toList());
+            //获取司机及车辆信息
+            List<Map<String, Object>> maps = driverService.queryDriversByIds(driverIds);
+            List<DriverInfoWarpper> driverInfoWarppers = new ArrayList<>();
+            for (Map<String, Object> map : maps) {
+                DriverInfoWarpper driverInfoWarpper = DriverInfoWarpper.getDriverInfoWarpper(map);
+                driverInfoWarppers.add(driverInfoWarpper);
+            }
 
+            return ResultUtil.success(driverInfoWarppers);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
 
     /**
      * 获取已完成订单明细
diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
index 8969595..2ff9e81 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
@@ -156,4 +156,15 @@
      * @throws Exception
      */
     List<OrderCrossCity> queryMaturity() throws Exception;
+
+    String getOrderNum(Integer driverId, Integer lineShiftDriverId) throws Exception;
+
+    /**
+     * 抢单操作
+     * @param orderId
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception;
 }
diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
index 3675096..867187b 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -128,6 +128,9 @@
     @Autowired
     private GeodesyUtil geodesyUtil;
 
+    @Autowired
+    private ICarService carService;
+
     @Value("${filePath}")
     private String filePath;
 
@@ -953,6 +956,7 @@
      * @return
      * @throws Exception
      */
+    @Override
     public synchronized String getOrderNum(Integer driverId, Integer lineShiftDriverId) throws Exception{
         List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryOrders(driverId, lineShiftDriverId, Arrays.asList(2, 3, 4, 7));
         if(orderCrossCities.size() > 0){
@@ -968,4 +972,109 @@
             size++;
         }
     }
+
+    /**
+     * 抢单操作
+     * @param orderId
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public synchronized ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception {
+        OrderCrossCity orderCrossCity = selectById(orderId);
+
+        if(orderCrossCity.getState() == 9){
+            return ResultUtil.error("订单已取消");
+        }
+        if(orderCrossCity.getState() != 1){
+            return ResultUtil.error("手速有点慢哦,订单已被抢啦!");
+        }
+        Driver driver = driverService.selectById(uid);
+        orderCrossCity.setDriverId(uid);
+        orderCrossCity.setCarId(driver.getCarId());
+        orderCrossCity.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : (
+                driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1));
+        orderCrossCity.setState(2);
+        orderCrossCity.setSnatchOrderTime(new Date());
+
+        //调用高德创建轨迹
+        String s = gdFalconUtil.selectTerminal(driver.getPhone());
+        String track = gdFalconUtil.createTrack(s);
+        orderCrossCity.setTrackId(track);
+
+        //调用移动的小号接口
+        Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString());
+        Region region = regionMapper.query(geocode.get("districtCode"));
+        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1)));
+        if(String.valueOf(map.get("code")).equals("200")){
+            orderCrossCity.setTelX(map.get("telX"));
+            orderCrossCity.setBindId(map.get("bindId"));
+        }
+
+        this.updateById(orderCrossCity);
+
+           //修改司机为服务中
+        if (driver.getState() == 2) {
+            driver.setState(3);
+
+        }
+
+        //TODO:补充订单、支付明细信息
+        // 处理公司和司机收入(原支付方法中删除的逻辑移到这里)
+        Line line = lineService.selectById(orderCrossCity.getLineId());
+        Double speMoney = Double.valueOf(line.getRakeRate());
+        BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入
+        BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入
+        incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue());
+        incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue());
+
+        driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+        driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+        driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+        driverService.updateById(driver);
+
+        //推送相关代码------------------start----------------
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 1, orderCrossCity.getState());
+                pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 1, orderCrossCity.getState());
+//                if(orderCrossCity.getType() == 2){
+//                    pushUtil.pushFerryOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2);
+//                }
+            }
+        }).start();
+
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                pushUtil.pushDriverPosition(orderId, 1);
+            }
+        }).start();
+
+        systemNoticeService.addSystemNotice(2, "您已成功抢得跨城订单,请及时联系客户!", orderCrossCity.getDriverId());
+        systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver.getName().substring(0, 1) + "师傅,请保持电话畅通!", orderCrossCity.getUserId());
+
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                if(pushMinistryOfTransport){
+                    //上传数据
+                    pushMinistryOfTransportUtil.orderCreate(orderId);
+                    pushMinistryOfTransportUtil.orderMatch(orderId);
+                }
+            }
+        }).start();
+        //发送短信
+        try{
+            Car car = carService.selectById(orderCrossCity.getCarId());
+            SMSUtil.send(orderCrossCity.getPassengersPhone(), "您的订单已被司机" + driver.getName() + "接单,联系电话" + driver.getPhone() + "车牌号" + car.getCarLicensePlate() + "请耐心等待。", "2431012312845");
+//            String sData = aLiSendSms.sendSms(orderPrivateCar.getPassengersPhone(), "SMS_476900230", "{\"code1\":\"" + driver.getName() + "\",\"code2\":\"" + driver.getPhone() + "\",\"code3\":\"" + car.getCarLicensePlate() + "\"}");
+        }catch (Exception e){
+
+        }
+        return ResultUtil.success();
+    }
+
 }
diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java
index 711f372..ffcb13b 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java
@@ -98,4 +98,11 @@
      */
     Driver queryByTaxiAptitudeCard(@Param("taxiAptitudeCard") String taxiAptitudeCard);
 
+    /**
+     * 根据司机ID列表查询对应司机的信息
+     * @param driverIds 司机ID列表(如 [1,2,3])
+     * @return 列表中每个司机的信息Map
+     */
+    List<Map<String, Object>> queryDriversByIds(@Param("driverIds") List<Integer> driverIds);
+
 }
diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
index 13b8dbf..e2133ea 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
@@ -753,4 +753,51 @@
         from t_driver where flag != 3 and authState = 2 and taxiAptitudeCard = #{taxiAptitudeCard}
     </select>
 
+
+    <select id="queryDriversByIds" resultType="map">
+        select
+            a.id as id,
+            a.headImgUrl as avatar,
+            a.sex as sex,
+            a.`name` as `name`,
+            a.phone as phone,
+            a.balance as balance,
+            a.laveActivityMoney as laveActivityMoney,
+            a.activityMoney as activityMoney,
+            a.businessMoney as businessMoney,
+            a.laveBusinessMoney as laveBusinessMoney,
+            a.taxiAptitudeCard as taxiAptitudeCard,
+            DATE_FORMAT(a.networkCarlssueDate, '%Y-%m-%d') as networkCarlssueDate,
+            a.driverContactAddress_ as driverContactAddress_,
+            a.idCard as idCard,
+            a.appletsOpenId as appletsOpenId,
+            a.idCardImgUrl1 as idCardImgUrl1,
+            a.idCardImgUrl2 as idCardImgUrl2,
+            DATE_FORMAT(a.getDriverLicenseDate, '%Y-%m-%d') as getDriverLicenseDate,
+            (select GROUP_CONCAT(type Separator ',') from t_driver_service where driverId = a.id) as `type`,
+            a.placeOfPractice as placeOfPractice,
+            a.driveCardImgUrl as driveCardImgUrl,
+            a.networkCarlssueImg as networkCarlssueImg,
+            a.placeOfEmployment as placeOfEmployment,
+            (select `name` from t_company where 1 = 1 and if(a.companyId is null or a.companyId = 0, id = 1, if(a.franchiseeId is null or a.franchiseeId = 0, id = a.companyId, id = a.franchiseeId))) as company,
+            b.carLicensePlate as licensePlate,
+            b.carColor as carColor,
+            CONCAT(d.`name`, c.`name`) as brand,
+            (
+                    (select count(id) from t_order_private_car where driverId = a.id and state in (7, 8, 9)) +
+                    (select count(id) from t_order_taxi where driverId = a.id and state in (7, 8, 9)) +
+                    (select count(id) from t_order_cross_city where driverId = a.id and state in (6, 8, 9)) +
+                    (select count(id) from t_order_logistics where driverId = a.id and state in (6, 9))
+                ) as orderNum,
+            ((select sum(fraction) from t_order_evaluate where driverId = a.id) / (select count(fraction) from t_order_evaluate where driverId = a.id)) as score
+        from t_driver a
+                 left join t_car b on (a.carId = b.id)
+                 left join t_car_model c on (b.carModelId = c.id)
+                 left join t_car_brand d on (c.brandId = d.id)
+        where a.id in
+        <foreach collection="driverIds" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverService.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverService.java
index b01c5e2..3952c31 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverService.java
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverService.java
@@ -359,4 +359,11 @@
     Driver generateCode(Driver userInfo);
     String generateQrCodeTemp();
 
+    /**
+     * 根据司机ID列表查询对应司机的信息
+     * @param driverIds 司机ID列表(如 [1,2,3])
+     * @return 列表中每个司机的信息Map
+     */
+    List<Map<String, Object>> queryDriversByIds( List<Integer> driverIds);
+
 }
diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReassignService.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReassignService.java
index 0015498..ce3ff58 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReassignService.java
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IReassignService.java
@@ -26,7 +26,7 @@
      * @return
      * @throws Exception
      */
-    ResultUtil saveData_(Reassign reassign, String orderIds, Integer uid, Integer type) throws Exception;
+    ResultUtil saveData_(Reassign reassign, String orderIds, Integer uid, Integer type,Integer newDriverId) throws Exception;
 
 
     /**
diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
index 33db8ef..3c79bda 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -1694,6 +1694,12 @@
         }
         return "";
     }
+
+    @Override
+    public List<Map<String, Object>> queryDriversByIds(List<Integer> driverIds) {
+        return driverMapper.queryDriversByIds( driverIds);
+    }
+
     /**
      * 获取编号
      * @return
diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
index e45ac73..3764646 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -479,7 +479,7 @@
             case 2://出租
                 return orderTaxiService.grabOrder(orderId, uid);
             case 3://城际
-                return ResultUtil.success();//不作任何操作,跨城默认选择的司机
+                return orderCrossCityService.grabOrder(orderId, uid);
             case 4://同城小件
                 return orderLogisticsService.grabOrder(orderId, uid);
             case 5://跨城小件
diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
index 72261a4..67090e1 100644
--- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
+++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
@@ -1,7 +1,11 @@
 package com.stylefeng.guns.modular.system.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.api.OrderController;
+import com.stylefeng.guns.modular.crossCity.dao.LineShiftDriverMapper;
+import com.stylefeng.guns.modular.crossCity.model.LineShiftDriver;
 import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
 import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
 import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics;
@@ -9,6 +13,7 @@
 import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsSpreadService;
 import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
 import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
+import com.stylefeng.guns.modular.system.dao.CarModelMapper;
 import com.stylefeng.guns.modular.system.dao.DispatchMapper;
 import com.stylefeng.guns.modular.system.dao.ReassignMapper;
 import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
@@ -23,6 +28,9 @@
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -84,6 +92,20 @@
     @Value("${callbackPath}")
     private String callbackPath;
 
+    @Autowired
+    private IReassignService reassignService;
+
+    @Resource
+    private LineShiftDriverMapper lineShiftDriverMapper;
+
+    @Autowired
+    private OrderController orderController;
+
+    @Resource
+    private CarModelMapper carModelMapper;
+
+    @Autowired
+    private ICarService carService;
 
 
     /**
@@ -242,7 +264,7 @@
      * @throws Exception
      */
     @Override
-    public ResultUtil saveData_(Reassign reassign, String orderIds, Integer uid, Integer type) throws Exception {
+    public ResultUtil saveData_(Reassign reassign, String orderIds, Integer uid, Integer type,Integer newDriverId) throws Exception {
         type = null == type ? 2 : type;//现目前微信只支持小程序支付
         String content = reassign.getRemark();
         if(ToolUtil.isNotEmpty(content)){
@@ -285,12 +307,14 @@
             ids += reassign.getId() + ",";
         }
         ids = ids.substring(0, ids.length() - 1);
-        systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid);
 
-        //开始支付
-        if(null != reassign.getPayType()){
-            if(reassign.getPayType() == 1){//微信支付
-                String[] split1 = ids.split(",");
+
+        if(newDriverId == null) {
+            systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid);
+            //开始支付
+            if (null != reassign.getPayType()) {
+                if (reassign.getPayType() == 1) {//微信支付
+                    String[] split1 = ids.split(",");
 //                Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 9, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId());
 //                if(map.get("code").equals("200")){
 //                    for(String id : split1){
@@ -300,9 +324,9 @@
 //                }else{
 //                    resultUtil = ResultUtil.error(map.get("msg"), "");
 //                }
-            }
-            if(reassign.getPayType() == 2){//支付宝
-                String[] split1 = ids.split(",");
+                }
+                if (reassign.getPayType() == 2) {//支付宝
+                    String[] split1 = ids.split(",");
 //                Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 10, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/aliReassign", "", 2, "");
 //                if(map.get("code").equals("200")){
 //                    for(String id : split1){
@@ -312,49 +336,258 @@
 //                }else{
 //                    resultUtil = ResultUtil.error(map.get("msg"), "");
 //                }
+                }
+                if (reassign.getPayType() == 3) {//余额
+                    for (String id : split) {
+                        Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1);
+                        query.setState(2);
+                        query.setPayTime(new Date());
+                        reassignMapper.updateById(query);
+                        //添加交易明细
+                        transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, 3, Integer.valueOf(id));
+                    }
+                    Double balance = driver.getBalance();
+                    if (null == balance || balance < totalMoney) {
+                        throw new SystemException("账户余额不足");
+                    }
+                    driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(totalMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    driverService.updateById(driver);
+
+
+                    //修改改派通知状态
+                    for (String id : split) {
+                        OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id);
+                        orderCrossCity.setOldState(orderCrossCity.getState());
+                        orderCrossCity.setState(11);
+                        orderCrossCity.setReassignNotice(2);
+                        orderCrossCityService.updateById(orderCrossCity);
+
+                        //添加已收入明细
+                        incomeService.saveData(1, orderCrossCity.getCompanyId(), 4, orderCrossCity.getId(), 3, reassign.getMoney());
+                    }
+                    systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid);
+                    //开始推送调度单
+                    Map<String, String> map = new HashMap<>();
+                    map.put("orderId", reassign.getOrderId().toString());
+                    map.put("orderType", reassign.getOrderType().toString());
+                    List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
+                    for (Dispatch dispatch : dispatches) {
+                        jgPushUtil.push(2, "有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
+                    }
+                }
             }
-            if(reassign.getPayType() == 3){//余额
-                for(String id : split){
-                    Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1);
-                    query.setState(2);
-                    query.setPayTime(new Date());
-                    reassignMapper.updateById(query);
-                    //添加交易明细
-                    transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, 3, Integer.valueOf(id));
+        }else {
+            //开始支付
+            if (null != reassign.getPayType()) {
+                if (reassign.getPayType() == 1) {//微信支付
+                    String[] split1 = ids.split(",");
+//                Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 9, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId());
+//                if(map.get("code").equals("200")){
+//                    for(String id : split1){
+//                        paymentRecordService.saveData(1, uid, 2, Integer.valueOf(id), 3, 1, aDouble, map.get("order_id"), 1);//添加预支付数据
+//                    }
+//                    resultUtil = ResultUtil.success(map.get("data"));
+//                }else{
+//                    resultUtil = ResultUtil.error(map.get("msg"), "");
+//                }
                 }
-                Double balance = driver.getBalance();
-                if(null == balance || balance < totalMoney){
-                    throw new SystemException("账户余额不足");
+                if (reassign.getPayType() == 2) {//支付宝
+                    String[] split1 = ids.split(",");
+//                Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 10, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/aliReassign", "", 2, "");
+//                if(map.get("code").equals("200")){
+//                    for(String id : split1){
+//                        paymentRecordService.saveData(1, uid, 2, Integer.valueOf(id), 3, 2, aDouble, map.get("order_id"), 1);//添加预支付数据
+//                    }
+//                    resultUtil = ResultUtil.success(map.get("data"));
+//                }else{
+//                    resultUtil = ResultUtil.error(map.get("msg"), "");
+//                }
                 }
-                driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(totalMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                driverService.updateById(driver);
+                if (reassign.getPayType() == 3) {//余额
+                    for (String id : split) {
+                        Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1);
+                        query.setState(2);
+                        query.setPayTime(new Date());
+                        reassignMapper.updateById(query);
+                        //添加交易明细
+                        transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, 3, Integer.valueOf(id));
+                    }
+                    Double balance = driver.getBalance();
+                    if (null == balance || balance < totalMoney) {
+                        throw new SystemException("账户余额不足");
+                    }
+                    driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(totalMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    driverService.updateById(driver);
 
 
-                //修改改派通知状态
-                for(String id : split){
-                    OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id);
-                    orderCrossCity.setOldState(orderCrossCity.getState());
-                    orderCrossCity.setState(11);
-                    orderCrossCity.setReassignNotice(2);
-                    orderCrossCityService.updateById(orderCrossCity);
+                    //修改改派通知状态
+                    for (String id : split) {
+                        OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id);
+                        orderCrossCity.setOldState(orderCrossCity.getState());
+                        orderCrossCity.setState(11);
+                        orderCrossCity.setReassignNotice(2);
+                        orderCrossCityService.updateById(orderCrossCity);
 
-                    //添加已收入明细
-                    incomeService.saveData(1, orderCrossCity.getCompanyId(), 4, orderCrossCity.getId(), 3, reassign.getMoney());
-                }
-                systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid);
-                //开始推送调度单
-                Map<String, String> map = new HashMap<>();
-                map.put("orderId", reassign.getOrderId().toString());
-                map.put("orderType", reassign.getOrderType().toString());
-                List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
-                for(Dispatch dispatch : dispatches){
-                    jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
+                        //添加已收入明细
+                        incomeService.saveData(1, orderCrossCity.getCompanyId(), 4, orderCrossCity.getId(), 3, reassign.getMoney());
+                    }
+                    systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid);
+                    //开始推送调度单
+//                    Map<String, String> map = new HashMap<>();
+//                    map.put("orderId", reassign.getOrderId().toString());
+//                    map.put("orderType", reassign.getOrderType().toString());
+//                    List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
+//                    for (Dispatch dispatch : dispatches) {
+//                        jgPushUtil.push(2, "有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
+//                    }
+
+                    //将所有改派单都给新的司机
+                    String[] split1 = ids.split(",");
+                    for (String s : split1) {
+                        selectCrossDriver(Integer.valueOf(s), newDriverId);
+                    }
+
+
                 }
             }
         }
         return resultUtil;
     }
+    /**
+     * 跨城出行订单改派司机
+     */
 
+    public Object selectCrossDriver(@RequestParam Integer reassign, @RequestParam Integer driverId) {
+        //修改原司机信息
+        //修改订单
+        Reassign tReassign = reassignService.selectById(reassign);
+        OrderCrossCity tOrderCrossCity = orderCrossCityService.selectById(tReassign.getOrderId());
+        Driver oldDriver = driverService.selectById(tReassign.getOriginalDriverId());
+        LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(tOrderCrossCity.getLineShiftDriverId());
+        lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat() ?
+                lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber());
+        String seat = "";
+        String[] split = tOrderCrossCity.getSeatNumber().split(",");
+        for(String s : split){
+            seat += s + ",";
+        }
+        seat = lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1);
+
+        //总和大于总座位数的情况
+        if(lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat()){
+            seat = "";
+            for(int i = 1; i <= lineShiftDriver.getTotalSeat(); i++){
+                seat += i + ",";
+            }
+            seat = seat.substring(0, seat.length() - 1);
+        }
+        lineShiftDriver.setLaveSeatNumber(seat);
+        lineShiftDriverMapper.updateById(lineShiftDriver);
+        if(lineShiftDriver.getLaveSeat() >= lineShiftDriver.getTotalSeat()){
+            oldDriver.setState(2);
+            driverService.updateById(oldDriver);
+        }
+
+        //修改新司机数据
+        List<LineShiftDriver> query = lineShiftDriverMapper.queryByDriver(lineShiftDriver.getLineShiftId(), driverId, tOrderCrossCity.getTravelTime());
+        LineShiftDriver lineShiftDriver1 = null;
+
+        if(query.size() == 0){
+//            return ResultUtil.error("司机没有预约班次");
+            CarModel carModel = carModelMapper.selectById(carService.selectById(driverService.selectById(driverId).getCarId()).getCarModelId());
+
+            LineShiftDriver lineShiftDriver0 = new LineShiftDriver();
+            lineShiftDriver0.setLineShiftId(lineShiftDriver.getLineShiftId());
+            lineShiftDriver0.setDriverId(driverId);
+            lineShiftDriver0.setDay(lineShiftDriver.getDay());
+            lineShiftDriver0.setTotalSeat(carModel.getSeat() - 1);
+            lineShiftDriver0.setLaveSeat(carModel.getSeat() - 1);
+            lineShiftDriver0.setInserTime(new Date());
+            String seatNumber = "";
+            for(int i = 1; i < carModel.getSeat(); i++){
+                seatNumber += i + ",";
+            }
+            lineShiftDriver0.setLaveSeatNumber(seatNumber.substring(0, seatNumber.length() - 1));
+
+            Integer insert = lineShiftDriverMapper.insert(lineShiftDriver0);
+            lineShiftDriver1 = lineShiftDriver0;
+
+        }else {
+             lineShiftDriver1 = query.get(0);
+
+        }
+        if(lineShiftDriver1.getLaveSeat() < tOrderCrossCity.getPeopleNumber()){
+            return ResultUtil.runErr("司机车辆剩余座位数不足");
+        }
+        lineShiftDriver1.setLaveSeat(lineShiftDriver1.getLaveSeat() - tOrderCrossCity.getPeopleNumber());
+        String[] split1 = lineShiftDriver1.getLaveSeatNumber().split(",");
+        String seat1 = "";//使用
+        String seat2 = "";//未使用
+        for(int i = 0; i < tOrderCrossCity.getPeopleNumber(); i++){
+            seat1 += split1[i] + ",";
+        }
+        for(int i = tOrderCrossCity.getPeopleNumber(); i < split1.length; i++){
+            seat2 += split1[i] + ",";
+        }
+        lineShiftDriver1.setLaveSeatNumber(seat2);
+        lineShiftDriverMapper.updateById(lineShiftDriver1);
+        Driver driver = driverService.selectById(driverId);
+//        if(driver.getState() == 1){
+//            return ResultUtil.error("司机还未上班呢");
+//        }
+//        if(driver.getState() == 2){
+//            driver.setState(3);
+//        }
+
+        //修改订单数据
+        tOrderCrossCity.setDriverId(driverId);
+        tOrderCrossCity.setCarId(driver.getCarId());
+        tOrderCrossCity.setSeatNumber(seat1);
+        tOrderCrossCity.setState(tOrderCrossCity.getOldState());
+        tOrderCrossCity.setLineShiftDriverId(lineShiftDriver1.getId());
+        tOrderCrossCity.setOldState(null);
+        tOrderCrossCity.setIsReassign(2);
+        try {
+            tOrderCrossCity.setOrderNum(orderCrossCityService.getOrderNum(driverId, tOrderCrossCity.getLineShiftDriverId()));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        orderCrossCityService.updateAllColumnById(tOrderCrossCity);
+
+        //修改专车改派订单
+        tReassign.setNowDriverId(driverId);
+        tReassign.setNowCarId(driver.getCarId());
+        tReassign.setState(3);
+        tReassign.setCompleteTime(new Date());
+        reassignService.updateById(tReassign);
+
+        //修改收入明细,转给新司机(因为是先支付金额)
+        List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("userType", 2).eq("objectId", oldDriver.getId()).eq("type", 2).eq("incomeId", tReassign.getOrderId()).eq("orderType", 3));
+        if(incomes.size() > 0){
+            Income income = incomes.get(0);
+            income.setObjectId(driverId);
+            incomeService.updateById(income);
+
+            oldDriver.setBusinessMoney(oldDriver.getBusinessMoney() - income.getMoney());
+            oldDriver.setLaveBusinessMoney(oldDriver.getLaveBusinessMoney() - income.getMoney());
+            oldDriver.setBalance(oldDriver.getBalance()-income.getMoney());
+
+            driver.setBusinessMoney(driver.getBusinessMoney() + income.getMoney());
+            driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() + income.getMoney());
+            driver.setBalance(driver.getBalance()+income.getMoney());
+
+        }
+        driverService.updateById(oldDriver);
+        driverService.updateById(driver);
+        //增加推送
+//        Map<String,String> map = new HashMap<>();
+//        map.put("orderId", tOrderCrossCity.getId().toString());
+//        map.put("orderType", "3");
+        String result = orderController.pushOrderState(tOrderCrossCity.getId(), 3);
+//        String result = HttpRequestUtil.postRequest(PushURL.order_push_url, map);
+        System.out.println("跨城出行改派:【orderId="+tOrderCrossCity.getId().toString()+"】,调用接口:"+result);
+        return result;
+    }
 
 
 
diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
index 2c74ed0..b040aee 100644
--- a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
+++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
@@ -327,4 +327,82 @@
         left join t_car_brand d on (c.brandId = d.id)
         where a.id = #{id}
     </select>
+
+    <select id="queryDriversByLineAndCarModel" resultType="Driver">
+        select
+        id as id,
+        account as account,
+        jobNumber as jobNumber,
+        phone as phone,
+        password as password,
+        name as name,
+        sex as sex,
+        idCard as idCard,
+        companyId as companyId,
+        franchiseeId as franchiseeId,
+        headImgUrl as headImgUrl,
+        faceImgUrl as faceImgUrl,
+        idCardImgUrl1 as idCardImgUrl1,
+        idCardImgUrl2 as idCardImgUrl2,
+        placeOfEmployment as placeOfEmployment,
+        birthday as birthday,
+        bankCardNumber as bankCardNumber,
+        driverNationality as driverNationality,
+        driverNation as driverNation,
+        driverMaritalStatus as driverMaritalStatus,
+        driverLanguageLevel as driverLanguageLevel,
+        driverEducation as driverEducation,
+        driverCensus as driverCensus,
+        driverAddress as driverAddress,
+        driverContactAddress as driverContactAddress,
+        driverAge as driverAge,
+        driveCard as driveCard,
+        driveCardImgUrl as driveCardImgUrl,
+        driverType as driverType,
+        getDriverLicenseDate as getDriverLicenseDate,
+        driverLicenseOn as driverLicenseOn,
+        driverLicenseOff as driverLicenseOff,
+        taxiDriver as taxiDriver,
+        taxiAptitudeCard as taxiAptitudeCard,
+        networkCarlssueImg as networkCarlssueImg,
+        networkCarlssueOrganization as networkCarlssueOrganization,
+        networkCarlssueDate as networkCarlssueDate,
+        getNetworkCarProofDate as getNetworkCarProofDate,
+        networkCarProofOn as networkCarProofOn,
+        networkCarProofOff as networkCarProofOff,
+        registerDate as registerDate,
+        fullTimeDriver as fullTimeDriver,
+        inDriverBlacklist as inDriverBlacklist,
+        commercialType as commercialType,
+        contractCompany as contractCompany,
+        contractOn as contractOn,
+        contractOff as contractOff,
+        emergencyContact as emergencyContact,
+        emergencyContactPhone as emergencyContactPhone,
+        emergencyContactAddress as emergencyContactAddress,
+        remark as remark,
+        isPlatCar as isPlatCar,
+        carId as carId,
+        authState as authState,
+        state as state,
+        addType as addType,
+        balance as balance,
+        flag as flag,
+        insertTime as insertTime,
+        insertUser as insertUser,
+        updateTime as updateTime,
+        updateUser as updateUser
+        from t_driver
+        where flag != 3 and state = 2 and authState = 2
+        and id in
+        (
+        select driverId from t_driver_work where startTime &lt; now() and state = 1 and `type` like CONCAT('%', #{type}, '%')
+        )
+        and id in (select driverId from t_driver_orders where `type` = 3)
+        and carId in (select carId from t_car_service where `type` = 3
+        <if test="null != serverCarModelId">
+            and serverCarModelId = #{serverCarModelId}
+        </if>
+        )
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.7.1