From 43e9944347e51d5628166f8c1b78d98cfd2013ea Mon Sep 17 00:00:00 2001
From: yyy <1083599556@qq.com>
Date: 星期三, 22 四月 2026 22:12:22 +0800
Subject: [PATCH] 1.调试接口修改问题 2.修改定向服务的播单和 改派
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java | 84 ++++++++++++++++++++++++++++++++++++------
1 files changed, 72 insertions(+), 12 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 9c072e0..d972c7d 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,6 +1,7 @@
package com.xiaopeng.operation.utils;
import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
@@ -27,6 +28,7 @@
import com.xiaopeng.api.vo.automaticPilot.protobuf.TaskActionType;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.operation.VehiclePositionVo;
+import com.xiaopeng.api.vo.operation.XpTargetedServiceVehicleVo;
import com.xiaopeng.api.vo.operation.XpTradingStrategyDetailVO;
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.constant.Constants;
@@ -36,13 +38,11 @@
import com.xiaopeng.operation.config.UidVinBindingConfig;
import com.xiaopeng.operation.dto.PriorityMatchResult;
import com.xiaopeng.operation.mapper.XpElectronicFenceMapper;
-import com.xiaopeng.operation.service.IXpElectronicFenceAreaService;
-import com.xiaopeng.operation.service.IXpTradingStrategyService;
-import com.xiaopeng.operation.service.UidVinPriorityMatcher;
-import com.xiaopeng.operation.service.XpPointService;
+import com.xiaopeng.operation.service.*;
import com.xiaopeng.operation.utils.mango.VehiclePositionService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.data.mongodb.core.MongoTemplate;
@@ -65,6 +65,8 @@
public class TaskOrderUtil {
+ @Resource
+ XpTargetedServiceService xpTargetedServiceService;
@Resource
private RedisService redisService;
@@ -132,7 +134,7 @@
/**
* 5秒执行一次
- * 播单
+ * 播单 在下单的时候会存一个 redis 队列
*/
@Scheduled(cron = "0/5 * * * * ?")
public void taskOrder() {
@@ -141,15 +143,50 @@
for (String name : quoteMatchName) {
String firstElement = redisService.getFirstElement(name);
if (firstElement != null) {
- String[] split = firstElement.toString().split("_");
+ String[] split = firstElement.split("_");
+ if(split.length>8){
+ String targetedVal = split[8];
+ if (!"0".equals(targetedVal)) {
+ continue;
+ }
+ }
// 如果未处理 创建新任务
- if (split[2].equals("0")) {
+ if ("0".equals(split[2])) {
String value = split[0] + "_" + split[1] + "_1" + "_" + split[3] + "_" + split[4] + "_" + split[5] + "_" + split[6] + "_" + split[7];
// 状态改为处理中
redisService.updateFirst(name, value);
threadPoolTaskExecutor.submit(() -> {
- orderProcess(name, firstElement.toString());
+ orderProcess(name, firstElement);
});
+ }
+ }
+ }
+ }
+
+ /**
+ * 定向订单
+ */
+ @Scheduled(cron = "0/5 * * * * ?")
+ public void taskOrder_targeted() {
+ System.out.println("5秒执行一次");
+ Set<String> quoteMatchName = redisService.getQuoteMatchName(CacheConstants.QUEUE_POINT_ID);
+ for (String name : quoteMatchName) {
+ String firstElement = redisService.getFirstElement(name);
+ if (firstElement != null) {
+ String[] split = firstElement.split("_");
+ if(split.length>8){
+ String targetedVal = split[8];
+ if (!"0".equals(targetedVal)) {
+ // 如果未处理 创建新任务
+ if ("0".equals(split[2])) {
+ String value = split[0] + "_" + split[1] + "_1" + "_" + split[3] + "_" + split[4] + "_" + split[5] + "_" + split[6] + "_" + split[7];
+ // 状态改为处理中
+ redisService.updateFirst(name, value);
+ threadPoolTaskExecutor.submit(() -> {
+ orderProcess(name, firstElement);
+ });
+ }
+ }
}
}
}
@@ -406,7 +443,8 @@
log.info("[人车订单绑定测试] 总开关未开启(enabled=false), 跳过优先匹配, uid={}, orderNo={}", uid, orderNo);
}
// ===== 新增结束 =====
-
+ //根据 用户id 和 城市编码 查询 定向服务的 车辆信息
+ List<String> targetedServiceVehicleVinList = xpTargetedServiceService.findSetVehicleVinByUserIdAndCityCode(xpOrder.getAppUserId(), xpOrder.getCityCode());
for (int i = 0; i < count; i++) {
//等到sleepTime秒钟
Thread.sleep(sleepTime * 1000);
@@ -427,11 +465,19 @@
if (vehiclePositionVos.getCode() != 200) {
continue;
}
- List<VehiclePositionVo> availableVehiclesNearby = BeanUtil.copyToList(positionList, VehiclePositionVo.class);
- List<String> data = vehiclePositionVos.getData();
+ List<String> data = vehiclePositionVos.getData(); //指定区域的车
+ // 计算交集:指定区域的车辆 与 定向服务车辆列表的交集
+ if (targetedServiceVehicleVinList != null && !targetedServiceVehicleVinList.isEmpty() && data != null) {
+ Collection<String> newVehicleVinList = CollUtil.intersection(data,targetedServiceVehicleVinList);
+ if(CollUtil.isNotEmpty(newVehicleVinList)){
+ data = (List<String>) newVehicleVinList;
+ }
+ }
+ List<VehiclePositionVo> availableVehiclesNearby = BeanUtil.copyToList(positionList, VehiclePositionVo.class);
// 找出符合条件的
- availableVehiclesNearby = availableVehiclesNearby.stream().filter(e -> data.contains(e.getVin())).collect(Collectors.toList());
+ List<String> finalData = data;
+ availableVehiclesNearby = availableVehiclesNearby.stream().filter(e -> finalData.contains(e.getVin())).collect(Collectors.toList());
// List<VehiclePositionVo> availableVehiclesNearby =vehiclePositionVos.getData();
if (!availableVehiclesNearby.isEmpty()) {
@@ -1268,6 +1314,10 @@
XpOrderReassign entity = new XpOrderReassign(data.getId(),data.getVehicleId(),data.getFleetId(),longitude,latitude,"接驾故障");
entity.setIsComplete(false);
entity.setAppUserId(Long.valueOf(uid));
+
+ // 根据城市编码获取 定向服务设置的车辆
+ List<String> targetedServiceVehicleVinList = xpTargetedServiceService.findSetVehicleVinByUserIdAndCityCode(data.getAppUserId(), data.getCityCode());
+
//循环找车
for (int i = 0; i < count; i++) {
log.info("进入找车环节");
@@ -1352,10 +1402,20 @@
}
}
+
// 直接派单 定义一个锁来锁定车辆
VehiclePosition vehiclePosition = positionList.get(0);
+ if(CollUtil.isNotEmpty(targetedServiceVehicleVinList)){//定向服务获取的车
+ for (VehiclePosition position : positionList) {
+ if(targetedServiceVehicleVinList.contains(position.getVin())){
+ vehiclePosition = position;
+ break;
+ }
+ }
+ }
String vehicleVin = vehiclePosition.getVin();
+
RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePosition.getVin());
lock.lock(10, TimeUnit.SECONDS);
try {
--
Gitblit v1.7.1