xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PositionMsgHandler.java
@@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.xiaopeng.api.dto.account.XpOperationsUserPositionDTO; 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; @@ -11,6 +12,7 @@ import org.springframework.stereotype.Component; @Component @Slf4j public class PositionMsgHandler implements BusinessMsgHandler{ @Override @@ -49,6 +51,7 @@ update.set("location", location); mongoTemplate.updateFirst(new Query(Criteria.where("id").is(dto.getId())), update, XpOperationsUserPositionDTO.class); } log.info("保存位置信息成功:id:{},longitude:{},latitude:{}", dto.getId(), dto.getLongitude(),dto.getLatitude()); } } xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/TestMsgHandler.java
New file @@ -0,0 +1,69 @@ package com.xiaopeng.pushMessage.webSocket.handler; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.xiaopeng.api.vo.TaskVO; import com.xiaopeng.pushMessage.webSocket.service.WebSocketUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.HashMap; @Component @Slf4j public class TestMsgHandler implements BusinessMsgHandler{ @Override public String getMessageType() { return "test"; } @Autowired private WebSocketUserService webSocketUserService; @Override public void handle(String uid, String msg) { TaskVO vo = new TaskVO(); vo.setHandleUserId("1"); vo.setId(1L); vo.setStatus(1); vo.setTaskCode("1"); vo.setTaskTypeId("1"); vo.setTaskTypeName("1"); vo.setTaskUrgencyLevel(1); vo.setVehicleId(1L); vo.setVehicleLocation("1"); vo.setPlateNumber("1"); vo.setVehicleLat(BigDecimal.ZERO); vo.setVehicleLon(BigDecimal.ZERO); vo.setCanArriveRange(1D); vo.setEndTime(null); vo.setHandleUserId("1"); vo.setVehicleLocation("1"); vo.setPlateNumber("1"); vo.setVehicleId(1L); vo.setCanArriveRange(1D); vo.setEndTime(null); vo.setHandleUserId("1"); vo.setVehicleLocation("1"); vo.setPlateNumber("1"); vo.setVehicleId(1L); vo.setHandleUserId("1341243234"); HashMap<String, Object> ret = new HashMap<>(); ret.put("type", "task"); ret.put("data", vo); try { msg = om.writeValueAsString(ret); } catch (JsonProcessingException e) { log.error("Failed to serialize message for uid: {}", uid, e); throw new RuntimeException("Message serialization failed", e); } webSocketUserService.sendMessageToUser(uid, msg); } @Autowired ObjectMapper om; @Autowired MongoTemplate mongoTemplate; } xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/WebSocketTextFrameHandler.java
@@ -165,23 +165,16 @@ if (appUserId != null) { log.info("收到用户 {} 的业务消息: {}", appUserId, messageObj.toJSONString()); businessMsgHandlers.get(messageObj.getString("type")).handle(appUserId, messageObj.getString("message")); //判断处理用户实时位置 if ("location".equals(messageObj.getString("type"))) { log.info("收到用户 {} 的实时位置消息: {}", appUserId, messageObj.toJSONString()); Double latitude = messageObj.getDouble("latitude"); Double longitude = messageObj.getDouble("longitude"); saveAppUserLocation(Long.parseLong(appUserId), latitude, longitude); } businessMsgHandlers.get(messageObj.getString("type")).handle(appUserId, messageObj.toJSONString()); // 回复消息 JSONObject response = new JSONObject(); response.put("type", "message_response"); response.put("appUserId", appUserId); response.put("originalMessage", messageObj); response.put("serverTime", LocalDateTime.now().toString()); ctx.channel().writeAndFlush(new TextWebSocketFrame(response.toJSONString())); // JSONObject response = new JSONObject(); // response.put("type", "message_response"); // response.put("appUserId", appUserId); // response.put("originalMessage", messageObj); // response.put("serverTime", LocalDateTime.now().toString()); // // ctx.channel().writeAndFlush(new TextWebSocketFrame(response.toJSONString())); } else { log.warn("收到未认证连接的业务消息: {}", messageObj.toJSONString()); @@ -224,20 +217,4 @@ ctx.channel().close(); } private void saveAppUserLocation(Long appUserId, Double latitude, Double longitude) { AppUserPosition userPosition = mongoTemplate.findOne(Query.query(Criteria.where("appUserId").is(appUserId)), AppUserPosition.class); GeoJsonPoint point = new GeoJsonPoint(longitude, latitude); if(null != userPosition){ mongoTemplate.updateFirst(Query.query(Criteria.where("appUserId").is(appUserId)), Update.update("point", point).set("addTime", System.currentTimeMillis()), AppUserPosition.class); }else{ userPosition = new AppUserPosition(); userPosition.setAppUserId(appUserId); userPosition.setPoint(point); userPosition.setAddTime(System.currentTimeMillis()); mongoTemplate.save(userPosition); } } }