From 21139cec92c837fe26f22ccd0855120ac866ceea Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期四, 12 二月 2026 14:42:50 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java |  405 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 350 insertions(+), 55 deletions(-)

diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
index 6d6f575..7053f03 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
+++ b/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;
-                    }
+
                 }
             }
         }

--
Gitblit v1.7.1