实时轨迹2

master
tangwenkang 2023-12-03 14:11:15 +08:00
parent ed19328a7a
commit e9259b8045
2 changed files with 21 additions and 98 deletions

View File

@ -1,6 +1,5 @@
package com.dragon.vehicle.history.server.service.impl;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dragon.common.core.domain.PageResult;
@ -18,14 +17,14 @@ import com.dragon.vehicle.history.server.mapper.FenceMapper;
import com.dragon.vehicle.history.server.service.CarService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.log4j.Log4j2;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Service;
import com.rabbitmq.client.Channel;
import java.util.List;
import java.util.Objects;
import java.util.Set;
/**
* @author Wenkang Tang
@ -43,6 +42,8 @@ public class CarServiceImpl implements CarService {
private FenceMapper fenceMapper;
@Autowired
private RedisService redisService;
@Autowired
private RedisTemplate<String,String> redisTemplate;
/**
*
@ -156,8 +157,20 @@ public class CarServiceImpl implements CarService {
*/
@Override
public Result<VehicleData> listRealTime(String vin) {
Object cacheObject = redisService.getCacheObject("runtimeTraceEvent"+vin);
VehicleData vehicleData = JSONObject.parseObject(cacheObject.toString(), VehicleData.class);
return Result.success(vehicleData);
// 获取当前时间戳
long currentTimestamp = System.currentTimeMillis();
// 设置score的范围为负无穷到当前时间戳获取最新的数据
Set<ZSetOperations.TypedTuple<String>> vehicleData = redisTemplate.opsForZSet().reverseRangeByScoreWithScores("vehicleData", Double.NEGATIVE_INFINITY, currentTimestamp, 0, 1);
// 检查是否有数据
if (vehicleData != null && !vehicleData.isEmpty()) {
// 获取最新的数据
ZSetOperations.TypedTuple<String> latestData = vehicleData.iterator().next();
VehicleData latestVehicleData = VehicleData.getBuild(Objects.requireNonNull(latestData.getValue()));
return Result.success(latestVehicleData);
}
return null;
}
}

View File

@ -1,90 +0,0 @@
package com.dragon.vehicle.history.server.websocket;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author Wenkang Tang
* @date 2023/12/1 20:51
* @description
*/
@ServerEndpoint("/ws")
@Service
@Log4j2
public class WebSocketServer {
//连接计数器
private static final AtomicInteger ONLINE_COUNT = new AtomicInteger(0);
//存放每个客户端对应的Session对象
private static final CopyOnWriteArraySet<WebSocketServer> SOCKET_SERVERS =new CopyOnWriteArraySet<WebSocketServer>();
/**
*
* @param session
*/
@OnOpen
public void onOpen(Session session){
SOCKET_SERVERS.add(this);
int countSum = ONLINE_COUNT.incrementAndGet();
log.info("有链接加入,当前连接数为:{}",countSum);
}
/**
*
*/
@OnClose
public void onClose(){
SOCKET_SERVERS.remove(this);
int countSum = ONLINE_COUNT.decrementAndGet();
log.info("有链接关闭,当前连接数为:{}",countSum);
}
/**
*
* @param message
* @param session
*/
@OnMessage
public void onMessage(String message,Session session){
log.info("收到客户端消息:{}",message);
sendMessage(session,"服务端接收到消息,消息内容为:{}"+message);
}
/**
*
* @param session
* @param error
*/
@OnError
public void onError(Session session,Throwable error){
log.error("发生错误:{},Session ID:{}",error.getMessage(),session.getId());
error.printStackTrace();
}
/**
*
* @param session
* @param message
*/
public static void sendMessage(Session session, String message){
while (session.isOpen()){
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
session.getBasicRemote().sendText(message);
log.info("客户端开始发送数据");
log.info("发送时间为:"+simpleDateFormat.format(date));
} catch (IOException e) {
log.error("发送消息出现错误:{}",e.getMessage());
e.printStackTrace();
}
}
}
}