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">' + "��������� " + date + " </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">' + "��������� " + date + " </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