From ad0f3c5321e4f1ba6388c8ada1462b978c25674d Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 12 五月 2026 21:10:36 +0800
Subject: [PATCH] 修改bug

---
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java |   49 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 46 insertions(+), 3 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 4cad90b..6958263 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
@@ -37,6 +37,7 @@
 import com.xiaopeng.common.core.constant.Constants;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.enums.OrderStatusEnum;
+import com.xiaopeng.common.core.enums.PushMessageTypeEnum;
 import com.xiaopeng.common.redis.service.RedisService;
 import com.xiaopeng.operation.config.UidVinBindingConfig;
 import com.xiaopeng.operation.dto.PriorityMatchResult;
@@ -1084,12 +1085,13 @@
                         //非合作商的车辆需要处理巡游单
                         if(null != vehiclePosition.getOfficialPartnerId()){
                             //  关闭巡游单子
-                            R stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vehiclePosition.getVehicleVin());
+                            R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vehiclePosition.getVehicleVin());
                             if (stringR == null || stringR.getCode() != 200) {
                                 log.info("关闭巡游单子失败 车牌号 {}", vehiclePosition.getPlateNumber());
                                 continue;
                             }
                             log.info("关闭巡游单成功 {} {}", vehiclePosition.getPlateNumber(), orderNo);
+                            XpCruiseOrder cruiseOrder = stringR.getData();
                             // 下发命令
                             PushOrderDto pushOrderDto = new PushOrderDto();
                             pushOrderDto.setVin(vehiclePosition.getVehicleVin());
@@ -1103,6 +1105,9 @@
                             pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
                             pushOrderDto.setOrderType(OrderType.USER_ORDER);
                             pushOrderDto.setStage(1);
+                            pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
+                            pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
+                            pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
                             // 调用推送服务  orderId + carVin
                             orderMissionClient.pushOrder(pushOrderDto);
                             log.info("开始推送 {} 订单到XPU。单号 {}", xpOrder.getOrderNumber(), orderNo);
@@ -1152,12 +1157,13 @@
 
                         if(null == vehicleId1.getOfficialPartnerId()){
                             //  关闭巡游单子
-                            R<?> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vehicleId1.getVehicleVin());
+                            R<XpCruiseOrder> stringR = xpCruiseOrderClient.cancelCruiseOrderByVin(vehicleId1.getVehicleVin());
                             if (stringR == null || stringR.getCode() != 200) {
                                 log.info("关闭巡游单子失败 车牌号 {}", vehicleId1.getPlateNumber());
                                 continue;
                             }
                             log.info("关闭巡游单成功 {} {}", vehicleId1.getPlateNumber(), orderNo);
+                            XpCruiseOrder cruiseOrder = stringR.getData();
                             PushOrderDto pushOrderDto = new PushOrderDto();
                             pushOrderDto.setVin(vehiclePosition.getVin());
                             pushOrderDto.setOrderId(xpOrder.getId().toString());
@@ -1170,6 +1176,9 @@
                             pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
                             pushOrderDto.setOrderType(OrderType.USER_ORDER);
                             pushOrderDto.setStage(1);
+                            pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
+                            pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
+                            pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
                             // 调用推送服务  orderId + carVin
                             orderMissionClient.pushOrder(pushOrderDto);
                         }else {
@@ -1263,6 +1272,40 @@
                     redisService.setCacheObject(CacheConstants.navigationStart(xpOrder.getAppUserId().toString()), JSON.toJSONString(route));
                     redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
                     log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
+
+                    //构建推送消息
+                    Map<String, Object> params = new HashMap<>();
+                    Map<String, Object> content = new HashMap<>();
+                    content.put("orderId", xpOrder.getId().toString());
+                    content.put("status", 2);
+                    params.put("type", PushMessageTypeEnum.ORDER_STATUS.getDesc());
+                    params.put("content", JSONObject.toJSONString(content));
+                    params.put("timestamp", System.currentTimeMillis() + "");
+                    String message = JSONObject.toJSONString(params);
+                    SendMessageDTO dto1 = new SendMessageDTO();
+                    dto1.setAppUserId(xpOrder.getAppUserId() + "");
+                    dto1.setMessage(message);
+                    R<String> stringR = xpPushMessageClient.sendStatus(dto1);
+
+                    //推送失败,重试3次
+                    if (stringR.getCode() != Constants.SUCCESS) {
+                        ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
+                        XpOrder finalXpOrder = xpOrder;
+                        executor.execute(() -> {
+                            for (int j = 0; j < 3; j++) {
+                                R<String> stringR1 = xpPushMessageClient.sendStatus(dto1);
+                                if (stringR1.getCode() == Constants.SUCCESS) {
+                                    break;
+                                }
+                                try {
+                                    Thread.sleep(1000);
+                                } catch (InterruptedException e) {
+                                    throw new RuntimeException(e);
+                                }
+                                log.info("推送订单状态消息失败:{} {} {}", stringR1.getMsg(), JSON.toJSONString(dto1), finalXpOrder.getOrderNumber());
+                            }
+                        });
+                    }
                     return true;
                 }
             }
@@ -2432,7 +2475,7 @@
                 entity.setIsComplete(true);
 //                //接单成功 将 修改 订单的状态=1 ( 状态 0=已取消,1=待接单,2=待出发,3=接驾中,4=待客上车,5=乘客已上车,6=服务中,7=待客下车,8=待付款,9=待评价,10=已完成)
 //                orderCarStatus = true;
-                xpOrderClient.updateOrderStatus(data.getId(), OrderStatusEnum.PENDING_ORDER.getCode(), false);
+                xpOrderClient.updateOrderStatus(data.getId(), OrderStatusEnum.PENDING_ORDER.getCode());
                 redisService.setCacheObject("ORDER_STATUS:" + data.getId(), OrderStatusEnum.PENDING_ORDER.getCode(), 24L, TimeUnit.HOURS);
 
                 break;

--
Gitblit v1.7.1