package com.xiaopeng.pushMessage.webSocket.handler; 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; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Component; @Component @Slf4j public class PositionMsgHandler implements BusinessMsgHandler{ @Override public String getMessageType() { return "position"; } @Override public void handle(String uid, String msg) { XpOperationsUserPositionDTO xpOperationsUserPositionDTO; try { xpOperationsUserPositionDTO = om.readValue(msg, XpOperationsUserPositionDTO.class); } catch (JsonProcessingException e) { throw new RuntimeException(e); } if (null != xpOperationsUserPositionDTO) { xpOperationsUserPositionDTO.setId(Long.parseLong(uid)); saveToMongo(xpOperationsUserPositionDTO); } } @Autowired ObjectMapper om; @Autowired MongoTemplate mongoTemplate; private void saveToMongo(XpOperationsUserPositionDTO dto) { XpOperationsUserPositionDTO vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("id").is(dto.getId())), XpOperationsUserPositionDTO.class); if (null == vehiclePosition) { double[] location = {dto.getLongitude(), dto.getLatitude()}; dto.setLocation(location); mongoTemplate.save(dto); }else{ Update update = new Update() .set("id",dto.getId()) .set("latitude", dto.getLatitude()) .set("longitude", dto.getLongitude()); double[] location = {dto.getLongitude(), dto.getLatitude()}; 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()); } }