فهرست منبع

Merge branch 'master' of http://git.xt.wenhq.top:8083/wenhongquan/iotc

# Conflicts:
#	ruoyi-system/src/main/java/com/ruoyi/data/service/impl/MqttServiceImpl.java
liwei19941102 2 سال پیش
والد
کامیت
ebcbba1179

+ 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);
+}

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

@@ -2,7 +2,9 @@ package com.ruoyi.data.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.json.JSONArray;
+import cn.hutool.core.lang.UUID;
 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;
@@ -15,6 +17,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;
@@ -24,6 +27,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;
@@ -45,6 +49,8 @@ public class MqttServiceImpl implements MqttService {
 
     private final TblSensorRecordMapper tblSensorRecordMapper;
 
+    private final WebsocketService websocketService;
+
     @Value("${mqtt.url}")
     private String mqttUrl;
 
@@ -96,10 +102,11 @@ 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);
         String protocolType = "";
         for(MqttObj obj:mqttObjList){
@@ -127,7 +134,7 @@ public class MqttServiceImpl implements MqttService {
         MQTTConnect mqttConnect = new MQTTConnect();
         try {
             System.out.println(mqttUrl);
-            mqttConnect.createMqttClient(mqttUrl,clientID,mqttUser,mqttPassword,new Callback());
+            mqttConnect.createMqttClient(mqttUrl, UUID.fastUUID().toString(),mqttUser,mqttPassword,new Callback());
             mqttConnect.sub(mqttTopic);
         }catch (Exception e){
             e.printStackTrace();
@@ -248,4 +255,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>