From 88956c805e7bb6e5787446154449cf8e7f435f63 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 20 三月 2026 16:11:27 +0800
Subject: [PATCH] 添加日志记录排查消息推送

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |  179 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 158 insertions(+), 21 deletions(-)

diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
index 3bfca24..1c768a9 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -54,6 +54,7 @@
 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.constant.Constants;
 import com.xiaopeng.common.core.constant.HttpStatus;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.enums.OrderStatusEnum;
@@ -114,6 +115,8 @@
 import java.text.SimpleDateFormat;
 import java.time.*;
 import java.util.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -641,7 +644,27 @@
             SendMessageDTO sendMessageDTO = new SendMessageDTO();
             sendMessageDTO.setMessage(message);
             sendMessageDTO.setAppUserId(String.valueOf(userId));
-            xpPushMessageClient.sendStatus(sendMessageDTO);
+            R<String> stringR = xpPushMessageClient.sendStatus(sendMessageDTO);
+
+            //推送失败,重试3次
+            if(stringR.getCode() != Constants.SUCCESS){
+                ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
+                executor.execute(() -> {
+                    for (int i = 0; i < 3; i++) {
+                        R<String> stringR1 = xpPushMessageClient.sendStatus(sendMessageDTO);
+                        if(stringR1.getCode() == Constants.SUCCESS){
+                            break;
+                        }
+                        try {
+                            Thread.sleep(1000);
+                        } catch (InterruptedException e) {
+                            throw new RuntimeException(e);
+                        }
+                        log.info("运维人员取消订单推送订单状态消息失败:{} {} {}", stringR1.getMsg(), JSON.toJSONString(sendMessageDTO), xpOrder.getOrderNumber());
+                    }
+                });
+            }
+
             return;
         }
         // 1. 更新订单状态为已取消(0)
@@ -667,7 +690,25 @@
         SendMessageDTO sendMessageDTO = new SendMessageDTO();
         sendMessageDTO.setMessage(message);
         sendMessageDTO.setAppUserId(String.valueOf(userId));
-        xpPushMessageClient.sendStatus(sendMessageDTO);
+        R<String> stringR = xpPushMessageClient.sendStatus(sendMessageDTO);
+        //推送失败,重试3次
+        if(stringR.getCode() != Constants.SUCCESS){
+            ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
+            executor.execute(() -> {
+                for (int i = 0; i < 3; i++) {
+                    R<String> stringR1 = xpPushMessageClient.sendStatus(sendMessageDTO);
+                    if(stringR1.getCode() == Constants.SUCCESS){
+                        break;
+                    }
+                    try {
+                        Thread.sleep(1000);
+                    } catch (InterruptedException e) {
+                        throw new RuntimeException(e);
+                    }
+                    log.info("运维人员取消订单推送订单状态消息失败:{} {} {}", stringR1.getMsg(), JSON.toJSONString(sendMessageDTO), xpOrder.getOrderNumber());
+                }
+            });
+        }
         log.info("运营人员取消订单成功,推送乘客消息完成");
 
         //查询车辆信息
@@ -730,8 +771,25 @@
         SendMessageDTO sendMessageDTO = new SendMessageDTO();
         sendMessageDTO.setMessage(message);
         sendMessageDTO.setAppUserId(String.valueOf(order.getAppUserId()));
-        xpPushMessageClient.sendStatus(sendMessageDTO);
-        log.info("运营人员取消订单成功,推送乘客消息完成");
+        R<String> stringR = xpPushMessageClient.sendStatus(sendMessageDTO);
+        //推送失败,重试3次
+        if(stringR.getCode() != Constants.SUCCESS){
+            ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
+            executor.execute(() -> {
+                for (int i = 0; i < 3; i++) {
+                    R<String> stringR1 = xpPushMessageClient.sendStatus(sendMessageDTO);
+                    if(stringR1.getCode() == Constants.SUCCESS){
+                        break;
+                    }
+                    try {
+                        Thread.sleep(1000);
+                    } catch (InterruptedException e) {
+                        throw new RuntimeException(e);
+                    }
+                    log.info("运维人员关闭订单推送订单状态消息失败:{} {} {}", stringR1.getMsg(), JSON.toJSONString(sendMessageDTO), xpOrder.getOrderNumber());
+                }
+            });
+        }
         log.info("订单关闭成功,订单ID: {}, 操作人: {}", order.getId(), SecurityUtils.getUsername());
     }
 
@@ -1330,7 +1388,27 @@
         SendMessageDTO sendMessageDTO = new SendMessageDTO();
         sendMessageDTO.setMessage(message);
         sendMessageDTO.setAppUserId(String.valueOf(appUserId));
-        xpPushMessageClient.sendStatus(sendMessageDTO);
+        R<String> stringR = xpPushMessageClient.sendStatus(sendMessageDTO);
+        //推送失败,重试3次
+        if(stringR.getCode() != Constants.SUCCESS){
+            ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
+            executor.execute(() -> {
+                for (int i = 0; i < 3; i++) {
+                    R<String> stringR1 = xpPushMessageClient.sendStatus(sendMessageDTO);
+                    if(stringR1.getCode() == Constants.SUCCESS){
+                        break;
+                    }
+                    try {
+                        Thread.sleep(1000);
+                    } catch (InterruptedException e) {
+                        throw new RuntimeException(e);
+                    }
+                    log.info("定时任务取消订单推送订单状态消息失败:{} {} {}", stringR1.getMsg(), JSON.toJSONString(sendMessageDTO), xpOrder.getOrderNumber());
+                }
+            });
+        }
+
+
         log.info("定时任务取消订单推送消息完毕");
 
         // 移除mongo数据
@@ -1425,6 +1503,39 @@
                 xpOrder.setTripBegin(LocalDateTime.now());
                 break;
             case 7:
+                // 推送倒计时消息
+                Map<String, Object> params = new HashMap<>();
+                Map<String, Object> content = new HashMap<>();
+                content.put("orderId", xpOrder.getId().toString());
+                content.put("isOpen", 1);
+                params.put("type", PushMessageTypeEnum.OPEN_TRUNK.getDesc());
+                params.put("content", JSONObject.toJSONString(content));
+                params.put("timestamp", new Date().getTime() + "");
+                String message = JSONObject.toJSONString(params);
+                SendMessageDTO sendMessageDTO = new SendMessageDTO();
+                sendMessageDTO.setMessage(message);
+                sendMessageDTO.setAppUserId(String.valueOf(xpOrder.getAppUserId()));
+                R<String> stringR = xpPushMessageClient.sendStatus(sendMessageDTO);
+                //推送失败,重试3次
+                if(stringR.getCode() != Constants.SUCCESS){
+                    ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
+                    executor.execute(() -> {
+                        for (int i = 0; i < 3; i++) {
+                            R<String> stringR1 = xpPushMessageClient.sendStatus(sendMessageDTO);
+                            if(stringR1.getCode() == Constants.SUCCESS){
+                                break;
+                            }
+                            try {
+                                Thread.sleep(1000);
+                            } catch (InterruptedException e) {
+                                throw new RuntimeException(e);
+                            }
+                            log.info("推送倒计时消息失败:{} {} {}", stringR1.getMsg(), JSON.toJSONString(sendMessageDTO), xpOrder.getOrderNumber());
+                        }
+                    });
+                }
+
+                //创建定时结束订单和等待结束后下发巡游单的定时任务
                 Integer arriveTime = xpSystemSettingClient.getOrderFinishTime().getData();
                 // 添加自动结束行程定时任务job
                 Map<String, ? extends Object> endTripJobMaps =
@@ -1454,19 +1565,6 @@
                         DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(point.getParkingTimeLimit())),
                         jobMaps
                 );
-                // 推送倒计时消息
-                Map<String, Object> params = new HashMap<>();
-                Map<String, Object> content = new HashMap<>();
-                content.put("orderId", xpOrder.getId().toString());
-                content.put("isOpen", 1);
-                params.put("type", PushMessageTypeEnum.OPEN_TRUNK.getDesc());
-                params.put("content", JSONObject.toJSONString(content));
-                params.put("timestamp", new Date().getTime() + "");
-                String message = JSONObject.toJSONString(params);
-                SendMessageDTO sendMessageDTO = new SendMessageDTO();
-                sendMessageDTO.setMessage(message);
-                sendMessageDTO.setAppUserId(String.valueOf(xpOrder.getAppUserId()));
-                xpPushMessageClient.sendStatus(sendMessageDTO);
                 break;
         }
         xpOrder.setStatus(status);
@@ -2433,6 +2531,9 @@
     public void saveVehicleLocation(OrderTrajectory orderTrajectory) {
         // 查询订单信息
         XpOrder xpOrder = this.getById(orderTrajectory.getOrderId());
+        if(xpOrder.getStatus() != 6){
+            return;
+        }
 
         // 计算距离
         // 获取上一次定位
@@ -2715,8 +2816,26 @@
             SendMessageDTO messageDTO = new SendMessageDTO();
             messageDTO.setAppUserId(appUserId);
             messageDTO.setMessage(jsonObject.toJSONString());
-            System.err.println(messageDTO);
-            xpPushMessageClient.sendRoute(messageDTO);
+            R<String> stringR = xpPushMessageClient.sendRoute(messageDTO);
+            XpOrder xpOrder = this.getById(orderId);
+            //推送失败,重试3次
+            if(stringR.getCode() != Constants.SUCCESS){
+                ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
+                executor.execute(() -> {
+                    for (int i = 0; i < 3; i++) {
+                        R<String> stringR1 = xpPushMessageClient.sendStatus(messageDTO);
+                        if(stringR1.getCode() == Constants.SUCCESS){
+                            break;
+                        }
+                        try {
+                            Thread.sleep(1000);
+                        } catch (InterruptedException e) {
+                            throw new RuntimeException(e);
+                        }
+                        log.info("推送乘客端导航数据消息失败:{} {} {}", stringR1.getMsg(), JSON.toJSONString(messageDTO), xpOrder.getOrderNumber());
+                    }
+                });
+            }
         }
     }
 
@@ -2819,7 +2938,25 @@
         SendMessageDTO sendMessageDTO = new SendMessageDTO();
         sendMessageDTO.setMessage(message);
         sendMessageDTO.setAppUserId(String.valueOf(appUserId));
-        xpPushMessageClient.sendStatus(sendMessageDTO);
+        R<String> stringR = xpPushMessageClient.sendStatus(sendMessageDTO);
+        //推送失败,重试3次
+        if(stringR.getCode() != Constants.SUCCESS){
+            ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
+            executor.execute(() -> {
+                for (int i = 0; i < 3; i++) {
+                    R<String> stringR1 = xpPushMessageClient.sendStatus(sendMessageDTO);
+                    if(stringR1.getCode() == Constants.SUCCESS){
+                        break;
+                    }
+                    try {
+                        Thread.sleep(1000);
+                    } catch (InterruptedException e) {
+                        throw new RuntimeException(e);
+                    }
+                    log.info("运维人员修改订单价格推送订单状态消息失败:{} {} {}", stringR1.getMsg(), JSON.toJSONString(sendMessageDTO), xpOrder.getOrderNumber());
+                }
+            });
+        }
         log.info("订单修改价格推送消息完毕");
     }
 }

--
Gitblit v1.7.1