ZhuDongming
2020-06-30 a9c3fe66d59c504a18f6a8d0f639be99a68fb7d6
update动态选择设备绑定
8 files modified
213 ■■■■■ changed files
src/main/java/com/moral/config/WebSocketConfig.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/DeviceMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/DeviceService.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/DeviceServiceImpl.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/webSocketServer/WebSocketServer.java 36 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/DeviceMapper.xml 22 ●●●●● patch | view | raw | blame | history
src/main/webapp/js/newmoralmap.js 106 ●●●● patch | view | raw | blame | history
src/main/webapp/view/newmap.jsp 8 ●●●● 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">' + "时间:&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();
        });
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>