From 3cc3d0a10593c109a015d01ee05de8da73443778 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 14 四月 2026 20:39:03 +0800
Subject: [PATCH] [feat]事故任务分派逻辑完善、转派工单

---
 xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PushMessageWebSocketHandler.java |   42 ++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PushMessageWebSocketHandler.java b/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PushMessageWebSocketHandler.java
index 030bdd3..21eecdb 100644
--- a/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PushMessageWebSocketHandler.java
+++ b/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PushMessageWebSocketHandler.java
@@ -2,11 +2,17 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import com.xiaopeng.api.dto.account.XpOperationsUserPositionDTO;
 import com.xiaopeng.pushMessage.webSocket.service.WebSocketUserConnectionManager;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 import org.springframework.web.socket.CloseStatus;
@@ -14,6 +20,7 @@
 import org.springframework.web.socket.WebSocketSession;
 import org.springframework.web.socket.handler.TextWebSocketHandler;
 
+import javax.annotation.PostConstruct;
 import java.time.LocalDateTime;
 import java.util.UUID;
 
@@ -31,6 +38,16 @@
 
     @Autowired
     private WebSocketAuthHandler authHandler;
+
+    private ObjectMapper om;
+
+    @PostConstruct
+    void setupObjectMapper() {
+        // 允许对象忽略json中不存在的属性
+        om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        om.registerModule(new JavaTimeModule());
+        om = new ObjectMapper();
+    }
 
     // ==================== 连接生命周期 ====================
 
@@ -61,6 +78,12 @@
         log.info("[服务器] 收到消息 -> {}", payload);
 
         try {
+            if (payload.startsWith("pos:")) {
+                if (log.isDebugEnabled())
+                    log.debug("收到运维人员位置上报消息:{}",payload);
+                XpOperationsUserPositionDTO xpOperationsUserPositionDTO = om.readValue(payload.substring(4), XpOperationsUserPositionDTO.class);
+                saveToMongo(xpOperationsUserPositionDTO);
+            }
             JSONObject messageObj = JSON.parseObject(payload);
             String messageType = messageObj.getString("type");
 
@@ -77,6 +100,21 @@
         }
     }
 
+    @Autowired
+    private MongoTemplate mongoTemplate;
+    private void saveToMongo(XpOperationsUserPositionDTO dto) {
+        XpOperationsUserPositionDTO vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("id").is(dto.getId())), XpOperationsUserPositionDTO.class);
+        if (null == vehiclePosition) {
+            mongoTemplate.save(dto);
+        }else{
+            Update update = new Update()
+                    .set("id",dto.getId())
+                    .set("latitude", dto.getLatitude())
+                    .set("latitude", dto.getLongitude());
+            mongoTemplate.updateFirst(new Query(Criteria.where("id").is(dto.getId())), update, XpOperationsUserPositionDTO.class);
+        }
+    }
+
     // ==================== 业务处理 ====================
 
     /**

--
Gitblit v1.7.1