实时轨迹2
parent
ed19328a7a
commit
e9259b8045
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue