无关风月
2026-02-12 21139cec92c837fe26f22ccd0855120ac866ceea
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -1,32 +1,38 @@
package com.xiaopeng.operation.utils;
import cn.hutool.core.bean.BeanUtil;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient;
import com.xiaopeng.api.model.operation.XpTradingStrategy;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.operation.service.IXpElectronicFenceAreaService;
import com.xiaopeng.operation.service.IXpTradingStrategyService;
import com.xiaopeng.operation.service.XpPointService;
import com.xiaopeng.operation.utils.mango.VehiclePositionService;
import com.xiaopeng.operation.utils.map.FastDistanceCalculator;
import com.xiaopeng.operation.vo.RouterVo;
import com.xiaopeng.operation.vo.VehiclePositionVo;
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -49,7 +55,6 @@
    @Autowired
    private VehiclePositionService vehiclePositionService;
    @Autowired
    private IXpTradingStrategyService xpTradingStrategyService;
@@ -59,6 +64,8 @@
    @Autowired
    private RedissonClient redissonClient;
    @Autowired
    private XpMapClient xpMapClient;
    // 自定义线程池
@@ -108,6 +115,13 @@
        String lonLat = firstElement.split("_")[1];
        String uid = firstElement.split("_")[3];
        String orderNo = firstElement.split("_")[4];
        // 距离
        String distance = firstElement.split("_")[5];
        // 时间
        String duration = firstElement.split("_")[6];
        // 后台配置的规则
        String planRule = firstElement.split("_")[7];
        // 经纬度
        String[] split = lonLat.split(",");
@@ -116,7 +130,7 @@
        Integer onePushTime = xpTradingStrategy.getOnePushTime();
        int count = onePushTime / 3;
        // 第一轮推单
        processOrder(quoteName,count,uid,split,orderNo,xpTradingStrategy);
        processOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
//
//        for (int i = 0; i < count; i++) {
@@ -158,24 +172,22 @@
        // 第二轮推单
        Integer twoPushTime = xpTradingStrategy.getTwoPushTime();
        count = twoPushTime / 3;
        processOrder(quoteName,count,uid,split,orderNo,xpTradingStrategy);
        processOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
        // 第三轮推单
        Integer threePushTime = xpTradingStrategy.getThreePushTime();
        count = threePushTime / 3;
        processOrder(quoteName,count,uid,split,orderNo,xpTradingStrategy);
        processOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
        // 第四轮推单
        Integer fourPushTime = xpTradingStrategy.getFourPushTime();
        count = fourPushTime / 3;
        processOrder(quoteName,count,uid,split,orderNo,xpTradingStrategy);
        processOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
        // 第五轮推单
        Integer fivePushTime = xpTradingStrategy.getFivePushTime();
        count = fivePushTime / 3;
        processOrder(quoteName,count,uid,split,orderNo,xpTradingStrategy);
        processOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
        // 最终没找到车
        redisService.popFirstElement(quoteName);
@@ -194,13 +206,21 @@
     * @param orderNo 订单号
     * @param xpTradingStrategy  规则
     */
    private void processOrder(String quoteName, int count, String uid, String[] split, String orderNo, XpTradingStrategy xpTradingStrategy) {
    private void processOrder(String quoteName, int count, String uid, String[] split, String orderNo, XpTradingStrategy xpTradingStrategy, String distance, String duration, String planRule) {
        // 订单状态
        R<XpOrder> xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo);
        if (xpOrderR.getCode() != 200) {
            return;
        }
        if (xpOrderR.getData().getStatus() != 1) {
            return;
        }
        for (int i = 0; i < count; i++) {
            // 根据距离找车
            // 车多则根据配置找具体车数量 根据距离最近
            List<VehiclePosition> positionList = vehiclePositionService.findAvailableVehiclesNearby(Double.parseDouble(split[0]), Double.parseDouble(split[1]), xpTradingStrategy.getOnePushDistance(), xpTradingStrategy.getSimultaneouslyOrderCount());
            List<VehiclePositionVo> availableVehiclesNearby = BeanUtil.copyToList(positionList, VehiclePositionVo.class);
            if (!availableVehiclesNearby.isEmpty()) {
                if (availableVehiclesNearby.size() > 1) {
@@ -216,45 +236,215 @@
                    Integer tendencyTime = xpTradingStrategy.getTendencyTime();
                    // 电量价值
                    Integer tendencyElectricity = xpTradingStrategy.getTendencyElectricity();
                    // 找出最大的值是那个
                    Integer max = Math.max(tendencyOrderValue, Math.max(tendencyDistance, Math.max(tendencyTime, tendencyElectricity)));
                    if (max.equals(tendencyOrderValue)) {
                        // 订单价值
                        // 时间差权重
                        Integer weightTimeDifference = xpTradingStrategy.getWeightTimeDifference();
                        // 距离差权重
                        Integer weightDistanceDifference = xpTradingStrategy.getWeightDistanceDifference();
                        // 距离权重
                        Integer weightDistance = xpTradingStrategy.getWeightDistance();
                        // 时间权重
                        Integer weightTime = xpTradingStrategy.getWeightTime();
                        // 电量权重
                        Integer weightElectricity = xpTradingStrategy.getWeightElectricity();
                        // 找出最大的值是那个
                        Integer max1 = Math.max(weightTimeDifference, Math.max(weightDistanceDifference, Math.max(weightDistance, Math.max(weightTime, weightElectricity))));
                        //  时间差
                        if (max1.equals(weightTimeDifference)) {
                            for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
                                LonLatDto lonLatDto = new LonLatDto();
                                lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
                                lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
                                routeAndFareDto.setOrigin(lonLatDto);
                                LonLatDto lonLatDto1 = new LonLatDto();
                                lonLatDto1.setLongitude(Double.valueOf(split[0]));
                                lonLatDto1.setLatitude(Double.valueOf(split[1]));
                                routeAndFareDto.setDestination(lonLatDto1);
                                routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
                                R<RouteVo> distanceAndDuration = xpMapClient.getDistanceAndDuration(routeAndFareDto);
                                if (distanceAndDuration.getCode() == 200) {
                                    // 送驾- 接驾
                                    Integer durationDifference = Integer.parseInt(duration) - distanceAndDuration.getData().getDuration();
                                    vehiclePosition.setTimeDifference(durationDifference);
                                }
                            }
                        }
                        if (max1.equals(weightDistanceDifference)) {
                            for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
                                LonLatDto lonLatDto = new LonLatDto();
                                lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
                                lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
                                routeAndFareDto.setOrigin(lonLatDto);
                                LonLatDto lonLatDto1 = new LonLatDto();
                                lonLatDto1.setLongitude(Double.valueOf(split[0]));
                                lonLatDto1.setLatitude(Double.valueOf(split[1]));
                                routeAndFareDto.setDestination(lonLatDto1);
                                routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
                                R<RouteVo> distanceAndDuration = xpMapClient.getDistanceAndDuration(routeAndFareDto);
                                if (distanceAndDuration.getCode() == 200) {
                                    // 送驾- 接驾
                                    Integer distanceDifference = Integer.parseInt(distance) - distanceAndDuration.getData().getDistance();
                                    vehiclePosition.setDistanceDifference(distanceDifference);
                                }
                            }
                        }
                        if (max1.equals(weightDistance)) {
                            for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
                                LonLatDto lonLatDto = new LonLatDto();
                                lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
                                lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
                                routeAndFareDto.setOrigin(lonLatDto);
                                LonLatDto lonLatDto1 = new LonLatDto();
                                lonLatDto1.setLongitude(Double.parseDouble(split[0]));
                                lonLatDto1.setLatitude(Double.parseDouble(split[1]));
                                routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
                                routeAndFareDto.setDestination(lonLatDto1);
                                //  调用地图 获取时间
                                R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
                                if (r.getCode() == 200) {
                                    vehiclePosition.setDistance(Double.valueOf(r.getData().getDistance()));
                                } else {
                                    vehiclePosition.setDistance(0.0);
                                }
                            }
                        }
                        if (max1.equals(weightTime)) {
                            for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
                                LonLatDto lonLatDto = new LonLatDto();
                                lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
                                lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
                                routeAndFareDto.setOrigin(lonLatDto);
                                LonLatDto lonLatDto1 = new LonLatDto();
                                lonLatDto1.setLongitude(Double.parseDouble(split[0]));
                                lonLatDto1.setLatitude(Double.parseDouble(split[1]));
                                routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
                                routeAndFareDto.setDestination(lonLatDto1);
                                //  调用地图 获取时间
                                R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
                                if (r.getCode() == 200) {
                                    vehiclePosition.setSecond(r.getData().getDuration());
                                } else {
                                    vehiclePosition.setSecond(0);
                                }
                            }
                        }
                        if (max1.equals(weightElectricity)) {
                            // 计算车的分数  分数最大是车的size
                            availableVehiclesNearby= availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList());
                            int size = tendencyElectricity;
                            // 做比对的分数
                            int temp = availableVehiclesNearby.get(0).getCurrentElectricity();
                            for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                vehiclePosition.setCurrentElectricityScore(vehiclePosition.getCurrentElectricityScore() + size);
                                if (temp != vehiclePosition.getCurrentElectricity()) {
                                    size--;
                                }
                            }
                        }
                        // 算出总分 再来排序计算
                        for (VehiclePositionVo vehiclePositionVo : availableVehiclesNearby) {
                            vehiclePositionVo.setOrderValueTotal(vehiclePositionVo.getCurrentElectricityScore() + vehiclePositionVo.getDistanceScore() + vehiclePositionVo.getTimeScore() + vehiclePositionVo.getDistanceDifference()+ vehiclePositionVo.getTimeDifference());
                        }
                        availableVehiclesNearby= availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getOrderValueTotal).reversed()).collect(Collectors.toList());
                        int size = tendencyOrderValue;
                        // 做比对的分数
                        double temp = availableVehiclesNearby.get(0).getOrderValueTotal();
                        for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                            vehiclePosition.setValueScore(vehiclePosition.getValueScore() + size);
                            if (temp != vehiclePosition.getOrderValueTotal()) {
                                size--;
                            }
                        }
                    }
                    // 距离分数
                    if (max.equals(tendencyDistance)) {
                        for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                            double v = FastDistanceCalculator.distanceFast(Double.parseDouble(split[1]), Double.parseDouble(split[0]), vehiclePosition.getPoint().getY(), vehiclePosition.getPoint().getX());
                            vehiclePosition.setDistance(v);
                            RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
                            LonLatDto lonLatDto = new LonLatDto();
                            lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
                            lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
                            routeAndFareDto.setOrigin(lonLatDto);
                            LonLatDto lonLatDto1 = new LonLatDto();
                            lonLatDto1.setLongitude(Double.parseDouble(split[0]));
                            lonLatDto1.setLatitude(Double.parseDouble(split[1]));
                            routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
                            routeAndFareDto.setDestination(lonLatDto1);
                            //  调用地图 获取时间
                            R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
                            if (r.getCode() == 200) {
                                vehiclePosition.setDistance(Double.valueOf(r.getData().getDistance()));
                            } else {
                                vehiclePosition.setDistance(0.0);
                            }
                        }
                        List<VehiclePositionVo> positionVoList = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getDistance)).collect(Collectors.toList());
                        availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getDistance)).collect(Collectors.toList());
                        int size = tendencyDistance;
                        // 做比对的分数
                        double temp=positionVoList.get(0).getDistance();
                        for (VehiclePositionVo vehiclePosition : positionVoList) {
                        double temp = availableVehiclesNearby.get(0).getDistance();
                        for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                            vehiclePosition.setDistanceScore(vehiclePosition.getDistanceScore() + size);
                            if(temp!=vehiclePosition.getDistance()){
                            if (temp != vehiclePosition.getDistance()) {
                                size--;
                            }
                        }
                    }
                    // 时间分数
                    if (max.equals(tendencyTime)) {
                        for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                            // TODO 调用地图 获取时间
                            vehiclePosition.setSecond(1);
                            RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
                            LonLatDto lonLatDto = new LonLatDto();
                            lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
                            lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
                            routeAndFareDto.setOrigin(lonLatDto);
                            LonLatDto lonLatDto1 = new LonLatDto();
                            lonLatDto1.setLongitude(Double.parseDouble(split[0]));
                            lonLatDto1.setLatitude(Double.parseDouble(split[1]));
                            routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
                            routeAndFareDto.setDestination(lonLatDto1);
                            //  调用地图 获取时间
                            R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
                            if (r.getCode() == 200) {
                                vehiclePosition.setSecond(r.getData().getDuration());
                            } else {
                                vehiclePosition.setSecond(0);
                            }
                        }
                        List<VehiclePositionVo> positionVoList = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getSecond)).collect(Collectors.toList());
                        availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getSecond)).collect(Collectors.toList());
                        int size = tendencyTime;
                        // 做比对的分数
                        double temp=positionVoList.get(0).getSecond();
                        for (VehiclePositionVo vehiclePosition : positionVoList) {
                        double temp = availableVehiclesNearby.get(0).getSecond();
                        for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                            vehiclePosition.setTimeScore(vehiclePosition.getTimeScore() + size);
                            if(temp!=vehiclePosition.getSecond()){
                            if (temp != vehiclePosition.getSecond()) {
                                size--;
                            }
                        }
@@ -262,18 +452,111 @@
                    }
                    // 电量分数
                    if (max.equals(tendencyElectricity)) {
                        // 计算车的分数  分数最大是车的size
                        List<VehiclePositionVo> list = availableVehiclesNearby.stream().peek(e -> e.setCurrentElectricity(0)).sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList());
                        availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getCurrentElectricity).reversed()).collect(Collectors.toList());
                        int size = tendencyElectricity;
                        // 做比对的分数
                        int temp=list.get(0).getCurrentElectricity();
                        for (VehiclePositionVo vehiclePosition : list) {
                        int temp = availableVehiclesNearby.get(0).getCurrentElectricity();
                        int maxTemp = 0;
                        for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                            vehiclePosition.setCurrentElectricityScore(vehiclePosition.getCurrentElectricityScore() + size);
                            if(temp!=vehiclePosition.getCurrentElectricity()){
                            if (temp != vehiclePosition.getCurrentElectricity()) {
                                size--;
                            } else {
                                maxTemp++;
                            }
                        }
                        if (maxTemp > 1) {
                            // 证明有最高相同电量的  找下一个
                            // 找出最第二大的值是那个
                            // 将四个值放入列表
                            List<Integer> values = Arrays.asList(tendencyOrderValue, tendencyDistance, tendencyTime);
                            // 降序排序
                            values.sort(Collections.reverseOrder());
                            // 获取第二大值
                            Integer secondMax = values.get(1);
                            // 判断第二大的是哪个
                            if(Objects.equals(secondMax, tendencyDistance)){
                                for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                    RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
                                    LonLatDto lonLatDto = new LonLatDto();
                                    lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
                                    lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
                                    routeAndFareDto.setOrigin(lonLatDto);
                                    LonLatDto lonLatDto1 = new LonLatDto();
                                    lonLatDto1.setLongitude(Double.parseDouble(split[0]));
                                    lonLatDto1.setLatitude(Double.parseDouble(split[1]));
                                    routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
                                    routeAndFareDto.setDestination(lonLatDto1);
                                    //  调用地图 获取时间
                                    R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
                                    if (r.getCode() == 200) {
                                        vehiclePosition.setDistance(Double.valueOf(r.getData().getDistance()));
                                    } else {
                                        vehiclePosition.setDistance(0.0);
                                    }
                                }
                                availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getDistance)).collect(Collectors.toList());
                                int size1 = tendencyDistance;
                                // 做比对的分数
                                double temp1 = availableVehiclesNearby.get(0).getDistance();
                                for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                    vehiclePosition.setDistanceScore(vehiclePosition.getDistanceScore() + size1);
                                    if (temp1 != vehiclePosition.getDistance()) {
                                        size1--;
                                    }
                                }
                            }
                            if(Objects.equals(secondMax, tendencyTime)){
                                for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                    RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
                                    LonLatDto lonLatDto = new LonLatDto();
                                    lonLatDto.setLongitude(vehiclePosition.getPoint().getX());
                                    lonLatDto.setLatitude(vehiclePosition.getPoint().getY());
                                    routeAndFareDto.setOrigin(lonLatDto);
                                    LonLatDto lonLatDto1 = new LonLatDto();
                                    lonLatDto1.setLongitude(Double.parseDouble(split[0]));
                                    lonLatDto1.setLatitude(Double.parseDouble(split[1]));
                                    routeAndFareDto.setRoutePlanRule(Integer.valueOf(planRule));
                                    routeAndFareDto.setDestination(lonLatDto1);
                                    //  调用地图 获取时间
                                    R<RouteVo> r = xpMapClient.getDistanceAndDuration(routeAndFareDto);
                                    if (r.getCode() == 200) {
                                        vehiclePosition.setSecond(r.getData().getDuration());
                                    } else {
                                        vehiclePosition.setSecond(0);
                                    }
                                }
                                availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getSecond)).collect(Collectors.toList());
                                int size1 = tendencyTime;
                                // 做比对的分数
                                double temp1 = availableVehiclesNearby.get(0).getSecond();
                                for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                    vehiclePosition.setTimeScore(vehiclePosition.getTimeScore() + size1);
                                    if (temp1 != vehiclePosition.getSecond()) {
                                        size1--;
                                    }
                                }
                            }
                            // 订单价值
                            if(Objects.equals(secondMax, tendencyOrderValue)){
                            }
                        }
                    }
                    // 判断总分来计算
@@ -282,13 +565,12 @@
                    }
                    VehiclePositionVo vehiclePositionVo = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getTotal).reversed()).collect(Collectors.toList()).get(0);
                    // TODO 找到这个车锁车
                    VehiclePositionVo vehiclePositionVo1 =vehiclePositionVo;
                    RLock lock = redissonClient.getLock("FIND_CAR_"+vehiclePositionVo1.getVin());
                    VehiclePositionVo vehiclePositionVo1 = vehiclePositionVo;
                    RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePositionVo1.getVin());
                    lock.lock(10, TimeUnit.SECONDS);
                    try {
                        VehiclePosition  vehiclePosition= vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id());
                        VehiclePosition vehiclePosition = vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id());
                        if (vehiclePosition.getStatus() != 1 || vehiclePosition.getState() != 0) {
                            lock.unlock();
                            continue;
@@ -304,12 +586,13 @@
                        addTaxiPassengerVo.setAppId("");
                        BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
                        if (baseVehicleUserDto.getCode() == 200) {
                            // 绑定成功  弹出这个队列第一个订单
                            redisService.popFirstElement(quoteName);
                            return;
                        }
                    }catch (Exception e){
                    } catch (Exception e) {
                        e.printStackTrace();
                    }finally {
                    } finally {
                        lock.unlock();
                    }
@@ -317,25 +600,37 @@
                    // 直接派单  定义一个锁来锁定车辆
                    VehiclePosition vehiclePosition = positionList.get(0);
                    Long vehicleId = vehiclePosition.getVehicle_id();
                    // 查询车辆状态
                    VehiclePosition vehicleId1 = vehiclePositionService.findByVehicleId(vehicleId);
                    if (vehicleId1.getStatus() != 1 || vehicleId1.getState() != 0) {
                        continue;
                    RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePosition.getVin());
                    lock.lock(10, TimeUnit.SECONDS);
                    try {
                        // 查询车辆状态
                        VehiclePosition vehicleId1 = vehiclePositionService.findByVehicleId(vehicleId);
                        if (vehicleId1.getStatus() != 1 || vehicleId1.getState() != 0) {
                            lock.unlock();
                            continue;
                        }
                        if (vehiclePosition.getHasOrder() == 1) {
                            //  关闭巡游单子 TODO
                        }
                        AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
                        addTaxiPassengerVo.setVin(vehiclePosition.getVin());
                        addTaxiPassengerVo.setUid(uid);
                        addTaxiPassengerVo.setOrderNo(orderNo);
                        // TODO appid
                        addTaxiPassengerVo.setAppId("");
                        BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
                        if (baseVehicleUserDto.getCode() == 200) {
                            redisService.popFirstElement(quoteName);
                            lock.unlock();
                            return;
                        }
                    } catch (Exception e) {
                    } finally {
                        lock.unlock();
                    }
                    if (vehiclePosition.getHasOrder() == 1) {
                        //  关闭巡游单子 TODO
                    }
                    AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
                    addTaxiPassengerVo.setVin(vehiclePosition.getVin());
                    addTaxiPassengerVo.setUid(uid);
                    addTaxiPassengerVo.setOrderNo(orderNo);
                    // TODO appid
                    addTaxiPassengerVo.setAppId("");
                    BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
                    if (baseVehicleUserDto.getCode() == 200) {
                        redisService.popFirstElement(quoteName);
                        return;
                    }
                }
            }
        }