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