diff --git a/src/main/java/com/ruoyi/device/websocket/FlightLogWebSocket.java b/src/main/java/com/ruoyi/device/websocket/FlightLogWebSocket.java deleted file mode 100644 index 4bfb543..0000000 --- a/src/main/java/com/ruoyi/device/websocket/FlightLogWebSocket.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.ruoyi.device.websocket; - -import com.alibaba.fastjson2.JSON; -import com.ruoyi.device.mapper.entity.FlightLogEntity; -import com.ruoyi.device.service.FlightService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import jakarta.websocket.*; -import jakarta.websocket.server.PathParam; -import jakarta.websocket.server.ServerEndpoint; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArraySet; - -/** - * 飞行日志WebSocket - * - * @author ruoyi - * @date 2026-02-25 - */ -@Slf4j -@Component -@ServerEndpoint("/websocket/flightLog/{deviceSn}") -public class FlightLogWebSocket { - - private Session session; - - private String deviceSn; - - private static final CopyOnWriteArraySet sessions = new CopyOnWriteArraySet<>(); - - private static final Map sessionMap = new ConcurrentHashMap<>(); - - private static FlightService flightService; - - @Autowired - public void setFlightService(FlightService flightService) { - FlightLogWebSocket.flightService = flightService; - } - - @OnOpen - public void onOpen(Session session, @PathParam("deviceSn") String deviceSn) { - this.session = session; - this.deviceSn = deviceSn; - sessions.add(this); - sessionMap.put(session.getId(), this); - log.info("飞行日志WebSocket连接建立: sessionId={}, deviceSn={}", session.getId(), deviceSn); - } - - @OnClose - public void onClose() { - sessions.remove(this); - if (session != null) { - sessionMap.remove(session.getId()); - log.info("飞行日志WebSocket连接关闭: sessionId={}, deviceSn={}", session.getId(), deviceSn); - } else { - log.info("飞行日志WebSocket连接关闭: session为null"); - } - } - - @OnMessage - public void onMessage(String message) { - log.info("收到飞行日志WebSocket消息: sessionId={}, message={}", session.getId(), message); - } - - @OnError - public void onError(Session session, Throwable error) { - log.error("飞行日志WebSocket错误: sessionId={}, deviceSn={}, error={}", - session.getId(), deviceSn, error.getMessage(), error); - } - - private void sendMessage(String message) { - try { - if (session != null && session.isOpen()) { - session.getBasicRemote().sendText(message); - } - } catch (Exception e) { - log.error("发送飞行日志WebSocket消息失败: deviceSn={}, error={}", deviceSn, e.getMessage(), e); - } - } - - @Scheduled(fixedRate = 3000) - public void broadcast() { - for (FlightLogWebSocket ws : sessions) { - Map flightData = flightService.getLatestFlightWithLogs(ws.deviceSn); - if (flightData == null) { - continue; - } - - String status = (String) flightData.get("status"); - List logs = (List) flightData.get("flightLogs"); - - Map response = new ConcurrentHashMap<>(); - response.put("status", status); - response.put("logs", logs); - - ws.sendMessage(JSON.toJSONString(response)); - } - } -} diff --git a/src/main/java/com/ruoyi/device/websocket/PreCheckLogWebSocket.java b/src/main/java/com/ruoyi/device/websocket/PreCheckLogWebSocket.java index df5b38a..aed26cf 100644 --- a/src/main/java/com/ruoyi/device/websocket/PreCheckLogWebSocket.java +++ b/src/main/java/com/ruoyi/device/websocket/PreCheckLogWebSocket.java @@ -1,6 +1,7 @@ package com.ruoyi.device.websocket; import com.alibaba.fastjson2.JSON; +import com.ruoyi.device.mapper.entity.FlightLogEntity; import com.ruoyi.device.mapper.entity.PreCheckLogEntity; import com.ruoyi.device.service.FlightService; import lombok.extern.slf4j.Slf4j; @@ -11,25 +12,23 @@ import org.springframework.stereotype.Component; import jakarta.websocket.*; import jakarta.websocket.server.PathParam; import jakarta.websocket.server.ServerEndpoint; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet; /** - * 自检日志WebSocket + * 飞行日志WebSocket (包含自检日志和飞行日志) * * @author ruoyi * @date 2026-02-25 */ @Slf4j @Component -@ServerEndpoint("/websocket/preCheckLog/{deviceSn}") +@ServerEndpoint("/websocket/flightLog/{deviceSn}") public class PreCheckLogWebSocket { private Session session; - private String deviceSn; private static final CopyOnWriteArraySet sessions = new CopyOnWriteArraySet<>(); @@ -49,7 +48,7 @@ public class PreCheckLogWebSocket { this.deviceSn = deviceSn; sessions.add(this); sessionMap.put(session.getId(), this); - log.info("自检日志WebSocket连接建立: sessionId={}, deviceSn={}", session.getId(), deviceSn); + log.info("飞行日志WebSocket连接建立: sessionId={}, deviceSn={}", session.getId(), deviceSn); } @OnClose @@ -92,12 +91,10 @@ public class PreCheckLogWebSocket { continue; } - String status = (String) flightData.get("status"); - List logs = (List) flightData.get("preCheckLogs"); - Map response = new ConcurrentHashMap<>(); - response.put("status", status); - response.put("logs", logs); + response.put("status", flightData.get("status")); + response.put("preCheckLogs", flightData.get("preCheckLogs")); + response.put("flightLogs", flightData.get("flightLogs")); ws.sendMessage(JSON.toJSONString(response)); }