src/main/java/com/moral/config/WebSocketConfig.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/mapper/DeviceMapper.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/DeviceService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/impl/DeviceServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/webSocketServer/WebSocketServer.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/DeviceMapper.xml | ●●●●● patch | view | raw | blame | history | |
src/main/webapp/js/newmoralmap.js | ●●●●● patch | view | raw | blame | history | |
src/main/webapp/view/newmap.jsp | ●●●●● patch | view | raw | blame | history |
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; } } 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); } 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); } 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; } } 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()); } } 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> 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(); }); 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>