From 547a4a0b1d130c6d2fb854b31a15e2bf7e75c811 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 17 四月 2026 21:03:39 +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 | 69 +++++++++++++++++++++++++++-------
1 files changed, 55 insertions(+), 14 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 ec76fa1..b922108 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
@@ -10,6 +10,7 @@
import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
import com.xiaopeng.api.feignClient.map.XpMapClient;
+import com.xiaopeng.api.feignClient.operation.XpTradingStrategyClient;
import com.xiaopeng.api.feignClient.order.XpCruiseOrderClient;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient;
@@ -23,6 +24,7 @@
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.operation.VehiclePositionVo;
+import com.xiaopeng.api.vo.operation.XpTradingStrategyDetailVO;
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.constant.Constants;
import com.xiaopeng.common.core.domain.R;
@@ -48,6 +50,7 @@
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
@@ -79,6 +82,9 @@
@Resource
private XpCruiseOrderClient xpCruiseOrderClient;
+
+ @Resource
+ private XpTradingStrategyClient tradingStrategyClient;
@Resource
private XpVehicleClient xpVehicleClient;
@@ -1087,9 +1093,19 @@
continue;
}
- LonLatDto lonLatDto = new LonLatDto(Double.parseDouble(split[0]), Double.parseDouble(split[1]));
+ LonLatDto current = new LonLatDto(Double.parseDouble(split[0]), Double.parseDouble(split[1]));//当前点位
- Optional<XpOrder> lucyOrderOpt = servingVehicles.getData().stream()
+ XpTradingStrategyDetailVO strategyDetailVO = tradingStrategyClient.queryById().getData();
+
+ Integer distanceRegardAsEnding = strategyDetailVO.getDistanceRegardAsEnding();
+ Integer timeRegardAsEnding = strategyDetailVO.getTimeRegardAsEnding();
+
+ Integer backupPower = strategyDetailVO.getBackupPower();
+ Integer destToPassenger = strategyDetailVO.getDestToPassenger();
+ Integer endingTimeToUseTime = strategyDetailVO.getEndingTimeToUseTime();
+ LocalDateTime rideTime = xpOrder.getRideTime();
+ LocalDateTime now = LocalDateTime.now();
+ Optional<XpOrder> luckyOrderOpt = servingVehicles.getData().stream()
//获取位置
.map(vin -> mongoTemplate.findOne(new Query(Criteria.where("vin").is(vin)), VehiclePosition.class))
.map(VehiclePosition::getOrderId)
@@ -1097,23 +1113,48 @@
.filter(R::isSuccess)
.map(R::getData)
.filter(o -> {
- RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
- routeAndFareDto.setDestination(lonLatDto);
- return isClose(o, routeAndFareDto);
+ XpVehicle xpVehicle = xpVehicleClient.queryById(o.getVehicleId()).getData();
+
+ Object cacheObject = redisService.getCacheObject(CacheConstants.navigationEnd(o.getAppUserId().toString()));
+ RouteVo routeRemain = JSON.parseObject(cacheObject.toString(), RouteVo.class);
+ if (routeRemain.getDuration() / 60 > timeRegardAsEnding) {
+ return false;
+ }
+ RouteAndFareDto remain = new RouteAndFareDto();
+ remain.setOrigin(current);
+ LonLatDto ll = new LonLatDto(o.getStartLon(), o.getStartLat());
+ remain.setDestination(ll);
+ RouteVo r = xpMapClient.getDistanceAndDuration(remain).getData();
+ if (r.getDistance() > distanceRegardAsEnding) {
+ return false;
+ }
+ if (r.getDuration() / 60 > timeRegardAsEnding) {
+ return false;
+ }
+ RouteAndFareDto next = new RouteAndFareDto();
+ next.setOrigin(new LonLatDto(o.getStartLon(),o.getStartLat()));
+ next.setDestination(new LonLatDto(o.getEndLon(),o.getEndLat()));
+ RouteVo route = xpMapClient.getDistanceAndDuration(next).getData();
+ if (route.getDistance() > backupPower + xpVehicle.getMileageRange())
+ return false;
+ return r.getDistance() < destToPassenger
+ || now.plusSeconds(routeRemain.getDuration())
+ .plusMinutes(endingTimeToUseTime)
+ .isBefore(rideTime);
})
.findAny();
- if (lucyOrderOpt.isPresent()) {
- XpOrder lucyOder = lucyOrderOpt.get();
- log.info("有空闲车辆 {} 订单 {}", lucyOder.getOrderNumber(), orderNo);
- XpVehicle xpVehicle = xpVehicleClient.queryById(lucyOder.getVehicleId()).getData();
+ if (luckyOrderOpt.isPresent()) {
+ XpOrder luckyOder = luckyOrderOpt.get();
+ log.info("有空闲车辆 {} 订单 {}", luckyOder.getOrderNumber(), orderNo);
+ XpVehicle xpVehicle = xpVehicleClient.queryById(luckyOder.getVehicleId()).getData();
// 设置路线信息
RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
- routeAndFareDto.setDestination(lonLatDto);
- routeAndFareDto.setOrigin(new LonLatDto(lucyOder.getEndLon(),lucyOder.getEndLat()));
- Object cacheObject = redisService.getCacheObject(CacheConstants.navigationEnd(lucyOder.getAppUserId().toString()));
- RouteVo routeRemain = JSON.parseObject(cacheObject.toString(), RouteVo.class);
+ routeAndFareDto.setDestination(current);
+ routeAndFareDto.setOrigin(new LonLatDto(luckyOder.getEndLon(),luckyOder.getEndLat()));
RouteVo routeToOrigin = xpMapClient.getDistanceAndDuration(routeAndFareDto).getData();
+ Object cacheObject = redisService.getCacheObject(CacheConstants.navigationEnd(luckyOder.getAppUserId().toString()));
+ RouteVo routeRemain = JSON.parseObject(cacheObject.toString(), RouteVo.class);
routeToOrigin.getPolyline().addAll(0, routeRemain.getPolyline());
routeToOrigin.setDuration(routeToOrigin.getDuration() + routeRemain.getDuration());
routeToOrigin.setDistance(routeToOrigin.getDistance() + routeRemain.getDistance());
@@ -1121,7 +1162,7 @@
pushOrderDto.setVin(xpVehicle.getVehicleVin());
// 订单流转
orderMissionClient.pushOrder(pushOrderDto);
- redisService.setCacheObject(CacheConstants.nextOrder(lucyOder.getId().toString()), xpOrder.getId());
+ redisService.setCacheObject(CacheConstants.nextOrder(luckyOder.getId().toString()), xpOrder.getId());
redisService.setCacheObject(CacheConstants.navigationStart(xpOrder.getAppUserId().toString()), routeToOrigin);
redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
--
Gitblit v1.7.1