| | |
| | | @Autowired |
| | | private IAppOperationLogService appOperationLogService; |
| | | |
| | | @Resource |
| | | private DriverMapper driverMapper; |
| | | |
| | | |
| | | |
| | | /** |
| | |
| | | } |
| | | try { |
| | | //获取空闲司机 |
| | | List<Driver> drivers = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), assignOrder.getDistance(), null);//获取范围内空闲司机 |
| | | List<Driver> drivers = driverMapper.queryIdleDriver_(1, serverCarModelId, null); |
| | | List<Integer> driverIds = drivers.stream().map(Driver::getId).collect(Collectors.toList()); |
| | | logger.info("指派的空闲司机【" + orderPrivateCar.getOrderNum() + "】:" + JSON.toJSONString(drivers)); |
| | | if(drivers.size() > 0) {//有司机,直接指派给司机 |
| | | Driver dr = null; |
| | | if (drivers.size() > 1) { |
| | |
| | | if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver1.getId())) { |
| | | continue; |
| | | } |
| | | // 判断司机是否有订单进行中 |
| | | long count = orderPrivateCarMapper.selectCount(new EntityWrapper<OrderPrivateCar>().eq("driverId", driver1.getId()) |
| | | .in("state", Arrays.asList(2, 3, 4, 5, 6, 11)).eq("isDelete", 1)); |
| | | if(0 != count){ |
| | | continue; |
| | | } |
| | | // 判断该司机是否有30分钟内预约单 |
| | | long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && |
| | | count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && |
| | | DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); |
| | | if (count > 0) { |
| | | continue; |
| | |
| | | if (null != value) { |
| | | Map<String, String> distance = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1); |
| | | double d = Double.parseDouble(distance.get("distance")); |
| | | logger.info("指派推单,司机距离【" + orderPrivateCar.getOrderNum() + "】" + driver1.getPhone() + ":" + d); |
| | | if(dis >= d){ |
| | | driver1.setDistance(d); |
| | | ds.add(driver1); |
| | |
| | | return o1.getDistance().compareTo(o2.getDistance()); |
| | | } |
| | | }); |
| | | logger.info("指派推单,符合条件的司机【" + orderPrivateCar.getOrderNum() + "】:" + JSON.toJSONString(ds)); |
| | | appOperationLogService.addAppOperationLog(uid, "{\"type\":\"指派推单,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(ds) + "\"}"); |
| | | dr = ds.get(0); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // for (int i = 0; i < assignOrder.getPeople(); i++) { |
| | | // Driver driver = null; |
| | | // int m = 0; |
| | | // int index = 0; |
| | | // // 查询预约单 |
| | | // List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); |
| | | // List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList()); |
| | | // for (int j = 0; j < drivers.size(); j++) { |
| | | // Driver driver1 = drivers.get(j); |
| | | // if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) { |
| | | // continue; |
| | | // } |
| | | // // 判断该司机是否有30分钟内预约单 |
| | | // long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && |
| | | // DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); |
| | | // if (count > 0) { |
| | | // continue; |
| | | // } |
| | | // String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); |
| | | // if (null != value) { |
| | | // Map<String, String> distance = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1); |
| | | // int d = Integer.parseInt(distance.get("distance")); |
| | | // if ((0 == m && null == driver) || (d < m)) { |
| | | // driver = drivers.get(j); |
| | | // m = d; |
| | | // index = j; |
| | | // } |
| | | // } |
| | | // } |
| | | // ds.add(driver); |
| | | // drivers.remove(index); |
| | | // } |
| | | // |
| | | // //再根据直线距离最短的司机中找出行驶距离最短的司机 |
| | | // Integer m = 0; |
| | | // for (Driver driver : ds) { |
| | | // String value = redisUtil.getValue("DRIVER" + driver.getId()); |
| | | // if (null != value) { |
| | | // Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLon + "," + startLat, value, 1); |
| | | // int distance1 = Integer.parseInt(distance.get("distance")); |
| | | // if ((0 == m && null == dr) || (distance1 < m.intValue())) { |
| | | // dr = driver; |
| | | // m = distance1; |
| | | // } |
| | | // } |
| | | // } |
| | | } else { |
| | | List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); |
| | | if (orderPrivateCarss.size() == 0) { |
| | | dr = drivers.get(0); |
| | | } |
| | | logger.info("指派推单,符合条件的司机【" + orderPrivateCar.getOrderNum() + "】:" + JSON.toJSONString(dr)); |
| | | appOperationLogService.addAppOperationLog(uid, "{\"type\":\"指派推单,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(dr) + "\"}"); |
| | | } |
| | | |