From a9c3fe66d59c504a18f6a8d0f639be99a68fb7d6 Mon Sep 17 00:00:00 2001
From: ZhuDongming <773644075@qq.com>
Date: Tue, 30 Jun 2020 15:00:47 +0800
Subject: [PATCH] update动态选择设备绑定

---
 src/main/java/com/moral/service/DeviceService.java           |   10 +-
 src/main/resources/mapper/DeviceMapper.xml                   |   22 +++++
 src/main/java/com/moral/config/WebSocketConfig.java          |    9 ++
 src/main/java/com/moral/mapper/DeviceMapper.java             |    2 
 src/main/webapp/js/newmoralmap.js                            |  106 +++++++++++++-------------
 src/main/java/com/moral/webSocketServer/WebSocketServer.java |   36 ++++++--
 src/main/java/com/moral/service/impl/DeviceServiceImpl.java  |   20 +++++
 src/main/webapp/view/newmap.jsp                              |    8 +-
 8 files changed, 141 insertions(+), 72 deletions(-)

diff --git a/src/main/java/com/moral/config/WebSocketConfig.java b/src/main/java/com/moral/config/WebSocketConfig.java
index 513e2d7..71ac2eb 100644
--- a/src/main/java/com/moral/config/WebSocketConfig.java
+++ b/src/main/java/com/moral/config/WebSocketConfig.java
@@ -1,7 +1,11 @@
 package com.moral.config;
 
+import com.moral.service.DeviceService;
+import com.moral.webSocketServer.WebSocketServer;
+
 import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
 import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -18,4 +22,9 @@
         return new Jackson2JsonMessageConverter();
     }
 
+    @Autowired
+    public void setMessageService(DeviceService deviceService){
+        WebSocketServer.deviceService=deviceService;
+    }
+
 }
diff --git a/src/main/java/com/moral/mapper/DeviceMapper.java b/src/main/java/com/moral/mapper/DeviceMapper.java
index 2aa2714..ed36184 100644
--- a/src/main/java/com/moral/mapper/DeviceMapper.java
+++ b/src/main/java/com/moral/mapper/DeviceMapper.java
@@ -52,4 +52,6 @@
 	List<Device> getDeviceById3(@Param("id") int id);
 
 	List<Integer> getHasWindDirAndWindSpeedDeviceVersion();
+
+	List<Device> selectDevicesAll(Map<String, Object> params);
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/service/DeviceService.java b/src/main/java/com/moral/service/DeviceService.java
index 39ca627..78c2ae8 100644
--- a/src/main/java/com/moral/service/DeviceService.java
+++ b/src/main/java/com/moral/service/DeviceService.java
@@ -1,13 +1,13 @@
 package com.moral.service;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
 import com.moral.common.bean.PageBean;
 import com.moral.common.bean.PageResult;
 import com.moral.entity.Device;
 import com.moral.entity.DeviceProperty;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
 
 public interface DeviceService {
 
@@ -68,4 +68,6 @@
 	List<Device> getDeviceById2(int id);
 	//������������������
 	List<Device> getDeviceById3(int id);
+
+	List<Device> queryDevice(Map<String,Object> map);
 }
diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
index 830090e..5394e12 100644
--- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -667,4 +667,24 @@
     public List<Device> getDeviceById3(int id) {
         return deviceMapper.getDeviceById3(id);
     }
+
+    @Override
+    public List<Device> queryDevice(Map<String, Object> params) {
+        List<Integer> dv = deviceMapper.getHasWindDirAndWindSpeedDeviceVersion();
+        Object orgIdObj = params.get("orgId");
+        List<Device> deviceList = null;
+        if (orgIdObj != null) {
+            Integer orgId = Integer.parseInt(orgIdObj.toString());
+            List<Integer> orgIds = orgMapper.selectLowerOrgIds(orgId);
+            params.put("orgIds", orgIds);
+            deviceList = deviceMapper.selectDevicesAll(params);
+        }
+        List<Device> deviceListHasWind=new ArrayList<>();
+        for (Device d : deviceList) {
+            if (dv.contains(d.getDeviceVersionId())) {
+                deviceListHasWind.add(d);
+            }
+        }
+        return deviceListHasWind;
+    }
 }
diff --git a/src/main/java/com/moral/webSocketServer/WebSocketServer.java b/src/main/java/com/moral/webSocketServer/WebSocketServer.java
index e119744..46b26d4 100644
--- a/src/main/java/com/moral/webSocketServer/WebSocketServer.java
+++ b/src/main/java/com/moral/webSocketServer/WebSocketServer.java
@@ -1,8 +1,10 @@
 package com.moral.webSocketServer;
 
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.TimeoutException;
 
 import javax.websocket.OnClose;
 import javax.websocket.OnError;
@@ -12,7 +14,9 @@
 import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
 
-import com.moral.service.MonitorPointService;
+import com.moral.common.util.ParameterUtils;
+import com.moral.entity.Device;
+import com.moral.service.DeviceService;
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Connection;
 import com.rabbitmq.client.ConnectionFactory;
@@ -30,7 +34,7 @@
 @Component
 public class WebSocketServer {
 
-    public static MonitorPointService monitorPointService;
+    public static DeviceService deviceService;
 
     // ������������������������������������������������������������������������������
     private Session session;
@@ -38,6 +42,8 @@
     private String orgId;
 
     private String accountId;
+
+    private String regionCode;
 
     private Connection connection;
 
@@ -57,9 +63,16 @@
         //������������������������������������������������
         webSocketSet.add(this);
         int flag = param.indexOf("&");
+        int regionCodeIndex = param.indexOf("_");
         orgId = param.substring(0, flag);
-        accountId = param.substring(flag + 1);
-        String QUEUE_NAME = "deviceInfo_"+accountId;
+        accountId = param.substring(flag + 1,regionCodeIndex);
+        regionCode = param.substring(regionCodeIndex + 1);
+        String QUEUE_NAME = "deviceInfo_" + accountId;
+        Map<String, Object> paramMap = new HashMap<String, Object>();
+        paramMap.put("orgId", orgId);
+        paramMap.put("regionCode", regionCode);
+        ParameterUtils.getRegionType4RegionCode(paramMap);
+        List<Device> deviceList = deviceService.queryDevice(paramMap);
         try {
             //������������������������������������������������
             ConnectionFactory factory = new ConnectionFactory();
@@ -68,13 +81,15 @@
             factory.setPort(5672);
             factory.setUsername("guest");
             factory.setPassword("guest_pass");
-            String routingKey = orgId+".*";
+            String routingKey;
             connection = factory.newConnection();
             channel = connection.createChannel();
             //���������������������������������������������������������������������������������������������������������
             channel.queueDeclare(QUEUE_NAME, false, false, true, null);
-            channel.queueBind(QUEUE_NAME,"screens_data",routingKey);
-
+            for (Device d : deviceList) {
+                routingKey = orgId + "." + d.getMac();
+                channel.queueBind(QUEUE_NAME, "screens_data", routingKey);
+            }
             //���������������������
             QueueingConsumer consumer = new QueueingConsumer(channel);
             //������������������
@@ -86,7 +101,7 @@
                 String message = new String(delivery.getBody());
                 sendMessage(message);
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             log.error(e.getMessage());
         }
     }
@@ -99,9 +114,8 @@
         /**���������Set��� ������������������������*/
         webSocketSet.remove(this);
         try {
-            channel.close();
             connection.close();
-        }catch (IOException | TimeoutException e){
+        } catch (IOException e) {
             log.error(e.getMessage());
         }
     }
diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml
index 2d97897..d2c0b74 100644
--- a/src/main/resources/mapper/DeviceMapper.xml
+++ b/src/main/resources/mapper/DeviceMapper.xml
@@ -459,5 +459,27 @@
 		and is_delete=0;
 	</select>
 
+	<select id="selectDevicesAll" parameterType="java.util.Map" resultType="com.moral.entity.Device">
+		SELECT dev.id,dev.mac,dev.device_version_id deviceVersionId from device dev
+		left join monitor_point  mpt on dev.monitor_point_id = mpt.id
+		<where>
+			<if test="@com.moral.common.bean.Constants@isNotSpecialOrgId(orgId)">
+				(
+				1 > 1
+				<if test="orgIds!=null and orgIds.size() > 0">
+					or mpt.organization_id in
+					<foreach collection="orgIds" item="tempOrgId" open="(" close=")" separator=",">
+						#{tempOrgId,jdbcType=INTEGER}
+					</foreach>
+				</if>
+				)
+			</if>
+			<if test="regionCode != null">
+				AND mpt.${regionType}_code = #{regionCode}
+			</if>
+			AND dev.is_delete =0
+		</where>
+	</select>
+
 
 </mapper>
\ No newline at end of file
diff --git a/src/main/webapp/js/newmoralmap.js b/src/main/webapp/js/newmoralmap.js
index 9dd84cf..7966162 100644
--- a/src/main/webapp/js/newmoralmap.js
+++ b/src/main/webapp/js/newmoralmap.js
@@ -944,59 +944,59 @@
         }
         var mouseOverHandle = option['mouseover'];
         moralMarker.addEventListener("mouseover", function () {
-            /*   var obj = {};
-               obj['methodName'] = 'deliverMac';
-               obj['mac'] = option['mac'];
-               var objStr = JSON.stringify(obj);
-               if (!!window['external'] && !!window['external']['callWin']) {
-                   window['external'].callWin(objStr);
-               } else {
-                   alert(objStr);
-               }*/
+            var obj = {};
+            obj['methodName'] = 'deliverMac';
+            obj['mac'] = option['mac'];
+            var objStr = JSON.stringify(obj);
+            if (!!window['external'] && !!window['external']['callWin']) {
+                window['external'].callWin(objStr);
+            } else {
+                alert(objStr);
+            }
 
             moralMap.showSensors = function (jsonData) {
-                var deviceSensors = jsonData;
-                var mac = deviceSensors["mac"];
-                if (mac == option['mac']) {
-                    if (!jsonData.hasOwnProperty('mac')) {
-                        infoWindow.setContent("");
-                        infoWindow.redraw();
-                    } else {
-                        var adressOutHtml = '<div style="min-height:20px;overflow:auto;max-height:480px;font-size: 12px;" onmouseover="moralMap.clearCloseInfoWindow()" onmouseout="moralMap.closeInfoWindow()">';
-                        var y, m, d, h, mm, s;
-                        var date = new Date($.now());
-                        y = 1900 + date.getYear();
-                        m = "0" + (date.getMonth() + 1);
-                        d = "0" + date.getDate();
-                        h = "0" + date.getHours();
-                        mm = "0" + date.getMinutes();
-                        s = "0" + date.getSeconds();
-                        date = y + "-" + m.substring(m.length - 2, m.length) + "-" + d.substring(d.length - 2, d.length) + " " + h.substring(h.length - 2, h.length) + ":" + mm.substring(mm.length - 2, mm.length) + ":" + s.substring(s.length - 2, s.length);
-                        adressOutHtml += '<p style="height: 18px;line-height: 18px">' + "���������&nbsp;" + date + "&nbsp;</p>";
-                        for (var prop in jsonData) {
-                            if (jsonData.hasOwnProperty(prop) && prop != 'ver' && prop != 'methodName' && prop != 'mac' && prop != 'time') {
-                                for (var key in sensorsDescriptionMap) {
-                                    if (prop == key) {
-                                        var sensorsDescription = sensorsDescriptionMap[key];
-                                    }
+                /* var deviceSensors = jsonData;
+                 var mac = deviceSensors["mac"];
+                 if (mac == option['mac']) {*/
+                if (!jsonData.hasOwnProperty('mac')) {
+                    infoWindow.setContent("");
+                    infoWindow.redraw();
+                } else {
+                    var adressOutHtml = '<div style="min-height:20px;overflow:auto;max-height:480px;font-size: 12px;" onmouseover="moralMap.clearCloseInfoWindow()" onmouseout="moralMap.closeInfoWindow()">';
+                    var y, m, d, h, mm, s;
+                    var date = new Date($.now());
+                    y = 1900 + date.getYear();
+                    m = "0" + (date.getMonth() + 1);
+                    d = "0" + date.getDate();
+                    h = "0" + date.getHours();
+                    mm = "0" + date.getMinutes();
+                    s = "0" + date.getSeconds();
+                    date = y + "-" + m.substring(m.length - 2, m.length) + "-" + d.substring(d.length - 2, d.length) + " " + h.substring(h.length - 2, h.length) + ":" + mm.substring(mm.length - 2, mm.length) + ":" + s.substring(s.length - 2, s.length);
+                    adressOutHtml += '<p style="height: 18px;line-height: 18px">' + "���������&nbsp;" + date + "&nbsp;</p>";
+                    for (var prop in jsonData) {
+                        if (jsonData.hasOwnProperty(prop) && prop != 'ver' && prop != 'methodName' && prop != 'mac' && prop != 'time') {
+                            for (var key in sensorsDescriptionMap) {
+                                if (prop == key) {
+                                    var sensorsDescription = sensorsDescriptionMap[key];
                                 }
-                                for (var key in sensorsUnitMap) {
-                                    if (prop == key) {
-                                        var sensorsUnit = sensorsUnitMap[key];
-                                        if (sensorsUnit == null) {
-                                            sensorsUnit = "";
-                                        }
-                                    }
-                                }
-                                adressOutHtml += ('<p style="height: 18px;line-height: 18px">' + sensorsDescription + "���" + jsonData[prop] + sensorsUnit + "</p>");
                             }
+                            for (var key in sensorsUnitMap) {
+                                if (prop == key) {
+                                    var sensorsUnit = sensorsUnitMap[key];
+                                    if (sensorsUnit == null) {
+                                        sensorsUnit = "";
+                                    }
+                                }
+                            }
+                            adressOutHtml += ('<p style="height: 18px;line-height: 18px">' + sensorsDescription + "���" + jsonData[prop] + sensorsUnit + "</p>");
                         }
-                        adressOutHtml += "</div>";
-                        infoWindow.setContent(adressOutHtml);
-                        infoWindow.redraw();
                     }
+                    adressOutHtml += "</div>";
+                    infoWindow.setContent(adressOutHtml);
+                    infoWindow.redraw();
                 }
             }
+            // }
             /*   if (!$.isEmptyObject(sensorInfo)) {
                    moralMap.openInfoWindow(infoWindow, this._point); //������������������
                }*/
@@ -1004,14 +1004,14 @@
         });
 
         moralMarker.addEventListener("mouseout", function () {
-            /*  var obj = {};
-              obj['methodName'] = 'stopDeliverMac';
-              var objStr = JSON.stringify(obj);
-              if (!!window['external'] && !!window['external']['callWin']) {
-                  window['external'].callWin(objStr);
-              } else {
-                  alert(objStr);
-              }*/
+            var obj = {};
+            obj['methodName'] = 'stopDeliverMac';
+            var objStr = JSON.stringify(obj);
+            if (!!window['external'] && !!window['external']['callWin']) {
+                window['external'].callWin(objStr);
+            } else {
+                alert(objStr);
+            }
             moralMap.closeInfoWindow();
         });
 
diff --git a/src/main/webapp/view/newmap.jsp b/src/main/webapp/view/newmap.jsp
index 205811d..d3e7710 100644
--- a/src/main/webapp/view/newmap.jsp
+++ b/src/main/webapp/view/newmap.jsp
@@ -677,7 +677,7 @@
         if (typeof (WebSocket) === "undefined") {
             alert("������������������������WebSocket");
         } else {
-            ws = new WebSocket('ws://' + hostAndPort + '/screen/webSocket/' + orgId + '&' + accountId);
+            ws = new WebSocket('ws://' + hostAndPort + '/screen/webSocket/' + orgId + '&' + accountId+'_'+regionCode);
             ws.onopen = function () {
             };
 
@@ -685,9 +685,9 @@
             ws.onmessage = function (msg) {
                 // $("#searchParam").val(JSON.parse(msg.data));
                 moralMap.refreshWindDir(JSON.parse(JSON.parse(msg.data)));
-                if (moralMap.showSensors && typeof (moralMap.showSensors) == "function") {
+              /*  if (moralMap.showSensors && typeof (moralMap.showSensors) == "function") {
                     moralMap.showSensors(JSON.parse(JSON.parse(msg.data)));
-                }
+                }*/
             };
 
             //������������
@@ -812,7 +812,7 @@
             var states = jsonData.states;
             moralMap.refreshState(states);
         } else if ("DeliverSensors" == methodName) {
-            // moralMap.showSensors(jsonData);
+            moralMap.showSensors(jsonData);
         }
     }
 </script>

--
Gitblit v1.8.0