浏览代码

`websocket`

wenhongquan 2 年之前
父节点
当前提交
9ba8460b96

+ 6 - 0
ruoyi-common/pom.xml

@@ -46,6 +46,12 @@
             <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
 
+        <!--   websocket     -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+
         <!--常用工具类 -->
         <dependency>
             <groupId>org.apache.commons</groupId>

+ 17 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/config/WebSocketStompConfig.java

@@ -0,0 +1,17 @@
+package com.ruoyi.framework.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+/**
+ * websocket的配置
+ */
+@Configuration
+public class WebSocketStompConfig{
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter()
+    {
+        return new ServerEndpointExporter();
+    }
+}

+ 8 - 0
ruoyi-system/src/main/java/com/ruoyi/data/service/WebsocketService.java

@@ -0,0 +1,8 @@
+package com.ruoyi.data.service;
+
+public interface WebsocketService {
+
+    public void sendMessageTo(String message, String ToUserName);
+
+    public void sendMessageAll(String message);
+}

+ 9 - 2
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/MqttServiceImpl.java

@@ -2,6 +2,7 @@ package com.ruoyi.data.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.utils.StringUtils;
@@ -14,6 +15,7 @@ import com.ruoyi.data.domain.vo.TblRecordVo;
 import com.ruoyi.data.domain.vo.TblSensorRecordVo;
 import com.ruoyi.data.mapper.*;
 import com.ruoyi.data.service.MqttService;
+import com.ruoyi.data.service.WebsocketService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
@@ -23,6 +25,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import sun.management.Sensor;
 
+import javax.annotation.PostConstruct;
 import java.text.SimpleDateFormat;
 import java.util.Base64;
 import java.util.Date;
@@ -44,6 +47,8 @@ public class MqttServiceImpl implements MqttService {
 
     private final TblSensorRecordMapper tblSensorRecordMapper;
 
+    private final WebsocketService websocketService;
+
     @Value("${mqtt.url}")
     private String mqttUrl;
 
@@ -75,7 +80,6 @@ public class MqttServiceImpl implements MqttService {
         List<MqttObj> mqttObjList = tblEquipmentMqttMapper.selectMqttListByDeviceId(mqttObj);
         TblRecord tblRecord = new TblRecord();
         tblRecord.setEquipmentId(deviceId);
-        tblRecord.setSensorId(sensorId);
         tblRecord.setJson(mqttStr);
         tblRecord.setCreateBy("admin");
         tblRecord.setUpdateBy("admin");
@@ -84,10 +88,12 @@ public class MqttServiceImpl implements MqttService {
         TblSensorRecordBo tblSensorRecord = new TblSensorRecordBo();
         tblSensorRecord.setEquipmentId(deviceId);
         tblSensorRecord.setJson(mqttStr);
+        tblSensorRecord.setSensorId(sensorId);
         tblSensorRecord.setCreateBy("admin");
         tblSensorRecord.setUpdateBy("admin");
-        tblSensorRecord.setSensorId(sensorId);
         updateNowRecord(tblSensorRecord);
+
+        websocketService.sendMessageAll(mqttStr);
 //      tblSensorRecordMapper.insert(tblSensorRecord);
         for(MqttObj obj:mqttObjList){
                if(obj.getStatus() == 1) {
@@ -235,4 +241,5 @@ public class MqttServiceImpl implements MqttService {
     }
 
 
+
 }

+ 79 - 0
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/WebsocketServiceImpl.java

@@ -0,0 +1,79 @@
+package com.ruoyi.data.service.impl;
+
+import cn.hutool.json.JSON;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.*;
+import com.google.api.client.util.Maps;
+import com.ruoyi.data.service.WebsocketService;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.stereotype.Component;
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Component
+@ServerEndpoint("/ws/realtimedata/{username}")
+public class WebsocketServiceImpl implements WebsocketService {
+
+    private static Map<String, Session> clients = new ConcurrentHashMap<String, Session>();
+
+
+    @OnOpen
+    public void onOpen(@PathParam("username") String username, Session session)
+    {
+        clients.put(username, session);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable error) {
+
+        //error.printStackTrace();
+    }
+    /**
+     * 连接关闭
+     */
+    @OnClose
+    public void onClose(@PathParam("username") String username, Session session)
+    {
+        clients.remove(username);
+    }
+
+    /**
+     * 收到客户端的消息
+     *
+     * @param message 消息
+     * @param session 会话
+     */
+    @OnMessage
+    public void onMessage(String message, Session session)
+    {
+        try {
+
+            //接收到数据
+
+        }
+        catch (Exception e){
+
+        }
+
+    }
+
+    @Override
+    public void sendMessageTo(String message, String ToUserName) {
+       if(clients.get(ToUserName)!=null){
+           clients.get(ToUserName).getAsyncRemote().sendText(message);
+       }
+    }
+
+    @Override
+    public void sendMessageAll(String message) {
+        for (Session item : clients.values()) {
+            item.getAsyncRemote().sendText(message);
+        }
+    }
+}

+ 1 - 0
ruoyi-ui-vue3/src/views/device/sensordash/index.vue

@@ -255,6 +255,7 @@
       <div>
 <!--        显示历史数据 折线图-->
 
+
       </div>
     </el-dialog>
   </div>