From c96fbe6b0aeb413a17c429133ee6d81d138144b9 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 09 六月 2026 10:58:52 +0800
Subject: [PATCH] Merge branch '1.0' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java | 279 +++++++++++++++++++++++++++++--------------------------
1 files changed, 147 insertions(+), 132 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 d590732..27c5b4f 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
@@ -174,7 +174,9 @@
String orderId = split[0];
XpOrder xpOrder = xpOrderClient.queryOrderById(Long.valueOf(orderId)).getData();
if(xpOrder.getStatus() != OrderStatusEnum.PENDING_ORDER.getCode()){
- redisService.popFirstElement(xpOrder.getQueueName());
+ if(StringUtils.isNotEmpty((xpOrder.getQueueName()))){
+ redisService.removeByPattern(xpOrder.getQueueName(), xpOrder.getOrderNumber());
+ }
}
}
@@ -195,7 +197,7 @@
String[] split = firstElement.toString().split("_");
// 如果未处理 创建新任务
if (split[2].equals("0")) {
- String value = split[0] + "_" + split[1] + "_1" + "_" + split[3] + "_" + split[4] + "_" + split[5] + "_" + split[6] + "_" + split[7];
+ String value = split[0] + "_" + split[1] + "_1" + "_" + split[3] + "_" + split[4] + "_" + split[5] + "_" + split[6] + "_" + split[7] + "_" + split[8];
// 状态改为处理中
redisService.updateFirst(name, value);
threadPoolTaskExecutor.submit(() -> {
@@ -207,7 +209,9 @@
String orderId = split[0];
XpOrder xpOrder = xpOrderClient.queryOrderById(Long.valueOf(orderId)).getData();
if(xpOrder.getStatus() != OrderStatusEnum.PENDING_ORDER.getCode()){
- redisService.popFirstElement(xpOrder.getQueueName());
+ if(StringUtils.isNotEmpty(xpOrder.getQueueName())){
+ redisService.removeByPattern(xpOrder.getQueueName(), xpOrder.getOrderNumber());
+ }
}
}
@@ -311,9 +315,6 @@
if (xpOrder.getStatus() == 1) {
xpOrderClient.cancelOrder(orderId);
log.info("五轮推单结束,无车辆接单,执行取消订单 {}", orderNo);
- //将订单从队列中移除
- redisService.popFirstElement(quoteName);
- log.info("五轮推单结束,无车辆接单,执行队列移除订单 {}", orderNo);
//推送订单状态给乘客
SendMessageDTO dto = new SendMessageDTO();
dto.setAppUserId(xpOrder.getAppUserId().toString());
@@ -368,7 +369,11 @@
}
XpOrder xpOrder = xpOrderR.getData();
if (xpOrder.getStatus() == 0) {
- redisService.removeByPattern(quoteName, xpOrder.getOrderNumber());
+ log.info("订单已取消,退出退单逻辑 {}", orderNo);
+ if(StringUtils.isNotEmpty(quoteName)){
+ redisService.removeByPattern(quoteName, xpOrder.getOrderNumber());
+ }
+ return true;
}
// 找出围栏id
@@ -428,6 +433,8 @@
PushOrderDto pushOrderDto = new PushOrderDto();
pushOrderDto.setVin(priorityVin);
pushOrderDto.setOrderId(orderCheck.getData().getId().toString());
+ pushOrderDto.setStartTaskId(orderCheck.getData().getXpuStartTaskId());
+ pushOrderDto.setEndTaskId(orderCheck.getData().getXpuEndTaskId());
pushOrderDto.setStartWaypointId(orderCheck.getData().getStartPointId());
pushOrderDto.setEndWaypointId(orderCheck.getData().getEndPointId());
pushOrderDto.setStartLatitude(orderCheck.getData().getStartLat());
@@ -442,7 +449,10 @@
orderCheck.getData().getEndLat(), orderCheck.getData().getEndLon(), orderNo);
orderMissionClient.pushOrder(pushOrderDto);
log.info("[人车订单绑定测试] ====== 派单成功! uid={}, vin={}, orderNo={}, 从队列移除订单 ======", uid, priorityVin, orderNo);
- redisService.removeByPattern(quoteName, orderNo);
+ if(StringUtils.isNotEmpty(quoteName)){
+ redisService.removeByPattern(quoteName, orderNo);
+ }
+
return true;
} else {
log.info("[人车订单绑定测试] 关闭巡游单失败, 回退常规流程, vin={}, orderNo={}", priorityVin, orderNo);
@@ -1068,77 +1078,68 @@
}
VehiclePositionVo vehiclePositionVo = availableVehiclesNearby.stream().sorted(Comparator.comparing(VehiclePositionVo::getTotal).reversed()).collect(Collectors.toList()).get(0);
-//
-// VehiclePositionVo vehiclePositionVo1 = vehiclePositionVo;
-
-
RLock lock = redissonClient.getLock("FIND_CAR_" + vehiclePositionVo.getVin());
lock.lock(10, TimeUnit.SECONDS);
log.info("队列 {} 车辆 {} 单号 {}", quoteName, vehiclePositionVo.getVin(), orderNo);
try {
-
-
-
-// VehiclePosition vehiclePosition = vehiclePositionService.findByVehicleId(vehiclePositionVo.getVehicle_id());
R<XpVehicle> vehiclePositionR = xpVehicleClient.findByVehicleVin(vehiclePositionVo.getVin());
- if (vehiclePositionR.getCode() != 200) {
- continue;
- }
- XpVehicle vehiclePosition = vehiclePositionR.getData();
- log.info("符合条件的车辆 {} ,直接推单XPU。单号 {}", vehiclePosition.getPlateNumber(), orderNo);
- log.info("当前车辆状态 {} 单号 {}", vehiclePosition.getState(), orderNo);
+ if (vehiclePositionR.getCode() == 200) {
+ XpVehicle vehiclePosition = vehiclePositionR.getData();
+ log.info("符合条件的车辆 {} ,直接推单XPU。单号 {}", vehiclePosition.getPlateNumber(), orderNo);
+ log.info("当前车辆状态 {} 单号 {}", vehiclePosition.getState(), orderNo);
- String vin = SensitiveDataCryptoUtil.decryptIfPossible(vehiclePosition.getVehicleVin());
- // 再次查询一下订单 看是否取消
- xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo);
- if (xpOrderR.getCode() != 200) {
- continue;
- }
- xpOrder = xpOrderR.getData();
- if (xpOrder.getStatus() != 1) {
- continue;
- }
- //所有条件满足,走正常派单,不满足走后面的连环派单
- if (vehiclePosition.getOperatingStatus() == 1 && vehiclePosition.getState() == 0 && vehiclePosition.getVehicleType() == 2) {
- //非合作商的车辆需要处理巡游单
- if(null == vehiclePosition.getOfficialPartnerId()){
- // 关闭巡游单子
- R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vin);
- if (stringR == null || stringR.getCode() != 200) {
- log.info("关闭巡游单子失败 车牌号 {}", vehiclePosition.getPlateNumber());
- continue;
+ String vin = SensitiveDataCryptoUtil.decryptIfPossible(vehiclePosition.getVehicleVin());
+ // 再次查询一下订单 看是否取消
+ xpOrder = xpOrderClient.queryOrderByOrderNo(orderNo).getData();
+ if (xpOrder.getStatus() == 1) {
+ //所有条件满足,走正常派单,不满足走后面的连环派单
+ if (vehiclePosition.getOperatingStatus() == 1 && vehiclePosition.getState() == 0 && vehiclePosition.getVehicleType() == 2) {
+ //非合作商的车辆需要处理巡游单
+ if(null == vehiclePosition.getOfficialPartnerId()){
+ // 关闭巡游单子
+ R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vin);
+ if (stringR != null && stringR.getCode() == 200) {
+ log.info("关闭巡游单成功 {} {}", vehiclePosition.getPlateNumber(), orderNo);
+ XpCruiseOrder cruiseOrder = stringR.getData();
+ // 下发命令
+ PushOrderDto pushOrderDto = new PushOrderDto();
+ pushOrderDto.setVin(vin);
+ pushOrderDto.setOrderId(xpOrder.getId().toString());
+ pushOrderDto.setStartTaskId(xpOrder.getXpuStartTaskId());
+ pushOrderDto.setEndTaskId(xpOrder.getXpuEndTaskId());
+ pushOrderDto.setStartWaypointId(xpOrder.getStartPointId());
+ pushOrderDto.setEndWaypointId(xpOrder.getEndPointId());
+ pushOrderDto.setStartLatitude(xpOrder.getStartLat());
+ pushOrderDto.setStartLongitude(xpOrder.getStartLon());
+ pushOrderDto.setEndLatitude(xpOrder.getEndLat());
+ pushOrderDto.setEndLongitude(xpOrder.getEndLon());
+ pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
+ pushOrderDto.setOrderType(OrderType.USER_ORDER);
+ pushOrderDto.setStage(1);
+ if(null != cruiseOrder){
+ pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
+ pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
+ }
+ pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
+ // 调用推送服务 orderId + carVin
+ orderMissionClient.pushOrder(pushOrderDto);
+ log.info("开始推送 {} 订单到XPU。单号 {}", xpOrder.getOrderNumber(), orderNo);
+ }
+ }else {
+ //流量接入-接单推送 合作商的车辆需要调用合作商的订单通知接口
+ officialPartnerUtil.pushNewOrder(vehiclePosition.getOfficialPartnerId(), xpOrder);
+ }
+ if(StringUtils.isNotEmpty(quoteName)){
+ redisService.removeByPattern(quoteName, xpOrder.getOrderNumber());
+ }
+
+ log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
+ return true;
}
- log.info("关闭巡游单成功 {} {}", vehiclePosition.getPlateNumber(), orderNo);
- XpCruiseOrder cruiseOrder = stringR.getData();
- // 下发命令
- PushOrderDto pushOrderDto = new PushOrderDto();
- pushOrderDto.setVin(vin);
- pushOrderDto.setOrderId(xpOrder.getId().toString());
- pushOrderDto.setStartWaypointId(xpOrder.getStartPointId());
- pushOrderDto.setEndWaypointId(xpOrder.getEndPointId());
- pushOrderDto.setStartLatitude(xpOrder.getStartLat());
- pushOrderDto.setStartLongitude(xpOrder.getStartLon());
- pushOrderDto.setEndLatitude(xpOrder.getEndLat());
- pushOrderDto.setEndLongitude(xpOrder.getEndLon());
- pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
- pushOrderDto.setOrderType(OrderType.USER_ORDER);
- pushOrderDto.setStage(1);
- if(null != cruiseOrder){
- pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
- pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
- }
- pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
- // 调用推送服务 orderId + carVin
- orderMissionClient.pushOrder(pushOrderDto);
- log.info("开始推送 {} 订单到XPU。单号 {}", xpOrder.getOrderNumber(), orderNo);
- }else {
- //流量接入-接单推送 合作商的车辆需要调用合作商的订单通知接口
- officialPartnerUtil.pushNewOrder(vehiclePosition.getOfficialPartnerId(), xpOrder);
}
- redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
- log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
- return true;
+
}
+
} catch (Exception e) {
e.printStackTrace();
} finally {
@@ -1155,62 +1156,59 @@
try {
// 查询车辆状态
R<XpVehicle> vehicleR = xpVehicleClient.findByVehicleVin(vehicleVin);
- if (vehicleR.getCode() != 200) {
- continue;
- }
- XpVehicle vehicleId1 = vehicleR.getData();
- log.info("附近只有一个车辆 {} ,直接推单XPU。单号 {}", vehicleId1.getPlateNumber(), orderNo);
- log.info("当前车辆状态 运营状态 {} 单号 {}", vehicleId1.getState(), orderNo);
+ if (vehicleR.getCode() == 200) {
+ XpVehicle vehicleId1 = vehicleR.getData();
+ log.info("附近只有一个车辆 {} ,直接推单XPU。单号 {}", vehicleId1.getPlateNumber(), orderNo);
+ log.info("当前车辆状态 运营状态 {} 单号 {}", vehicleId1.getState(), orderNo);
- // 再次查询一下订单 看是否取消
- xpOrderR = xpOrderClient.queryOrderByOrderNo(orderNo);
- if (xpOrderR.getCode() != 200) {
- continue;
- }
- xpOrder = xpOrderR.getData();
- if (xpOrder.getStatus() != 1) {
- continue;
- }
+ // 再次查询一下订单 看是否取消
+ xpOrder = xpOrderClient.queryOrderByOrderNo(orderNo).getData();
+ if (xpOrder.getStatus() == 1) {
+ // 所有条件满足走正常派单,不满足走循环派单
+ if (vehicleId1.getOperatingStatus() == 1 && vehicleId1.getState() == 0 && vehicleId1.getVehicleType() == 2) {
+ if(null == vehicleId1.getOfficialPartnerId()){
+ // 关闭巡游单子
+ String vin = SensitiveDataCryptoUtil.decryptIfPossible(vehicleId1.getVehicleVin());
+ R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vin);
+ if (stringR != null && stringR.getCode() == 200) {
+ log.info("关闭巡游单成功 {} {}", vehicleId1.getPlateNumber(), orderNo);
+ XpCruiseOrder cruiseOrder = stringR.getData();
+ PushOrderDto pushOrderDto = new PushOrderDto();
+ pushOrderDto.setVin(vehiclePosition.getVin());
+ pushOrderDto.setOrderId(xpOrder.getId().toString());
+ pushOrderDto.setStartTaskId(xpOrder.getXpuStartTaskId());
+ pushOrderDto.setEndTaskId(xpOrder.getXpuEndTaskId());
+ pushOrderDto.setStartWaypointId(xpOrder.getStartPointId());
+ pushOrderDto.setEndWaypointId(xpOrder.getEndPointId());
+ pushOrderDto.setStartLatitude(xpOrder.getStartLat());
+ pushOrderDto.setStartLongitude(xpOrder.getStartLon());
+ pushOrderDto.setEndLatitude(xpOrder.getEndLat());
+ pushOrderDto.setEndLongitude(xpOrder.getEndLon());
+ pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
+ pushOrderDto.setOrderType(OrderType.USER_ORDER);
+ pushOrderDto.setStage(1);
+ if(null != cruiseOrder){
+ pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
+ pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
+ }
+ pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
+ // 调用推送服务 orderId + carVin
+ orderMissionClient.pushOrder(pushOrderDto);
+ }
+ }else {
+ //流量接入-接单推送 合作商的车辆需要调用合作商的订单通知接口
+ officialPartnerUtil.pushNewOrder(vehicleId1.getOfficialPartnerId(), xpOrder);
+ }
+ log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber());
- // 所有条件满足走正常派单,不满足走循环派单
- if (vehicleId1.getOperatingStatus() == 1 && vehicleId1.getState() == 0 && vehicleId1.getVehicleType() == 2) {
- if(null == vehicleId1.getOfficialPartnerId()){
- // 关闭巡游单子
- String vin = SensitiveDataCryptoUtil.decryptIfPossible(vehicleId1.getVehicleVin());
- R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vin);
- if (stringR == null || stringR.getCode() != 200) {
- log.info("关闭巡游单子失败 车牌号 {}", vehicleId1.getPlateNumber());
- continue;
+ if(StringUtils.isNotEmpty(quoteName)){
+ redisService.removeByPattern(quoteName, xpOrder.getOrderNumber());
+ }
+
+ log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
+ return true;
}
- log.info("关闭巡游单成功 {} {}", vehicleId1.getPlateNumber(), orderNo);
- XpCruiseOrder cruiseOrder = stringR.getData();
- PushOrderDto pushOrderDto = new PushOrderDto();
- pushOrderDto.setVin(vehiclePosition.getVin());
- pushOrderDto.setOrderId(xpOrder.getId().toString());
- pushOrderDto.setStartWaypointId(xpOrder.getStartPointId());
- pushOrderDto.setEndWaypointId(xpOrder.getEndPointId());
- pushOrderDto.setStartLatitude(xpOrder.getStartLat());
- pushOrderDto.setStartLongitude(xpOrder.getStartLon());
- pushOrderDto.setEndLatitude(xpOrder.getEndLat());
- pushOrderDto.setEndLongitude(xpOrder.getEndLon());
- pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
- pushOrderDto.setOrderType(OrderType.USER_ORDER);
- pushOrderDto.setStage(1);
- if(null != cruiseOrder){
- pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
- pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
- }
- pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
- // 调用推送服务 orderId + carVin
- orderMissionClient.pushOrder(pushOrderDto);
- }else {
- //流量接入-接单推送 合作商的车辆需要调用合作商的订单通知接口
- officialPartnerUtil.pushNewOrder(vehicleId1.getOfficialPartnerId(), xpOrder);
}
- log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber());
- redisService.popFirstElement(quoteName);
- log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
- return true;
}
} catch (Exception e) {
e.printStackTrace();
@@ -1303,11 +1301,14 @@
JSONObject jsonObject = new JSONObject();
jsonObject.put("orderId", xpOrder.getId());
- jsonObject.put("endLongitude", xpOrder.getEndLat());
+ jsonObject.put("endLongitude", xpOrder.getEndLon());
jsonObject.put("endLatitude", xpOrder.getEndLat());
redisService.setCacheObject(CacheConstants.nextOrder(xpOrder1.getId().toString()), jsonObject.toJSONString());
redisService.setCacheObject(CacheConstants.navigationStart(xpOrder.getAppUserId().toString()), JSON.toJSONString(route));
- redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
+
+ if(StringUtils.isNotEmpty(quoteName)){
+ redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
+ }
log.info("连环派单 {} 设置下一单接驾导航数据 {}", orderNo, JSON.toJSONString(route));
//构建推送消息
@@ -1376,7 +1377,10 @@
}
XpOrder xpOrder = xpOrderR.getData();
if (xpOrder.getStatus() == 0) {
- redisService.removeByPattern(quoteName, xpOrder.getOrderNumber());
+ if(StringUtils.isNotEmpty(quoteName)){
+ redisService.removeByPattern(quoteName, xpOrder.getOrderNumber());
+ }
+
}
// 找出围栏id
@@ -1452,7 +1456,11 @@
orderCheck.getData().getEndLat(), orderCheck.getData().getEndLon(), orderNo);
orderMissionClient.pushOrder(pushOrderDto);
log.info("[人车订单绑定测试] ====== 派单成功! uid={}, vin={}, orderNo={}, 从队列移除订单 ======", uid, priorityVin, orderNo);
- redisService.removeByPattern(quoteName, orderNo);
+
+ if(StringUtils.isNotEmpty(quoteName)){
+ redisService.removeByPattern(quoteName, orderNo);
+ }
+
return true;
} else {
log.info("[人车订单绑定测试] 关闭巡游单失败, 回退常规流程, vin={}, orderNo={}", priorityVin, orderNo);
@@ -2132,8 +2140,9 @@
// 调用推送服务 orderId + carVin
orderMissionClient.pushOrder(pushOrderDto);
log.info("开始推送 {} 订单到XPU。单号 {}", xpOrder.getOrderNumber(), orderNo);
-
- redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
+ if(StringUtils.isNotEmpty(quoteName)){
+ redisService.removeByPattern(quoteName, xpOrder.getOrderNumber());
+ }
log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
return true;
} catch (Exception e) {
@@ -2205,7 +2214,10 @@
// 调用推送服务 orderId + carVin
orderMissionClient.pushOrder(pushOrderDto);
log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber());
- redisService.popFirstElement(quoteName);
+
+ if(StringUtils.isNotEmpty(quoteName)){
+ redisService.removeByPattern(quoteName, xpOrder.getOrderNumber());
+ }
log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
return true;
} catch (Exception e) {
@@ -2298,11 +2310,14 @@
// orderMissionClient.pushOrder(pushOrderDto);
JSONObject jsonObject = new JSONObject();
jsonObject.put("orderId", xpOrder.getId());
- jsonObject.put("endLongitude", xpOrder.getEndLat());
+ jsonObject.put("endLongitude", xpOrder.getEndLon());
jsonObject.put("endLatitude", xpOrder.getEndLat());
redisService.setCacheObject(CacheConstants.nextOrder(luckyOder.getId().toString()), jsonObject.toJSONString());
redisService.setCacheObject(CacheConstants.navigationStart(xpOrder.getAppUserId().toString()), routeToOrigin);
- redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
+ if(StringUtils.isNotEmpty(quoteName)){
+ redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
+ }
+
log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
break;
}
@@ -2452,7 +2467,7 @@
routeToOrigin.setDistance(routeToOrigin.getDistance() + routeRemain.getDistance());
JSONObject jsonObject = new JSONObject();
jsonObject.put("orderId", data.getId());
- jsonObject.put("endLongitude", data.getEndLat());
+ jsonObject.put("endLongitude", data.getEndLon());
jsonObject.put("endLatitude", data.getEndLat());
redisService.setCacheObject(CacheConstants.nextOrder(luckyOder.getId().toString()), jsonObject.toJSONString());
redisService.setCacheObject(CacheConstants.navigationStart(data.getAppUserId().toString()), routeToOrigin);
--
Gitblit v1.7.1