package com.xiaopeng.pushMessage.webSocket.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; 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.geo.GeoJsonPoint; 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 java.time.LocalDateTime; @Component @Slf4j public class PositionMsgHandler implements BusinessMsgHandler{ @Autowired private MongoTemplate mongoTemplate; @Override public String getMessageType() { return "position"; } @Override public void handle(String uid, String msg) { JSONObject jsonObject = JSON.parseObject(msg); if (null != jsonObject) { saveToMongo(uid, jsonObject); } } private void saveToMongo(String uid, JSONObject jsonObject) { Double latitude = jsonObject.getDouble("latitude"); Double longitude = jsonObject.getDouble("longitude"); XpOperationsUserPositionDTO vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("id").is(uid)), XpOperationsUserPositionDTO.class); if (null == vehiclePosition) { vehiclePosition = new XpOperationsUserPositionDTO(); GeoJsonPoint location = new GeoJsonPoint(longitude, latitude); vehiclePosition.setLocation(location); vehiclePosition.setId(Long.parseLong(uid)); vehiclePosition.setLatitude(latitude); vehiclePosition.setLongitude(longitude); vehiclePosition.setLocation(location); vehiclePosition.setUpdateTime(System.currentTimeMillis()); mongoTemplate.save(vehiclePosition); }else{ Update update = new Update() .set("id", Long.parseLong(uid)) .set("latitude", latitude) .set("longitude", longitude) .set("updateTime", System.currentTimeMillis()); GeoJsonPoint location = new GeoJsonPoint(longitude, latitude); update.set("location", location); mongoTemplate.updateFirst(new Query(Criteria.where("id").is(Long.parseLong(uid))), update, XpOperationsUserPositionDTO.class); } log.info("保存位置信息成功:id:{},longitude:{},latitude:{}", uid, longitude, latitude); } }