puzhibing
2026-03-06 fbbea0b1e2380e8c2fb86740a237b0a3aac56aad
修改推单逻辑bug及日志排查
2个文件已修改
30 ■■■■■ 已修改文件
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -83,8 +83,8 @@
    private static final ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
    static {
        threadPoolTaskExecutor.setCorePoolSize(5);
        threadPoolTaskExecutor.setMaxPoolSize(10);
        threadPoolTaskExecutor.setCorePoolSize(50);
        threadPoolTaskExecutor.setMaxPoolSize(100);
        threadPoolTaskExecutor.setQueueCapacity(20);
        threadPoolTaskExecutor.setKeepAliveSeconds(60);
        threadPoolTaskExecutor.setThreadNamePrefix("taskOrder-");
@@ -205,13 +205,15 @@
        count = fivePushTime / 3;
        processPushOrder(quoteName, count, uid, split, orderNo, xpTradingStrategy, distance, duration, planRule);
        // 最终没找到车
//        redisService.popFirstElement(quoteName);
        // 取消订单
        R<XpOrder> xpOrderR = xpOrderClient.queryOrderById(Long.valueOf(orderId));
        if(xpOrderR.getCode()==200){
            if (xpOrderR.getData().getStatus()==1) {
        if (xpOrderR.getCode() == 200) {
            if (xpOrderR.getData().getStatus() == 1) {
                xpOrderClient.cancelOrder(orderId);
                // 最终没找到车
                redisService.popFirstElement(quoteName);
            }
        }
@@ -229,6 +231,8 @@
     */
    @SneakyThrows
    private void processPushOrder(String quoteName, int count, String uid, String[] split, String orderNo, XpTradingStrategy xpTradingStrategy, String distance, String duration, String planRule) {
        // 卡住3秒
        Thread.sleep(3000);
        System.out.println("进入推单环环节");
        if (count == 0) {
            count = 1;
@@ -249,14 +253,13 @@
        XpElectronicFence xpElectronicFence = xpElectronicFenceMapper.selectById(electronicId);
        for (int i = 0; i < count; i++) {
            System.out.println("进入找车环节");
            // 根据距离找车
            // 车多则根据配置找具体车数量 根据距离最近
            // 更改 暂不限制数量
            List<VehiclePosition> positionList = vehiclePositionService.findAvailableVehiclesNearby(Double.parseDouble(split[0]), Double.parseDouble(split[1]), xpTradingStrategy.getOnePushDistance(), xpTradingStrategy.getSimultaneouslyOrderCount());
            log.info("根据距离找车 {}", positionList);
            log.info("根据距离找车 距离 {}KM  经度 {} 维度 {} 查找结果 {}", xpTradingStrategy.getOnePushDistance(), split[0], split[1], positionList);
            // 获取车辆的区域信息
            if (positionList.isEmpty()) {
                continue;
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java
@@ -2,17 +2,18 @@
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
import org.springframework.data.domain.Sort;
import org.springframework.data.geo.*;
import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Metrics;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.NearQuery;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class VehiclePositionService {
@@ -24,7 +25,7 @@
     * 查询附近指定距离内且状态正常的车辆
     * @param longitude 经度
     * @param latitude 纬度
     * @param distanceInMeters 距离(米)
     * @param distanceInMeters 距离(KM)
     * @return 符合条件的车辆列表
     */
    public List<VehiclePosition> findAvailableVehiclesNearby(double longitude,
@@ -55,7 +56,7 @@
            //找到中心点
            GeoJsonPoint geoJsonPoint = new GeoJsonPoint(longitude, latitude);
            //构造半径
            Distance distanceR = new Distance(distanceInMeters / 1000, Metrics.KILOMETERS);
            Distance distanceR = new Distance(distanceInMeters, Metrics.KILOMETERS);
            //画圆
            Circle circle = new Circle(geoJsonPoint, distanceR);
            // 构造query对象