liujie
2026-06-09 c96fbe6b0aeb413a17c429133ee6d81d138144b9
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java
@@ -1,5 +1,6 @@
package com.xiaopeng.maintenance.schedule;
import cn.hutool.core.lang.Snowflake;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
import com.xiaopeng.api.feignClient.operation.XpCruisePlanClient;
@@ -9,7 +10,9 @@
import com.xiaopeng.api.model.order.XpCruiseOrder;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
import com.xiaopeng.api.vo.automaticPilot.protobuf.TaskActionType;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.utils.SensitiveDataCryptoUtil;
import com.xiaopeng.maintenance.mapper.XpTaskRuleMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,6 +24,7 @@
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.time.LocalTime;
import java.util.Collections;
import java.util.List;
@@ -62,6 +66,9 @@
    @Autowired
    private XpCruisePlanClient xpCruisePlanClient;
    @Resource(name = "hutoolSnowflake")
    private Snowflake snowflake;
    /**
     * 每分钟检查一次是否需要执行收车任务
@@ -197,11 +204,12 @@
     * @param xpVehicle 车辆信息
     */
    private void sendCollectionCommand(XpVehicle xpVehicle) {
        String vin = SensitiveDataCryptoUtil.decryptIfPossible(xpVehicle.getVehicleVin());
        // 收车 关闭当前巡游单子 生成新的返程单子  找到收车站点
        R<Long> r = xpCruiseOrderClient.cancelCruiseOrderByVin(xpVehicle.getVehicleVin());
        XpCruiseOrder oldCruiseOrder = xpCruiseOrderClient.cancelCruiseOrderByVin(vin).getData();
        // mongodb 获取当前最新经纬度位置
        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class);
        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vin)), VehiclePosition.class);
        XpCruiseOrder xpCruiseOrder = new XpCruiseOrder();
        if(vehiclePosition!=null){
            double x = vehiclePosition.getPoint().getX();
@@ -215,13 +223,19 @@
        xpCruiseOrder.setOrderType(2);
        xpCruiseOrder.setStatus(1);
        xpCruiseOrder.setOrderReverse(1);
        xpCruiseOrder.setLastOrderId(r.getData());
        xpCruiseOrder.setLastOrderId(oldCruiseOrder.getId());
        xpCruiseOrder.setOrderReverse(1);
        xpCruiseOrder.setXpuTaskId(snowflake.nextId() + "");
        // 找到收车站点
        R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder);
        if (returnCruisePoint.getData() != null) {
            xpCruiseOrderClient.addCruiseOrder(returnCruisePoint.getData());
        if (returnCruisePoint.getData() != null && 200 == returnCruisePoint.getCode()) {
            XpCruiseOrder cruiseOrder = returnCruisePoint.getData();
            //不停车替换新任务
            cruiseOrder.setLastOrderId1("XU" + oldCruiseOrder.getId());
            cruiseOrder.setLastXpuTaskId(oldCruiseOrder.getXpuTaskId());
            cruiseOrder.setTaskActionType(TaskActionType.kTerminateForNewTask);
            xpCruiseOrderClient.addCruiseOrder(cruiseOrder);
        }
        log.info("向车辆[{}]发送收车指令", xpVehicle.getPlateNumber());
    }