Pu Zhibing
10 小时以前 bd6d5de56192630584f2e2678c199263534b3e70
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -198,6 +198,9 @@
    @Autowired
    private IAppOperationLogService appOperationLogService;
    @Resource
    private DriverMapper driverMapper;
    /**
@@ -411,8 +414,9 @@
                    }
                    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) {
@@ -427,8 +431,14 @@
                                    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;
@@ -437,6 +447,7 @@
                                    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);
@@ -451,66 +462,16 @@
                                            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) + "\"}");
                            }