liujie
2026-02-13 0eb01e97fbd07b69b9c4e884181dc22f559c9eb2
feat(task): 集成自动驾驶订单推送功能

- 添加 PushOrderDto 和 OrderMissionClient 依赖注入
- 实现订单推送逻辑到自动驾驶任务系统
- 在订单分配时调用 orderMissionClient.pushOrder 接口
- 完善出租车乘客添加流程和车辆绑定逻辑
- 优化订单弹出队列处理机制
2个文件已修改
50 ■■■■■ 已修改文件
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -1,10 +1,12 @@
package com.xiaopeng.operation.utils;
import cn.hutool.core.bean.BeanUtil;
import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.dto.operation.VehiclePositionByVinDto;
import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
import com.xiaopeng.api.feignClient.automatic.OrderMissionClient;
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient;
@@ -72,6 +74,9 @@
    @Autowired
    private XpMapClient xpMapClient;
    @Autowired
    private OrderMissionClient orderMissionClient;
    // 自定义线程池
@@ -640,15 +645,13 @@
                        BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
                        if (baseVehicleUserDto!=null && baseVehicleUserDto.getCode() == 200) {
                            // TODO 下单
                            PushOrderDto pushOrderDto = new PushOrderDto();
                            pushOrderDto.setOrderId(xpOrder.getId());
                            pushOrderDto.setVin(vehiclePosition.getVehicleVin());
                            // 调用推送服务  orderId + carVin
                            orderMissionClient.pushOrder(pushOrderDto);
                            // 绑定成功  弹出这个队列第一个订单
                            redisService.popFirstElement(quoteName);
                            return;
                        }
                    } catch (Exception e) {
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -40,6 +40,7 @@
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.account.UserCouponVo;
import com.xiaopeng.api.vo.order.*;
import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo;
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.domain.R;
@@ -768,7 +769,8 @@
        xpOrderCancelService.save(xpOrderCancel);
        // 推送消息
        // 消息推送
        Map<String, Object> params = new HashMap<>();
        Map<String, Object> content = new HashMap<>();
@@ -1684,26 +1686,35 @@
    @Transactional
//    @ShardingTransactionType(TransactionType.BASE)
    public void popOrder(PopOrderDto dto) {
        XpOrder order = this.getById(dto.getOrderId());
        order.setAcceptanceTime(LocalDateTime.now());
        AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
        R<XpVehicle> byVehicleVin = xpVehicleClient.findByVehicleVin(dto.getXpVehicleVin());
        if (byVehicleVin.getCode()==200){
            order.setVehicleId(byVehicleVin.getData().getId());
            addTaxiPassengerVo.setVin(byVehicleVin.getData().getVehicleVin());
        }
        order.setStatus(2);
        // Redis弹出这个队列元素
        // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间
        String popFirstElement = redisService.popFirstElement(order.getQueueName());
        XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity();
        String[] split = popFirstElement.split("_");
        xpGeoQueryEntity.setOrderId(split[0]);
        // 存mongo数据
        xpPricingClient.updateXpGeoQueryEntity(split[0]);
        this.updateById(order);
        addTaxiPassengerVo.setUid(order.getAppUserId().toString());
        addTaxiPassengerVo.setOrderNo(order.getOrderNumber());
        // TODO appid
        addTaxiPassengerVo.setAppId("");
        BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
        if(baseVehicleUserDto.getCode()==200){
            // Redis弹出这个队列元素
            // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间
            String popFirstElement = redisService.popFirstElement(order.getQueueName());
            XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity();
            String[] split = popFirstElement.split("_");
            xpGeoQueryEntity.setOrderId(split[0]);
            // 存mongo数据
            xpPricingClient.updateXpGeoQueryEntity(split[0]);
            this.updateById(order);
        }
    }