From dc1e82defe59e851c97a3fe7d01971316ae2dbf7 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 12 二月 2026 22:19:40 +0800
Subject: [PATCH] refactor(task-order): 优化任务订单中的车辆筛选逻辑

---
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java |   41 ++++++++++++++++++++++-------------------
 1 files changed, 22 insertions(+), 19 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 7814e57..36b8812 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
@@ -239,14 +239,14 @@
             List<VehiclePosition> positionList = vehiclePositionService.findAvailableVehiclesNearby(Double.parseDouble(split[0]), Double.parseDouble(split[1]), xpTradingStrategy.getOnePushDistance(), xpTradingStrategy.getSimultaneouslyOrderCount());
 
             // 获取车辆的区域信息
-            if(positionList.isEmpty()){
+            if (positionList.isEmpty()) {
                 continue;
             }
             List<String> vinList = positionList.stream().map(VehiclePosition::getVin).collect(Collectors.toList());
 
             // 获取车辆的信息 筛选出可用车辆
-            R<List<String>> vehiclePositionVos = xpVehicleClient.queryVehiclePositionByVin(new VehiclePositionByVinDto(xpElectronicFence.getId(), vinList,  xpTradingStrategy.getSimultaneouslyOrderCount()));
-            if(vehiclePositionVos.getCode()!=200){
+            R<List<String>> vehiclePositionVos = xpVehicleClient.queryVehiclePositionByVin(new VehiclePositionByVinDto(xpElectronicFence.getId(), vinList, xpTradingStrategy.getSimultaneouslyOrderCount()));
+            if (vehiclePositionVos.getCode() != 200) {
                 continue;
             }
 
@@ -254,7 +254,7 @@
             List<String> data = vehiclePositionVos.getData();
 
             // 找出符合条件的
-           availableVehiclesNearby = availableVehiclesNearby.stream().filter(e->data.contains(e.getVin())).collect(Collectors.toList());
+            availableVehiclesNearby = availableVehiclesNearby.stream().filter(e -> data.contains(e.getVin())).collect(Collectors.toList());
 
 //            List<VehiclePositionVo> availableVehiclesNearby =vehiclePositionVos.getData();
 
@@ -384,7 +384,7 @@
 
                         if (max1.equals(weightElectricity)) {
                             // 计算车的分数  分数最大是车的size
-                            availableVehiclesNearby= availableVehiclesNearby.stream().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 = availableVehiclesNearby.get(0).getCurrentElectricity();
@@ -399,9 +399,9 @@
 
                         // 算出总分 再来排序计算
                         for (VehiclePositionVo vehiclePositionVo : availableVehiclesNearby) {
-                            vehiclePositionVo.setOrderValueTotal(vehiclePositionVo.getCurrentElectricityScore() + vehiclePositionVo.getDistanceScore() + vehiclePositionVo.getTimeScore() + vehiclePositionVo.getDistanceDifference()+ vehiclePositionVo.getTimeDifference());
+                            vehiclePositionVo.setOrderValueTotal(vehiclePositionVo.getCurrentElectricityScore() + vehiclePositionVo.getDistanceScore() + vehiclePositionVo.getTimeScore() + vehiclePositionVo.getDistanceDifference() + vehiclePositionVo.getTimeDifference());
                         }
-                        availableVehiclesNearby= availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getOrderValueTotal).reversed()).collect(Collectors.toList());
+                        availableVehiclesNearby = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getOrderValueTotal).reversed()).collect(Collectors.toList());
 
 
                         int size = tendencyOrderValue;
@@ -517,7 +517,7 @@
                             Integer secondMax = values.get(1);
 
                             // 判断第二大的是哪个
-                            if(Objects.equals(secondMax, tendencyDistance)){
+                            if (Objects.equals(secondMax, tendencyDistance)) {
                                 for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                     RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
                                     LonLatDto lonLatDto = new LonLatDto();
@@ -551,7 +551,7 @@
                             }
 
 
-                            if(Objects.equals(secondMax, tendencyTime)){
+                            if (Objects.equals(secondMax, tendencyTime)) {
                                 for (VehiclePositionVo vehiclePosition : availableVehiclesNearby) {
                                     RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
                                     LonLatDto lonLatDto = new LonLatDto();
@@ -586,7 +586,7 @@
 
 
                             // 订单价值
-                            if(Objects.equals(secondMax, tendencyOrderValue)){
+                            if (Objects.equals(secondMax, tendencyOrderValue)) {
 
 
                             }
@@ -601,19 +601,24 @@
                     }
                     VehiclePositionVo vehiclePositionVo = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getTotal).reversed()).collect(Collectors.toList()).get(0);
 
-
-                    VehiclePositionVo vehiclePositionVo1 = vehiclePositionVo;
-                    RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePositionVo1.getVin());
+//
+//                    VehiclePositionVo vehiclePositionVo1 = vehiclePositionVo;
+                    RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePositionVo.getVin());
                     lock.lock(10, TimeUnit.SECONDS);
                     try {
-                        VehiclePosition vehiclePosition = vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id());
+//                        VehiclePosition vehiclePosition = vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id());
+                        R<VehiclePosition> vehiclePositionR = xpVehicleClient.findByVehicleVin(vehiclePositionVo.getVin());
+                        if (vehiclePositionR.getCode() != 200) {
+                            continue;
+                        }
+                        VehiclePosition vehiclePosition = vehiclePositionR.getData();
                         if (vehiclePosition.getStatus() != 1 || vehiclePosition.getState() != 0) {
                             lock.unlock();
                             continue;
                         }
-                        if (vehiclePosition.getHasOrder() == 1) {
-                            //  关闭巡游单子 TODO
-                        }
+                        //  关闭巡游单子 TODO
+
+
                         AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
                         addTaxiPassengerVo.setVin(vehiclePosition.getVin());
                         addTaxiPassengerVo.setUid(uid);
@@ -622,10 +627,8 @@
                         addTaxiPassengerVo.setAppId("");
 
 
-
                         BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
                         if (baseVehicleUserDto.getCode() == 200) {
-
                             // TODO 下单
                             // 绑定成功  弹出这个队列第一个订单
                             redisService.popFirstElement(quoteName);

--
Gitblit v1.7.1