puzhibing
2026-03-23 623cd3f63889f3263ac13391c1885b669fec3d66
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -622,8 +622,10 @@
                String vin = jsonObject.getString("vin");
                XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData();
                if (null != vehicle && 0 != vehicle.getState()) {
                    vehicle.setState(0);
                    xpVehicleClient.updateVehicleById(vehicle);
                    XpVehicle vehicle1 = new XpVehicle();
                    vehicle1.setId(vehicle.getId());
                    vehicle1.setState(0);
                    xpVehicleClient.updateVehicleById(vehicle1);
                }
            }
        }
@@ -731,8 +733,10 @@
            //还原车辆状态
            if(1 == xpVehicle.getState()){
                xpVehicle.setState(0);
                xpVehicleClient.updateVehicleById(xpVehicle);
                XpVehicle vehicle1 = new XpVehicle();
                vehicle1.setId(xpVehicle.getId());
                vehicle1.setState(0);
                xpVehicleClient.updateVehicleById(vehicle1);
            }
            // 下发命令
@@ -743,7 +747,7 @@
            orderMissionClient.cancelOrder(pushOrderDto);
            log.info("运营人员取消订单成功,开始执行巡游订单 {}", order.getId());
            //车辆继续巡游
            addCruiseMission(xpVehicle);
            addCruiseMission(xpVehicle.getId());
        } else {
            log.info("查询车辆信息失败,订单ID: {}, 下发取消订单命令失败", order.getId());
@@ -984,12 +988,15 @@
                    }
                    // 6.1.3 修改原车辆状态为空闲
                    oldVehicle.setState(0);
                    xpVehicleClient.updateVehicleById(oldVehicle);
                    XpVehicle vehicle1 = new XpVehicle();
                    vehicle1.setId(oldVehicle.getId());
                    vehicle1.setState(0);
                    xpVehicleClient.updateVehicleById(vehicle1);
                    log.info("已将原车辆状态设为空闲,车辆ID: {}", oldVehicleId);
                    // 6.1.4 为原车辆创建返程巡游订单
                    createReturnCruiseOrder(oldVehicle, order);
                    --------------
                    createReturnCruiseOrder(oldVehicle.getId(), order);
                } else {
                    log.warn("查询原车辆信息失败,车辆ID: {}", oldVehicleId);
                }
@@ -1082,8 +1089,10 @@
            log.info("已下发订单到新车辆,订单ID: {}, VIN: {}", orderId, newVehicle.getVehicleVin());
            // 11.3 更新新车辆状态为已接单
            newVehicle.setState(1);
            xpVehicleClient.updateVehicleById(newVehicle);
            XpVehicle vehicle1 = new XpVehicle();
            vehicle1.setId(newVehicle.getId());
            vehicle1.setState(1);
            xpVehicleClient.updateVehicleById(vehicle1);
            log.info("已将新车辆状态设为已接单,车辆ID: {}", newVehicleId);
        } catch (Exception e) {
@@ -1101,10 +1110,10 @@
     * - 其他状态,默认返回原出发点
     * </p>
     *
     * @param oldVehicle 原车辆信息
     * @param order      当前订单信息
     */
    private void createReturnCruiseOrder(XpVehicle oldVehicle, XpOrder order) {
    private void createReturnCruiseOrder(Long vehicleId, XpOrder order) {
        XpVehicle oldVehicle = xpVehicleClient.queryById(vehicleId).getData();
        try {
            // 查询该车辆最新的一条巡游订单
            XpCruiseOrder lastCruise = xpCruiseOrderMapper.selectOne(
@@ -1374,8 +1383,10 @@
                String vin = jsonObject.getString("vin");
                XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData();
                if (null != vehicle && 0 != vehicle.getState()) {
                    vehicle.setState(0);
                    xpVehicleClient.updateVehicleById(vehicle);
                    XpVehicle vehicle1 = new XpVehicle();
                    vehicle1.setId(vehicle.getId());
                    vehicle1.setState(0);
                    xpVehicleClient.updateVehicleById(vehicle1);
                }
            }
        }
@@ -1433,8 +1444,10 @@
            //还原车辆状态
            if (1 == xpVehicle.getState()) {
                xpVehicle.setState(0);
                xpVehicleClient.updateVehicleById(xpVehicle);
                XpVehicle vehicle1 = new XpVehicle();
                vehicle1.setId(xpVehicle.getId());
                vehicle1.setState(0);
                xpVehicleClient.updateVehicleById(vehicle1);
            }
            //下发XPU报文
@@ -1445,7 +1458,7 @@
            orderMissionClient.cancelOrder(pushOrderDto);
            log.info("用户取消订单成功,开始执行巡游订单 {}", order.getId());
            //车辆继续巡游
            addCruiseMission(xpVehicle);
            addCruiseMission(xpVehicle.getId());
        }
    }
@@ -2097,11 +2110,11 @@
    /**
     * 添加巡游任务下发命令
     *
     * @param vehicle
     * @param order
     */
    public void addCruiseMission(XpVehicle vehicle, XpOrder order) {
    public void addCruiseMission(Long vehicleId, XpOrder order) {
        XpVehicle vehicle = xpVehicleClient.queryById(vehicleId).getData();
        log.info("添加巡游订单 {}", vehicle.getPlateNumber());
        if (vehicle.getState() != 0 || vehicle.getOperatingStatus() != 1) {
            log.info("添加巡游单失败,车辆状态限制 {}", vehicle.getState());
@@ -2178,14 +2191,16 @@
        if(null != xpTaskRule){
            LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime();
            if (vehicleCollectionTime.isBefore(LocalTime.now())) {
                vehicle.setOperatingStatus(3);
                XpVehicle vehicle1 = new XpVehicle();
                vehicle1.setId(vehicle.getId());
                vehicle1.setOperatingStatus(3);
                xpVehicleClient.updateVehicleById(vehicle1);
                //找到车辆的收车点位 更新终点点位
                R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder);
                xpCruiseOrder = returnCruisePoint.getData();
                xpCruiseOrder.setOrderType(2);
                xpCruiseOrder.setOrderReverse(1);
            }
            xpVehicleClient.updateVehicleById(vehicle);
        }
        xpCruiseOrderMapper.insert(xpCruiseOrder);
        log.info("添加巡游单成功 {}", xpCruiseOrder.getId());
@@ -2208,7 +2223,8 @@
     * 取消订单后的继续巡游任务
     * @param vehicle
     */
    public void addCruiseMission(XpVehicle vehicle) {
    public void addCruiseMission(Long vehicleId) {
        XpVehicle vehicle = xpVehicleClient.queryById(vehicleId).getData();
        if (vehicle.getState() != 0 || vehicle.getOperatingStatus() != 1) {
            return;
        }
@@ -2287,14 +2303,16 @@
        if(null != xpTaskRule){
            LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime();
            if (vehicleCollectionTime.isBefore(LocalTime.now())) {
                vehicle.setOperatingStatus(3);
                XpVehicle vehicle1 = new XpVehicle();
                vehicle1.setId(vehicle.getId());
                vehicle1.setOperatingStatus(3);
                xpVehicleClient.updateVehicleById(vehicle1);
                //找到车辆的收车点位 更新终点点位
                R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder);
                xpCruiseOrder = returnCruisePoint.getData();
                xpCruiseOrder.setOrderType(2);
                xpCruiseOrder.setOrderReverse(1);
            }
            xpVehicleClient.updateVehicleById(vehicle);
        }
        xpCruiseOrderMapper.insert(xpCruiseOrder);
@@ -2852,8 +2870,10 @@
                // 存mongo数据
                xpPricingClient.updateXpGeoQueryEntity(order.getId().toString());
                // 修改车辆信息
                vehicle.setState(1);
                xpVehicleClient.updateVehicleById(vehicle);
                XpVehicle vehicle1 = new XpVehicle();
                vehicle1.setId(vehicle.getId());
                vehicle1.setState(1);
                xpVehicleClient.updateVehicleById(vehicle1);
                //绑定用户和车辆关系
                addTaxiPassengerVo.setUid(appUserId.toString());