From 0a20f349bffa7a7d7e0af246013473d2f72c4a6f Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期六, 12 四月 2025 18:12:36 +0800
Subject: [PATCH] 修改bug

---
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAssignOrderService.java                   |    7 +
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java              |  195 +++++++++++++++++++++------
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java                |    5 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java  |    4 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java                 |   16 +-
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java                                  |   12 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AssignOrderMapper.xml                  |   13 +
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AssignOrderServiceImpl.java           |   12 +
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml                       |   13 -
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyCityServiceImpl.java           |   20 ++
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java                                |   10 +
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java |    4 
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AssignOrderMapper.java                         |    7 +
 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AssignOrder.java                             |   90 ++++++++++++
 14 files changed, 332 insertions(+), 76 deletions(-)

diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index 3cfd671..80ef095 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -478,7 +478,7 @@
             return orderService.confirmFees(language, orderId, orderType, type, travelFee, parkingFee, crossingFee, uid);
         }catch (Exception e){
             e.printStackTrace();
-            return ResultUtil.runErr();
+            return ResultUtil.runErr(null, e.getMessage());
         }
     }
 
@@ -711,7 +711,7 @@
             return ResultUtil.success(MoneyInfoWarpper.getMoneyInfoWarpper(map));
         }catch (Exception e){
             e.printStackTrace();
-            return ResultUtil.runErr();
+            return ResultUtil.runErr(null, e.getMessage());
         }
     }
 
@@ -995,7 +995,7 @@
                             try {
                                 Thread.sleep(3000L);
                             } catch (InterruptedException e) {
-                                throw new RuntimeException(e);
+                                e.printStackTrace();
                             }
                         }
                     }else{
@@ -1017,7 +1017,7 @@
                             try {
                                 Thread.sleep(3000L);
                             } catch (InterruptedException e) {
-                                throw new RuntimeException(e);
+                                e.printStackTrace();
                             }
                         }
                     }else{
@@ -1050,7 +1050,7 @@
                             try {
                                 Thread.sleep(3000L);
                             } catch (InterruptedException e) {
-                                throw new RuntimeException(e);
+                                e.printStackTrace();
                             }
                         }
                     }else{
@@ -1072,7 +1072,7 @@
                             try {
                                 Thread.sleep(3000L);
                             } catch (InterruptedException e) {
-                                throw new RuntimeException(e);
+                                e.printStackTrace();
                             }
                         }
                     }else{
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
index d4a360d..6525703 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
@@ -1143,7 +1143,7 @@
                 try {
                     Thread.sleep(3000L);
                 } catch (InterruptedException e) {
-                    throw new RuntimeException(e);
+                    e.printStackTrace();
                 }
             }
         }else{
@@ -1161,7 +1161,7 @@
                 try {
                     Thread.sleep(3000L);
                 } catch (InterruptedException e) {
-                    throw new RuntimeException(e);
+                    e.printStackTrace();
                 }
             }
         }
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 766aee4..49f5729 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -746,7 +746,7 @@
                 try {
                     Thread.sleep(3000L);
                 } catch (InterruptedException e) {
-                    throw new RuntimeException(e);
+                    e.printStackTrace();
                 }
             }
         }else{
@@ -765,7 +765,7 @@
                 try {
                     Thread.sleep(3000L);
                 } catch (InterruptedException e) {
-                    throw new RuntimeException(e);
+                    e.printStackTrace();
                 }
             }
         }
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AssignOrderMapper.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AssignOrderMapper.java
new file mode 100644
index 0000000..6a29648
--- /dev/null
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/AssignOrderMapper.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.AssignOrder;
+
+public interface AssignOrderMapper extends BaseMapper<AssignOrder> {
+}
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AssignOrderMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AssignOrderMapper.xml
new file mode 100644
index 0000000..d1ca253
--- /dev/null
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/AssignOrderMapper.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stylefeng.guns.modular.system.dao.AssignOrderMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.AssignOrder">
+        <id column="id" property="id" />
+        <result column="companyId" property="companyId" />
+        <result column="distance" property="distance" />
+        <result column="type" property="type" />
+        <result column="people" property="people"/>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
index 0643a44..71aa810 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml
@@ -332,15 +332,10 @@
         )
         and id in (select driverId from t_driver_orders where `type` = #{type})
         and carId in (select carId from t_car_service where `type` = #{type}
-        
-        <if test="null != serverCarModelId">
-            and serverCarModelId = #{serverCarModelId}
-        </if>
+            <if test="null != serverCarModelId">
+                and serverCarModelId = #{serverCarModelId}
+            </if>
         )
-        ) as aa <!--where aa.id not in (
-        select driverId from t_order_private_car where isDelete = 1 and driverPay = 1 and state in (7, 8, 9)
-        union all
-        select driverId from t_order_logistics where isDelete = 1 and driverPay = 1 and state != 10
-        )-->
+        ) as aa
     </select>
 </mapper>
\ No newline at end of file
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AssignOrder.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AssignOrder.java
new file mode 100644
index 0000000..ff8b385
--- /dev/null
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/AssignOrder.java
@@ -0,0 +1,90 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+/**
+ * 订单指派范围配置
+ */
+@TableName("t_assign_order")
+public class AssignOrder {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 企业id
+     */
+    @TableField("companyId")
+    private Integer companyId;
+    /**
+     * 指派范围(公里)
+     */
+    @TableField("distance")
+    private Double distance;
+    /**
+     * 1=专车,2=出租车,3=小件物流
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 用于计算实际行驶里程最近的人数范围
+     */
+    @TableField("people")
+    private Integer people;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
+    public Double getDistance() {
+        return distance;
+    }
+
+    public void setDistance(Double distance) {
+        this.distance = distance;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public Integer getPeople() {
+        return people;
+    }
+
+    public void setPeople(Integer people) {
+        this.people = people;
+    }
+
+    @Override
+    public String toString() {
+        return "AssignOrder{" +
+                "id=" + id +
+                ", companyId=" + companyId +
+                ", distance=" + distance +
+                ", type=" + type +
+                ", people=" + people +
+                '}';
+    }
+}
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAssignOrderService.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAssignOrderService.java
new file mode 100644
index 0000000..93419e8
--- /dev/null
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IAssignOrderService.java
@@ -0,0 +1,7 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.AssignOrder;
+
+public interface IAssignOrderService extends IService<AssignOrder> {
+}
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AssignOrderServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AssignOrderServiceImpl.java
new file mode 100644
index 0000000..0784fc8
--- /dev/null
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/AssignOrderServiceImpl.java
@@ -0,0 +1,12 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.AssignOrderMapper;
+import com.stylefeng.guns.modular.system.model.AssignOrder;
+import com.stylefeng.guns.modular.system.service.IAssignOrderService;
+import org.springframework.stereotype.Service;
+
+
+@Service
+public class AssignOrderServiceImpl extends ServiceImpl<AssignOrderMapper, AssignOrder> implements IAssignOrderService {
+}
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyCityServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyCityServiceImpl.java
index 2da3fa6..9c3cf12 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyCityServiceImpl.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CompanyCityServiceImpl.java
@@ -108,7 +108,15 @@
             String englishName = city1.getEnglishName();
             String frenchName = city1.getFrenchName();
             for (String s : city) {
-                if(s.indexOf(chineseName) != -1 || s.indexOf(englishName) != -1 || s.indexOf(frenchName) != -1){
+                if(s.equals(chineseName)){
+                    collect.add(city1.getId());
+                    break;
+                }
+                if(s.equals(englishName)){
+                    collect.add(city1.getId());
+                    break;
+                }
+                if(s.equals(frenchName)){
                     collect.add(city1.getId());
                     break;
                 }
@@ -140,7 +148,15 @@
             String englishName = city1.getEnglishName();
             String frenchName = city1.getFrenchName();
             for (String s : city) {
-                if(s.indexOf(chineseName) != -1 || s.indexOf(englishName) != -1 || s.indexOf(frenchName) != -1){
+                if(s.equals(chineseName)){
+                    collect.add(city1.getId());
+                    break;
+                }
+                if(s.equals(englishName)){
+                    collect.add(city1.getId());
+                    break;
+                }
+                if(s.equals(frenchName)){
                     collect.add(city1.getId());
                     break;
                 }
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
index 2cfbb94..2d1d1af 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -1196,7 +1196,7 @@
             //检测是否有未完成的订单
             List<Map<String, Object>> list = orderService.queryOrderList(1, 1, 10, uid, language);
             if(list.size() > 0){
-                return ResultUtil.error(language == 1 ? "还有未完成的订单,不能进行下班操作" : language == 2 ? "There are still outstanding orders, can not be off-duty operation" : "Il y a encore des commandes en suspens qui ne peuvent pas être exécutées");
+                return ResultUtil.error(language == 1 ? "还有未完成的订单,不能进行下班操作" : language == 2 ? "Outstanding orders ! So you can't get off work" : "Commandes en suspens ! Vous ne pouvez pas quitter le travail");
             }
             driverWork.setEndTime(new Date());
             driverWork.setState(2);
@@ -1410,7 +1410,7 @@
             //检测是否有未完成的订单
             List<Map<String, Object>> list = orderService.queryOrderList(1, 1, 10, uid, language);
             if(list.size() > 0){
-                return ResultUtil.error(language == 1 ? "还有未完成的订单,不能进行下班操作" : language == 2 ? "There are still outstanding orders, can not be off-duty operation" : "Il y a encore des commandes en suspens qui ne peuvent pas être exécutées");
+                return ResultUtil.error(language == 1 ? "还有未完成的订单,不能进行下班操作" : language == 2 ? "Outstanding orders ! So you can't get off work" : "Commandes en suspens ! Vous ne pouvez pas quitter le travail");
             }
             driverWork.setEndTime(new Date());
             driverWork.setState(2);
@@ -3287,6 +3287,7 @@
     @Override
     public List<Driver> queryIdleDriver(Integer userId, Integer type, Integer serverCarModelId, Double lon, Double lat, Double distance, Integer companyId) throws Exception {
         List<Driver> drivers = driverMapper.queryIdleDriver_(type, serverCarModelId, companyId);
+        System.err.println("派单查询的司机:" + JSON.toJSONString(drivers));
         String tripId = redisUtil.getValue("trip" + userId);
         List<Driver> list = new ArrayList<>();
         for(Driver driver : drivers){
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
index 245f79a..076bc8f 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -1304,12 +1304,12 @@
     @Override
     public void overGoogleOrder() {
         List<OrderPrivateCar> privateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().isNotNull("tripId")
-                .eq("isover", 0).in("state", Arrays.asList(7, 8, 9, 10)).eq("isDelete", 1));
+                .eq("isover", 0).in("state", Arrays.asList(6, 7, 8, 9, 10, 12)).eq("isDelete", 1));
         for (OrderPrivateCar privateCar : privateCars) {
             Integer state = privateCar.getState();
             String tripId = privateCar.getTripId();
             String trip = fleetEngineUtil.getTrip(tripId);
-            if("" == trip){
+            if(null != trip && "" == trip){
                 privateCar.setIsover(1);
                 orderPrivateCarService.updateById(privateCar);
                 continue;
@@ -1332,7 +1332,7 @@
                             try {
                                 Thread.sleep(3000L);
                             } catch (InterruptedException e) {
-                                throw new RuntimeException(e);
+                                e.printStackTrace();
                             }
                         }
                     }else{
@@ -1354,7 +1354,7 @@
                             try {
                                 Thread.sleep(3000L);
                             } catch (InterruptedException e) {
-                                throw new RuntimeException(e);
+                                e.printStackTrace();
                             }
                         }
                     }else{
@@ -1365,12 +1365,12 @@
             }
         }
         List<OrderLogistics> orderLogisticsList = orderLogisticsService.selectList(new EntityWrapper<OrderLogistics>().isNotNull("tripId")
-                .eq("isover", 0).in("state", Arrays.asList(7, 8, 9, 10)).eq("isDelete", 1));
+                .eq("isover", 0).in("state", Arrays.asList(6, 7, 8, 9, 10, 12)).eq("isDelete", 1));
         for (OrderLogistics orderLogistics : orderLogisticsList) {
             Integer state = orderLogistics.getState();
             String tripId = orderLogistics.getTripId();
             String trip = fleetEngineUtil.getTrip(tripId);
-            if("" == trip){
+            if(null != trip && "" == trip){
                 orderLogistics.setIsover(1);
                 orderLogisticsService.updateById(orderLogistics);
                 continue;
@@ -1393,7 +1393,7 @@
                             try {
                                 Thread.sleep(3000L);
                             } catch (InterruptedException e) {
-                                throw new RuntimeException(e);
+                                e.printStackTrace();
                             }
                         }
                     }else{
@@ -1415,7 +1415,7 @@
                             try {
                                 Thread.sleep(3000L);
                             } catch (InterruptedException e) {
-                                throw new RuntimeException(e);
+                                e.printStackTrace();
                             }
                         }
                     }else{
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
index 03d7d45..576bc6d 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
@@ -65,6 +65,9 @@
 
     @Autowired
     private PayMoneyUtil payMoneyUtil;
+    
+    @Resource
+    private IDriverWorkService driverWorkService;
 
     /*@Autowired
     private ICBCPayUtil icbcPayUtil;*/
@@ -128,6 +131,9 @@
     
     @Resource
     private QuartzUtil quartzUtil;
+    
+    @Resource
+    private IAssignOrderService assignOrderService;
 
 
 
@@ -207,26 +213,74 @@
     
         
         //开始自动完成改派
+        List<Driver> drivers = new ArrayList<>();
         switch (reassign.getOrderType()){
             case 1:
                 OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
                 Company company = companyCityService.query1(orderPrivateCar.getUserId(), String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司
+                AssignOrder assignOrder = assignOrderService.selectOne(new EntityWrapper<AssignOrder>().eq("companyId", company.getId()).eq("type", 1));
+                if(null == assignOrder || assignOrder.getPeople() == 0) {//配置了指派规则才处理
+                    return resultUtil;
+                }
                 PushOrder pushOrder = pushOrderService.querys(1, 1, company.getId()).get(0);
                 //获取空闲司机
                 List<Driver> list = driverService.queryIdleDriver(orderPrivateCar.getUserId(), 1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
                 System.err.println("【" + orderPrivateCar.getId() + "】空闲司机:" + JSON.toJSONString(list));
-                if(list.size() > 0){
-                    Optional<Driver> optional = list.stream().filter(d -> !d.getId().equals(orderPrivateCar.getDriverId())).findFirst();
-                    if(optional.isPresent()){
-                        Driver driver1 = optional.get();
+                drivers = list.stream().filter(d -> !d.getId().equals(orderPrivateCar.getDriverId())).collect(Collectors.toList());
+                if(drivers.size() > 0) {//有司机,直接指派给司机
+                    Driver dr = null;
+                    if (drivers.size() > 1) {
+                        List<Driver> ds = new ArrayList<>();//存储直线距离最近的几个司机
+                        for (int i = 0; i < assignOrder.getPeople(); i++) {
+                            Driver driver1 = null;
+                            long m = 0;
+                            int index = 0;
+                            for (int j = 0; j < drivers.size(); j++) {
+                                String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId());
+                                if (null != value) {
+                                    String[] split = value.split(",");
+                                    DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0]), tripId);
+                                    Long distance = distancematrix.getDistance();
+                                    if ((0 == m && null == driver1) || (distance < m)) {
+                                        driver1 = drivers.get(j);
+                                        m = distance;
+                                        index = j;
+                                    }
+                                }
+                            }
+                            ds.add(driver1);
+                            drivers.remove(index);
+                        }
+                    
+                        //再根据直线距离最短的司机中找出行驶距离最短的司机
+                        Long m = 0L;
+                        for (Driver driver1 : ds) {
+                            String value = redisUtil.getValue("DRIVER" + driver1.getId());
+                            if (null != value) {
+                                String[] split = value.split(",");
+                                DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0]), tripId);
+                                Long d = distancematrix.getDistance();
+                                if ((0 == m && null == dr) || (d.intValue() < m.intValue())) {
+                                    dr = driver1;
+                                    m = d;
+                                }
+                            }
+                        }
+                    } else {
+                        dr = drivers.get(0);
+                    }
+                    Driver driver1 = driverService.selectById(dr.getId());
+                    DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", dr.getId())
+                            .eq("state", 1).like("type", "1"));
+                    if(driver.getState() == 2 && null != driverWork) {
                         String text = "";
                         reassign.setState(3);
                         reassign.setNowDriverId(driver1.getId());
                         reassign.setNowCarId(driver1.getCarId());
                         reassign.setCompleteTime(new Date());
                         this.updateById(reassign);
-    
-    
+                    
+                    
                         Integer language1 = driver1.getLanguage();
                         switch (language1){
                             case 1:
@@ -238,7 +292,7 @@
                             case 3:
                                 text = "Reçu une nouvelle commande de course, à partir de " + orderPrivateCar.getStartAddress() + ", le trajet complet est d’environ " + orderPrivateCar.getEstimatedMileage();
                                 break;
-        
+                        
                         }
                         String audioUrl = "";
                         String fileName = "pushOrder" + orderPrivateCar.getDriverId() + UUIDUtil.getRandomCode(5) + ".mp3";
@@ -269,7 +323,7 @@
                                 }
                             }
                         }, 30000);
-    
+                    
                         orderPrivateCar.setDriverId(driver1.getId());
                         orderPrivateCar.setCarId(driver1.getCarId());
                         orderPrivateCar.setCompanyId(driver1.getFranchiseeId() != null && driver1.getFranchiseeId() != 0 ? driver1.getFranchiseeId() : (
@@ -280,7 +334,7 @@
                         if(!StringUtils.hasLength(orderPrivateCar.getTripId())){
                             orderPrivateCar.setTripId(UUIDUtil.getRandomCode());
                         }
-    
+                    
                         if(orderPrivateCar.getOrderType() == 1){
                             String value = redisUtil.getValue("DRIVER" + driver1.getId());
                             if(ToolUtil.isNotEmpty(value)) {
@@ -295,10 +349,10 @@
                         orderPrivateCarService.updateAllColumnById(orderPrivateCar);
                         driver1.setState(3);
                         driverService.updateById(driver1);
-    
+                    
                         driver.setState(2);
                         driverService.updateById(driver);
-    
+                    
                         //检查google车辆信息或者添加新的车辆信息
                         Car car = carService.selectById(orderPrivateCar.getCarId());
                         if(ToolUtil.isEmpty(car.getVehicleId())){
@@ -323,7 +377,7 @@
                                 }
                             }
                         }
-    
+                    
                         //修改google订单信息或者创建新的行程
                         String trip = fleetEngineUtil.getTrip(orderPrivateCar.getTripId());
                         if(ToolUtil.isEmpty(trip)){
@@ -363,15 +417,15 @@
                                 }
                             }
                         }
-    
-    
-    
+                    
+                    
+                    
                         //删除定时任务
                         quartzUtil.deleteQuartzTask("1_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
                         quartzUtil.deleteQuartzTask("2_1_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
                         quartzUtil.deleteQuartzTask("2_2_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
                         quartzUtil.deleteQuartzTask("3_" + orderPrivateCar.getId() + "_1","ORDER_TIME_OUT");
-    
+                    
                         /**
                          * 超时用户取消不收费的提醒
                          *   预约单:行程时间 + 配置不收费的时间 > 当前时间 (只弹一次)
@@ -384,13 +438,13 @@
                          *
                          * 预约单需要提前xx分钟提醒司机需要接乘客,过后每隔xx分钟提醒一次。超时后停止提醒
                          */
-    
+                    
                         //添加定时任务(普通任务)
                         SysOvertime reminderRules = sysOvertimeService.selectOne(new EntityWrapper<SysOvertime>().eq("companyId", driver1.getCompanyId()));
                         if(null != reminderRules){
                             CancleOrder cancleOrder = cancleOrderService.selectOne(new EntityWrapper<CancleOrder>().eq("companyId", driver1.getCompanyId()));
                             Integer driverTimeout = JSON.parseObject(cancleOrder.getContent()).getInteger("driverTimeout");
-        
+                        
                             //即时单
                             if(orderPrivateCar.getOrderType() == 1){
                                 //超时时间
@@ -407,7 +461,7 @@
                                 jobDataMap.put("describe", language1 == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language1 == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer");
                                 quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                                         , new Date(timeOut), timeOut, 0);
-            
+                            
                                 //超时循环提醒
                                 jobDataMap = new JobDataMap();
                                 jobDataMap.put("driverId", driver1.getId());
@@ -435,10 +489,10 @@
                                 jobDataMap.put("describe", language1 == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language1 == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer");
                                 quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                                         , new Date(timeOut), timeOut, 0);
-            
-            
+                            
+                            
                                 UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId());
-            
+                            
                                 //预约单出发首次提醒
                                 long travelTime = orderPrivateCar.getTravelTime().getTime() - reminderRules.getReserveTime() * 60000;
                                 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
@@ -455,7 +509,7 @@
                                                 "Vous allez chercher " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " à " + sdf.format(orderPrivateCar.getTravelTime()) + ", s’il vous plaît soyez à l’heure.");
                                 quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "2_1_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                                         , new Date(travelTime), travelTime, 0);
-            
+                            
                                 //预约单出发循环提醒
                                 jobDataMap = new JobDataMap();
                                 jobDataMap.put("driverId", driver1.getId());
@@ -470,7 +524,7 @@
                                                 "Vous allez chercher " + (ToolUtil.isEmpty(userInfo.getFirstName()) ? userInfo.getNickName() : userInfo.getFirstName() + " " + userInfo.getLastName()) + " à " + sdf.format(orderPrivateCar.getTravelTime()) + ", s’il vous plaît soyez à l’heure.");
                                 quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "2_2_" + orderPrivateCar.getId() + "_1", "ORDER_TIME_OUT", jobDataMap
                                         , new Date(travelTime + reminderRules.getReserveNext() * 60000), reminderRules.getReserveNext() * 60000, -1);
-            
+                            
                                 //超时循环提醒
                                 jobDataMap = new JobDataMap();
                                 jobDataMap.put("driverId", driver1.getId());
@@ -485,7 +539,7 @@
                                         , orderPrivateCar.getTravelTime(), reminderRules.getCar() * 60000, -1);
                             }
                         }
-    
+                    
                         //推送相关代码------------------start----------------
                         String finalAudioUrl = audioUrl;
                         new Thread(new Runnable() {
@@ -495,7 +549,7 @@
                                 pushUtil.pushOrderReassign(orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, finalAudioUrl);
                             }
                         }).start();
-    
+                    
                         Integer language2 = userInfoMapper.selectById(orderPrivateCar.getUserId()).getLanguage();
                         systemNoticeService.addSystemNotice(2, language1 == 1 ? "您已成功抢得打车订单,请及时联系客户!" :
                                 language1 == 2 ? "You have grabbed the ride order, please contact the client timely."
@@ -503,26 +557,76 @@
                         systemNoticeService.addSystemNotice(1, language2 == 1 ? "您的订单已指派给" + driver1.getFirstName() + "师傅,请保持电话畅通!" :
                                 language2 == 2 ? "Your order has been assigned to the driver- " + driver1.getFirstName() + ", please keep your line on."
                                         : "Votre commande a été attribuée au chauffeur- " + driver1.getFirstName() + ", S'il vous plaît, restez en ligne.", orderPrivateCar.getUserId());
+                    
                     }
                 }
                 break;
             case 4:
                 OrderLogistics orderLogistics = orderLogisticsService.selectById(reassign.getOrderId());
                 Company company1 = companyCityService.query1(orderLogistics.getUserId(), String.valueOf(orderLogistics.getStartLon()), String.valueOf(orderLogistics.getStartLat()));//获取起点所属分公司
+                AssignOrder assignOrder1 = assignOrderService.selectOne(new EntityWrapper<AssignOrder>().eq("companyId", company1.getId()).eq("type", 1));
+                if(null == assignOrder1 || assignOrder1.getPeople() == 0) {//配置了指派规则才处理
+                    return resultUtil;
+                }
                 PushOrder pushOrder1 = pushOrderService.querys(1, 1, company1.getId()).get(0);
                 //获取空闲司机
                 List<Driver> list1 = driverService.queryIdleDriver(orderLogistics.getUserId(), orderLogistics.getType(), orderLogistics.getServerCarModelId(), orderLogistics.getStartLon(), orderLogistics.getStartLat(), pushOrder1.getPushDistance(), null);//所有附近空闲司机
                 System.err.println("【" + orderLogistics.getId() + "】空闲司机:" + JSON.toJSONString(list1));
-                if(list1.size() > 0){
-                    Optional<Driver> optional = list1.stream().filter(d -> !d.getId().equals(orderLogistics.getDriverId())).findFirst();
-                    if(optional.isPresent()){
-                        Driver driver1 = optional.get();
+                drivers = list1.stream().filter(d -> !d.getId().equals(orderLogistics.getDriverId())).collect(Collectors.toList());
+                if(drivers.size() > 0){//有司机,直接指派给司机
+                    Driver dr = null;
+                    if(drivers.size() > 1){
+                        List<Driver> ds = new ArrayList<>();//存储直线距离最近的几个司机
+                        for(int i = 0; i < assignOrder1.getPeople(); i++){
+                            Driver driver1 = null;
+                            long m = 0;
+                            int index = 0;
+                            for(int j = 0; j < drivers.size(); j++){
+                                String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId());
+                                if(null != value){
+                                    String[] split = value.split(",");
+                                    DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderLogistics.getStartLat(), orderLogistics.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0]), tripId);
+                                    Long distance = distancematrix.getDistance();
+                                    if((0 == m && null == driver1) || (distance < m)){
+                                        driver1 = drivers.get(j);
+                                        m = distance;
+                                        index = j;
+                                    }
+                                }
+                            }
+                            ds.add(driver1);
+                            drivers.remove(index);
+                        }
+                    
+                        //再根据直线距离最短的司机中找出行驶距离最短的司机
+                        Long m = 0L;
+                        for(Driver driver1 : ds){
+                            String value = redisUtil.getValue("DRIVER" + driver1.getId());
+                            if(null != value){
+                                String[] split = value.split(",");
+                                DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderLogistics.getStartLat(), orderLogistics.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0]), tripId);
+                                Long d = distancematrix.getDistance();
+                                if((0 == m && null == dr) || (d.intValue() < m.intValue())){
+                                    dr = driver1;
+                                    m = d;
+                                }
+                            }
+                        }
+                    }else{
+                        dr = drivers.get(0);
+                    }
+                
+                    Driver driver1 = driverService.selectById(dr.getId());
+                    DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver1.getId())
+                            .eq("state", 1).like("type", "4"));
+                    if(driver1.getState() == 2 || null != driverWork){
+                    
                         reassign.setState(3);
                         reassign.setNowDriverId(driver1.getId());
                         reassign.setNowCarId(driver1.getCarId());
                         reassign.setCompleteTime(new Date());
                         this.updateById(reassign);
-    
+                    
                         String text = "";
                         Integer language1 = driver1.getLanguage();
                         switch (language1){
@@ -535,7 +639,7 @@
                             case 3:
                                 text = "Reçu une nouvelle commande de livraison, à partir de " + orderLogistics.getStartAddress() + ", le trajet complet est d’environ " + orderLogistics.getEstimatedMileage();
                                 break;
-        
+                        
                         }
                         String audioUrl = "";
                         String fileName = "pushOrder" + driver1.getId() + UUIDUtil.getRandomCode(5) + ".mp3";
@@ -566,8 +670,8 @@
                                 }
                             }
                         }, 30000);
-    
-    
+                    
+                    
                         orderLogistics.setDriverId(driver1.getId());
                         orderLogistics.setCarId(driver1.getCarId());
                         orderLogistics.setCompanyId(driver1.getFranchiseeId() != null && driver1.getFranchiseeId() != 0 ? driver1.getFranchiseeId() : (
@@ -591,10 +695,10 @@
                         //修改司机为服务中
                         driver1.setState(3);
                         driverService.updateById(driver1);
-    
+                    
                         driver.setState(2);
                         driverService.updateById(driver);
-    
+                    
                         //检查google车辆信息或者添加新的车辆信息
                         Car car = carService.selectById(orderLogistics.getCarId());
                         if(ToolUtil.isEmpty(car.getVehicleId())){
@@ -619,7 +723,7 @@
                                 }
                             }
                         }
-    
+                    
                         //修改google订单信息或者创建新的行程
                         String trip = fleetEngineUtil.getTrip(orderLogistics.getTripId());
                         if(ToolUtil.isEmpty(trip)){
@@ -659,14 +763,14 @@
                                 }
                             }
                         }
-    
-    
+                    
+                    
                         //删除定时任务
                         quartzUtil.deleteQuartzTask("1_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
                         quartzUtil.deleteQuartzTask("2_1_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
                         quartzUtil.deleteQuartzTask("2_2_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
                         quartzUtil.deleteQuartzTask("3_" + orderLogistics.getId() + "_4","ORDER_TIME_OUT");
-    
+                    
                         /**
                          * 超时用户取消不收费的提醒
                          *   即时单:预估到达预约点时间 + 配置不收费的时间 > 当前时间 (只弹一次)
@@ -676,7 +780,7 @@
                          * 定时提醒弹框
                          *   司机只要开始超时且还未到达预约点,则需要定时提醒
                          */
-    
+                    
                         //添加定时任务(普通任务)
                         SysOvertime reminderRules = sysOvertimeService.selectOne(new EntityWrapper<SysOvertime>().eq("companyId", driver1.getCompanyId()));
                         if(null != reminderRules){
@@ -696,7 +800,7 @@
                             jobDataMap.put("describe", language1 == 1 ? "您已超时" + driverTimeout + "分钟,用户可免费取消订单" : language1 == 2 ? "Reminder You are overdue for " + driverTimeout + " minutes The subscriber could cancel the order for free Confirm" : "Rappel Vous êtes en retard de " + driverTimeout + " minutes L’abonné peut annuler la commande gratuitement Confirmer");
                             quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "1_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap
                                     , new Date(timeOut), timeOut, 0);
-        
+                        
                             //超时循环提醒
                             jobDataMap = new JobDataMap();
                             jobDataMap.put("driverId", driver1.getId());
@@ -710,8 +814,8 @@
                             quartzUtil.addSimpleQuartzTask(OrderTimeOutJob.class, "3_" + orderLogistics.getId() + "_4", "ORDER_TIME_OUT", jobDataMap
                                     , orderLogistics.getEstimateArriveTime(), reminderRules.getCar() * 60000, -1);
                         }
-    
-    
+                    
+                    
                         //推送相关代码------------------start----------------
                         String finalAudioUrl = audioUrl;
                         new Thread(new Runnable() {
@@ -732,6 +836,9 @@
                 }
                 break;
         }
+        
+        
+        
         return resultUtil;
     }
 
diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
index a998427..a249de9 100644
--- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
+++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
@@ -5,6 +5,7 @@
 import javax.mail.internet.MimeBodyPart;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;
+import java.io.UnsupportedEncodingException;
 import java.util.Date;
 import java.util.Properties;
 
@@ -51,6 +52,7 @@
         //选择ssl方式
         gmailssl(props);
     
+        final String displayName = "I-GO";//昵称
         final String username = "i-gotech@i-go.group";// gmail 邮箱
         final String password = "mbhyptngnvlewdxo";// Google应用专用密码
         Session session = Session.getInstance(props,
@@ -61,8 +63,14 @@
                 });
         // 创建默认的MimeMessage对象
         MimeMessage message = new MimeMessage(session);
+        String nick="";
+        try {
+            nick=javax.mail.internet.MimeUtility.encodeText(displayName);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
         // 设置发件人
-        message.setFrom(new InternetAddress(username));
+        message.setFrom(new InternetAddress(nick + " <" + username + ">"));
         // 设置收件人
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(sentToEmail));
         // 设置邮件主题

--
Gitblit v1.7.1