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