无关风月
2025-01-13 9e4bae869bdfb3783129b84409fe2ae0a3351100
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -362,6 +362,7 @@
            if(null != assignOrder){//配置了指派规则才处理
                //获取空闲司机
                List<Driver> drivers = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), assignOrder.getDistance(), null);//获取范围内空闲司机
                List<Integer> driverIds = drivers.stream().map(Driver::getId).collect(Collectors.toList());
                if(drivers.size() > 0){//有司机,直接指派给司机
                    Driver dr = null;
                    if(drivers.size() > 1){
@@ -370,16 +371,18 @@
                            Driver driver = null;
                            int m = 0;
                            int index = 0;
                            // 查询预约单
                            List<Integer> driverIds = drivers.stream().map(Driver::getId).collect(Collectors.toList());
                            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);
                                // 判断该司机是否有30分钟内预约单
                                long count = orderPrivateCarss.stream().filter(orderPrivateCar1 -> driver1.getId().equals(orderPrivateCar1.getDriverId())
                                        && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).minusMinutes(30).isBefore(LocalDateTime.now())
                                        && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).isAfter(LocalDateTime.now())).count();
                                if(orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())){
                                    continue;
                                }
                                if(count > 0){
                                    continue;
                                }
@@ -415,17 +418,35 @@
                            }
                        }
                    }else{
                        dr = drivers.get(0);
                        List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6,  11);
                        if(orderPrivateCarss.size()==0){
                            dr = drivers.get(0);
                        }
                    }
                    orderPrivateCar.setDriverId(dr.getId());
                    orderPrivateCar.setCompanyId(dr.getFranchiseeId() != null && dr.getFranchiseeId() != 0 ? dr.getFranchiseeId() : (
                            dr.getCompanyId() != null && dr.getCompanyId() != 0 ? dr.getCompanyId() : 1));
                    orderPrivateCar.setState(2);
                    orderPrivateCar.setCarId(dr.getCarId());
                    CarService query1 = carServiceMapper.query(1, dr.getCarId());
                    orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
                    orderPrivateCar.setSnatchOrderTime(new Date());
                    if(Objects.nonNull(dr)){
                        orderPrivateCar.setDriverId(dr.getId());
                        orderPrivateCar.setCompanyId(dr.getFranchiseeId() != null && dr.getFranchiseeId() != 0 ? dr.getFranchiseeId() : (
                                dr.getCompanyId() != null && dr.getCompanyId() != 0 ? dr.getCompanyId() : 1));
                        orderPrivateCar.setState(2);
                        orderPrivateCar.setCarId(dr.getCarId());
                        CarService query1 = carServiceMapper.query(1, dr.getCarId());
                        orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
                        orderPrivateCar.setSnatchOrderTime(new Date());
                        if(orderPrivateCar.getOrderType() != 2){
                            dr.setState(3);
                        }
                        driverService.updateById(dr);
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0);
                                pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0);
                                pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
                            }
                        }).start();
                    }
                    //调用高德创建轨迹
//                    String s = gdFalconUtil.selectTerminal(dr.getPhone());
@@ -441,22 +462,10 @@
//                        orderPrivateCar.setBindId(map.get("bindId"));
//                    }
                    if(orderPrivateCar.getOrderType() != 2){
                        dr.setState(3);
                    }
                    driverService.updateById(dr);
                    this.updateById(orderPrivateCar);
                    //发送短信给司机
//                    aLiSendSms.sendSms(dr.getPhone(), "SMS_216832951", "{\"" + orderPrivateCar.getStartAddress() + "\"}");
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0);
                            pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0);
                            pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
                        }
                    }).start();
                }
            }
        }
@@ -815,6 +824,7 @@
                            // 查询预约单
                            List<Integer> driverIds = list.stream().map(Driver::getId).collect(Collectors.toList());
                            List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6,  11);
                            List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList());
                            double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
                            int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
                            list = list.subList(0, lastIndex);//获取空闲司机中占比数据
@@ -823,6 +833,9 @@
                                long count = orderPrivateCars.stream().filter(orderPrivateCar1 -> driver.getId().equals(orderPrivateCar1.getDriverId())
                                        && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).minusMinutes(30).isBefore(LocalDateTime.now())
                                        && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).isAfter(LocalDateTime.now())).count();
                                if(orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())){
                                    continue;
                                }
                                if(count > 0){
                                    continue;
                                }