From 3a46aae0a8e9e4bd3cb8dcd1185a69a74668995b Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Tue, 15 Dec 2020 14:08:47 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/com/moral/service/DeviceService.java                      |    3 
 src/main/webapp/view/unorganizedMapV2.jsp                               |  193 ++++++++++++++++++++++++
 src/main/resources/mapper/DeviceMapper.xml                              |    6 
 src/main/java/com/moral/config/WebSocketConfig.java                     |    6 
 src/main/java/com/moral/mapper/DeviceMapper.java                        |    2 
 src/main/java/com/moral/controller/ScreenController.java                |    7 
 src/main/java/com/moral/service/impl/DeviceServiceImpl.java             |    5 
 src/main/java/com/moral/webSocketServer/ElectronicSWebSocketServer.java |  224 ++++++++++++++++++++++++++++
 8 files changed, 445 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/moral/config/WebSocketConfig.java b/src/main/java/com/moral/config/WebSocketConfig.java
index a021668..824d0d3 100644
--- a/src/main/java/com/moral/config/WebSocketConfig.java
+++ b/src/main/java/com/moral/config/WebSocketConfig.java
@@ -1,5 +1,6 @@
 package com.moral.config;
 
+import com.moral.service.AccountService;
 import com.moral.service.DeviceService;
 import com.moral.service.SensorService;
 import com.moral.webSocketServer.*;
@@ -34,9 +35,14 @@
         BSAQIWebSocketServerTest.deviceService=deviceService;
     }
     @Autowired
+    public void setMessageService(AccountService accountService){
+        ElectronicSWebSocketServer.accountService=accountService;
+    }
+    @Autowired
     public void setSensorService( SensorService sensorService){
         BSWebsocketServer.sensorService=sensorService;
         BSAQIWebSocketServer.sensorService=sensorService;
+        ElectronicSWebSocketServer.sensorService=sensorService;
         BSAQIWebSocketServerTest.sensorService=sensorService;
     }
 
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 65924e7..34b7118 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -2987,4 +2987,11 @@
         }
         return new ResultBean<List<Map<String,Object>>>(rList);
     }
+
+    @PostMapping("byAccountGetDevices")
+    public List<Device> byAccountGetDevices(@RequestBody Map<String, Object> parameters) {
+        String id =parameters.get("id").toString();
+        List<Device> devicesList = deviceService.getDevicesByAccountId(id);
+        return devicesList;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/DeviceMapper.java b/src/main/java/com/moral/mapper/DeviceMapper.java
index a30d2e1..4cedb72 100644
--- a/src/main/java/com/moral/mapper/DeviceMapper.java
+++ b/src/main/java/com/moral/mapper/DeviceMapper.java
@@ -95,5 +95,5 @@
 
     List<Device> getDeviceByCityCode();
 
-
+    List<Device> getDevicesByAccountId(String id);
 }
\ 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 0789f53..28038d1 100644
--- a/src/main/java/com/moral/service/DeviceService.java
+++ b/src/main/java/com/moral/service/DeviceService.java
@@ -90,4 +90,7 @@
 	List<Device> getDevice(String macOrName);
 
 	List<Device> getDeviceByCode();
+
+	List<Device> getDevicesByAccountId(String id);
+
 }
diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
index f7168de..2a020ef 100644
--- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -1130,4 +1130,9 @@
         return deviceMapper.getDeviceByCityCode();
     }
 
+    @Override
+    public List<Device> getDevicesByAccountId(String id) {
+        return deviceMapper.getDevicesByAccountId(id);
+    }
+
 }
diff --git a/src/main/java/com/moral/webSocketServer/ElectronicSWebSocketServer.java b/src/main/java/com/moral/webSocketServer/ElectronicSWebSocketServer.java
new file mode 100644
index 0000000..75e24cb
--- /dev/null
+++ b/src/main/java/com/moral/webSocketServer/ElectronicSWebSocketServer.java
@@ -0,0 +1,224 @@
+package com.moral.webSocketServer;
+
+import com.alibaba.fastjson.JSON;
+import com.moral.entity.Account;
+import com.moral.entity.Device;
+import com.moral.entity.Sensor;
+import com.moral.service.AccountService;
+import com.moral.service.DeviceService;
+import com.moral.service.SensorService;
+import com.moral.util.RabbitMQUtils;
+import com.rabbitmq.client.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.CrossOrigin;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.TimeoutException;
+
+@Slf4j
+@ServerEndpoint("/web/ESWebSocket/{param}")
+@Component
+public class ElectronicSWebSocketServer {
+
+    public static AccountService accountService;
+
+    public static SensorService sensorService;
+
+    /**
+     * concurrent������������������Set���������������������������������������WebSocket���������
+     */
+    public static CopyOnWriteArraySet<ElectronicSWebSocketServer> webSocketSet = new CopyOnWriteArraySet<ElectronicSWebSocketServer>();
+
+    /**
+     * ������������������������������������������������������������������������������
+     */
+    private Session session;
+
+    private String orgId;
+    private String accountId;
+    private String mac;
+
+    private final String exchange = "screens_data";
+    Connection connection;
+    Channel channel;
+
+    @OnOpen
+    public void onOpen(Session session, @PathParam("param") String param) {
+
+        this.session = session;
+        webSocketSet.add(this);
+        String[] params = param.split("&");
+        this.accountId = params[0];
+        Map<String, Object> organizationIdByAccountId = accountService.getOrganizationIdByAccountId(this.accountId);
+        this.mac = params[1];
+        this.orgId = organizationIdByAccountId.get("organization_id").toString();
+        try {
+            connection = RabbitMQUtils.getConnection();
+            channel = connection.createChannel();
+
+            //������������������
+            String queue = channel.queueDeclare().getQueue();
+            //������������������������routingKey������������
+            String routingKey = "";
+            routingKey = this.orgId + "." + this.mac;
+            channel.queueBind(queue, exchange, routingKey);
+            //������������,���������������������
+            channel.basicQos(30);//���������������
+            channel.basicConsume(queue, false, new DefaultConsumer(channel) {
+                @Override
+                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
+                    //������MQ������������������������������������������������������������
+                    Map<String,Object> message = (Map) JSON.parse((String) JSON.parse(new String(body)));
+                    Map<Integer,Object> sortMap = new HashMap<>();
+                    message.forEach((key,value)->{
+                        SensorSortEnum sensorSortEnum = SensorSortEnum.valueOf(key);
+                        Map newMap = new HashMap();
+                        newMap.put(key,value);
+                        sortMap.put(sensorSortEnum.getSensorSort(),newMap);
+                    });
+
+                    Set<Map.Entry<Integer, Object>> entries = sortMap.entrySet();
+                    List<Map.Entry<Integer, Object>> list = new ArrayList<>();
+                    list.addAll(entries);
+                    Collections.sort(list, new Comparator<Map.Entry<Integer, Object>>() {
+                        @Override
+                        public int compare(Map.Entry<Integer, Object> o1, Map.Entry<Integer, Object> o2) {
+                            return o1.getKey()-o2.getKey();
+                        }
+                    });
+
+                    Map<String,Object> resultMap = new LinkedHashMap<>();
+                    for (Map.Entry<Integer, Object> entry : list) {
+                        Map<String,Object> linkedMap = (Map<String, Object>) entry.getValue();
+                        linkedMap.forEach((key,value)->{
+                            resultMap.put(SensorSortEnum.valueOf(key).getSensorName(),value);
+                        });
+                    }
+                     Map<String,Object> reMap = new LinkedHashMap<>();
+                     List<Sensor> allSensors = sensorService.getAllSensors();
+                     for (int i = 0; i <resultMap.keySet().size() ; i++) {
+                            for (Sensor sensor : allSensors) {
+                                if (Arrays.asList(resultMap.keySet().toArray(new String[resultMap.keySet().size()])).get(i).equals(sensor.getSensorKey())){
+                                    String value = resultMap.get(Arrays.asList(resultMap.keySet().toArray(new String[resultMap.keySet().size()])).get(i)).toString();
+                                   /* String e = Arrays.asList(resultMap.keySet().toArray(new String[resultMap.keySet().size()])).get(i);
+                                    resultMap.remove(e);*/
+                                    reMap.put(sensor.getName(), value+sensor.getUnit());
+                                    break;
+                                }else {
+                                    continue;
+                                }
+                        }
+                    }
+                    reMap.put("time",resultMap.get("time"));
+
+                    sendMessage(JSON.toJSONString(reMap));
+                    //������������
+                    channel.basicAck(envelope.getDeliveryTag(), true);
+                    //������socket������������������
+                }
+            });
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @OnClose
+    public void onClose() {
+        webSocketSet.remove(this); // ���set���������
+        try {
+            channel.close();
+            connection.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (
+                TimeoutException e) {
+            e.printStackTrace();
+        }
+    }
+
+    //������������������������������
+    @OnMessage
+    public void onMessage(String message, Session session) {
+
+    }
+    //���������������������������������������
+
+     enum SensorSortEnum {
+        e1(1,"e1"),
+         e20(2,"e20"),
+         e7(3,"e7"),
+        e2(4,"e2"),
+         e17(5,"e17"),
+         e6(6,"e6"),
+         e15(7,"e15"),
+         e27(8,"e27"),
+         e18(9,"e18"),
+        e11(10,"e11"),
+         e21(11,"e21"),
+         e23(12,"e23"),
+         e10(13,"e10"),
+         e25(14,"e25"),
+         e28(15,"e28"),
+        e16(16,"e16"),
+         e26(17,"e26"),
+         e12(18,"e12"),
+         e5(19,"e5"),
+         e3(20,"e3"),
+         e13(21,"e13"),
+         e9(22,"e9"),
+         e4(23,"e4"),
+         e51(24,"e51"),
+        mac(100,"mac"),
+        ver(101,"ver"),
+        time(102,"time"),
+        e8(14,"e8"),
+        e94(94,"e94"),
+        e92(92,"e92"),
+        e40(40,"e40"),
+        e93(93,"e93");
+
+        private final Integer sensorSort;
+        private final String sensorName;
+
+        SensorSortEnum(Integer sensorSort, String sensorName) {
+            this.sensorSort = sensorSort;
+            this.sensorName = sensorName;
+        }
+
+        public Integer getSensorSort() {
+            return sensorSort;
+        }
+
+        public String getSensorName() {
+            return sensorName;
+        }
+    }
+
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error(error.getMessage());
+    }
+
+    public void sendMessage(String message) throws IOException {
+        try {
+            if (session.isOpen()) {
+                this.session.getBasicRemote().sendText(message);
+            }
+        } catch (IOException e) {
+
+            //log.error(e.getMessage());
+        }
+    }
+
+
+}
diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml
index cbdd370..33cac0c 100644
--- a/src/main/resources/mapper/DeviceMapper.xml
+++ b/src/main/resources/mapper/DeviceMapper.xml
@@ -577,4 +577,10 @@
     <select id="getDeviceByCityCode" resultType="com.moral.entity.Device">
         SELECT d.* FROM `monitor_point` mt,device d where d.monitor_point_id=mt.id and d.state!=4 and mt.city_code=130900
     </select>
+    <select id="getDevicesByAccountId" resultType="com.moral.entity.Device">
+        select d.* from monitor_point as m,device as d
+where d.monitor_point_id=m.id and  d.monitor_point_id in
+(select m.id from organization as o,monitor_point as m where o.id = m.organization_id and o.id =
+(select o.id FROM  account as a,organization as o where a.organization_id = o.id and a.id = #{id})) and d.is_delete !=1
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/webapp/view/unorganizedMapV2.jsp b/src/main/webapp/view/unorganizedMapV2.jsp
new file mode 100644
index 0000000..9aeeec1
--- /dev/null
+++ b/src/main/webapp/view/unorganizedMapV2.jsp
@@ -0,0 +1,193 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@page isELIgnored="false" %>
+
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
+    <script type="text/javascript" src="/js/jquery.min.js"></script>
+    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=rER1sgBIcQxkfNSlm2wmBGZGgEERrooM"></script>
+    <script type="text/javascript" src="http://api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js"></script>
+    <title>���������������������</title>
+    <style type="text/css">
+        ul,li{list-style: none;margin:0;padding:0;float:left;}
+        html{height:100%}
+        body{height:100%;margin:0px;padding:0px;font-family:"������������";}
+        #container{height:100%;width:100%;}
+        #r-result{width:100%;}
+    </style>
+</head>
+<body>
+<div id="container"></div>
+<div id="r-result" style="display:none">
+    <input type="button"  ��nclick="openHeatmap();" value="���������������"/><input type="button"  ��nclick="closeHeatmap();" value="���������������"/>
+</div>
+<div id="mapParams" style="display: none;">
+    ${requestScope.params}
+</div>
+</body>
+</html>
+<script type="text/javascript">
+    var map = new BMap.Map("container", {minZoom: 14, maxZoom: 19});
+    //var map = new BMap.Map("container");          // ������������������
+
+    var point = new BMap.Point(120.997119,31.451714);
+    map.centerAndZoom(point, 17);    // ������������������������������������������������������
+    //map.setCurrentCity("������");		//������������������������
+    map.enableScrollWheelZoom(); // ������������������
+
+    var params = $.parseJSON($("#mapParams").html());
+    var accountId = params["accountId"];
+    alert(accountId);
+
+    var points =[
+        {"lng":"120.997119","lat":"31.451714","count":"0.027"},
+        {"lng":"120.99516","lat":"31.448664","count":"0.029"},
+        {"lng":"120.998538","lat":"31.449289","count":"0.033"},
+        {"lng":"120.998628","lat":"31.452027","count":"0.025"},
+        {"lng":"121.000383","lat":"31.451469","count":"0.05"},
+        {"lng":"120.999908","lat":"31.449389","count":"0.04"},
+        {"lng":"120.998519","lat":"31.450588","count":"0.10"},
+    ];
+
+    var points1 =[
+
+        {"lng":"114.363979","lat":"36.03773","count":"52"},
+        {"lng":"114.295894","lat":"36.231772","count":"7"},
+        {"lng":"114.504007","lat":"36.093311","count":"6"},
+        {"lng":"114.395983","lat":"36.201385","count":"19"},
+        {"lng":"114.718751","lat":"36.091966","count":"2"},
+        {"lng":"114.48261","lat":"36.146032","count":"4"},
+        {"lng":"114.037656","lat":"36.276956","count":"1"},
+        {"lng":"114.425989","lat":"36.157907","count":"5"},
+        {"lng":"114.309662","lat":"36.19489","count":"8"},
+        {"lng":"114.008762","lat":"36.162515","count":"11"},
+        {"lng":"114.149597","lat":"36.25203","count":"11"},
+        {"lng":"114.634489","lat":"36.09711","count":"3"},
+        {"lng":"114.035667","lat":"36.042826","count":"105"},
+        {"lng":"114.220135","lat":"36.116061","count":"38"},
+        {"lng":"114.137829","lat":"36.054525","count":"7"},
+        {"lng":"114.137348","lat":"36.136101","count":"55"},
+        {"lng":"114.078537","lat":"36.235848","count":"28"},
+        {"lng":"114.648979","lat":"36.043749","count":"111"},
+        {"lng":"114.104776","lat":"36.124067","count":"12"},
+        {"lng":"114.578275","lat":"36.095941","count":"3"},
+        {"lng":"114.578275","lat":"36.095941","count":"22"},
+        {"lng":"114.578275","lat":"36.095941","count":"4"},
+        {"lng":"113.913152","lat":"36.000907","count":"5"},
+        {"lng":"113.831853","lat":"35.836377","count":"4"},
+        {"lng":"113.825641","lat":"36.072186","count":"16"},
+        {"lng":"113.931695","lat":"36.262638","count":"9"},
+        {"lng":"113.965077","lat":"35.919748","count":"6"},
+        {"lng":"113.830067","lat":"35.932444","count":"1"},
+        {"lng":"113.830067","lat":"35.932444","count":"7"},
+        {"lng":"113.750022","lat":"35.976316","count":"10"},
+        {"lng":"113.934346","lat":"36.166723","count":"6"},
+        {"lng":"113.928979","lat":"36.059528","count":"14"},
+        {"lng":"113.898287","lat":"35.777936","count":"6"},
+        {"lng":"113.867283","lat":"36.134905","count":"29"},
+        {"lng":"113.81997","lat":"36.280506","count":"6"},
+        {"lng":"113.936795","lat":"35.768474","count":"3"},
+        {"lng":"113.818245","lat":"36.183143","count":"107"},
+        {"lng":"113.762547","lat":"35.916163","count":"12"},
+        {"lng":"113.762547","lat":"35.916163","count":"17"},
+        {"lng":"114.309528","lat":"36.098035","count":"12"},
+        {"lng":"114.184941","lat":"36.066066","count":"10"},
+        {"lng":"114.265651","lat":"36.016851","count":"10"},
+        {"lng":"114.794527","lat":"35.889239","count":"4"},
+        {"lng":"114.916588","lat":"35.953233","count":"33"},
+        {"lng":"114.862802","lat":"36.082315","count":"5"},
+        {"lng":"114.821994","lat":"35.940167","count":"7"},
+        {"lng":"114.732801","lat":"36.010095","count":"1"},
+        {"lng":"114.665014","lat":"35.827956","count":"5"},
+        {"lng":"114.687001","lat":"35.926633","count":"4"},
+        {"lng":"114.886604","lat":"35.823869","count":"17"},
+        {"lng":"114.714493","lat":"35.824384","count":"9"},
+        {"lng":"114.838951","lat":"35.714762","count":"8"},
+        {"lng":"114.768614","lat":"35.820543","count":"3"},
+        {"lng":"114.945903","lat":"36.001222","count":"10"},
+        {"lng":"114.814282","lat":"36.05379","count":"1"},
+        {"lng":"114.89458","lat":"36.128534","count":"2"},
+        {"lng":"114.768884","lat":"36.09376","count":"3"},
+        {"lng":"114.891728","lat":"35.996425","count":"9"},
+        {"lng":"114.899498","lat":"35.683682","count":"2"},
+        {"lng":"114.436397","lat":"35.942211","count":"13"},
+        {"lng":"114.537118","lat":"35.959195","count":"5"},
+        {"lng":"114.374189","lat":"35.92115","count":"21"},
+        {"lng":"114.435536","lat":"35.884432","count":"1"},
+        {"lng":"114.434839","lat":"35.885617","count":"23"},
+        {"lng":"114.468909","lat":"35.952258","count":"17"},
+        {"lng":"114.358104","lat":"35.944822","count":"27"},
+        {"lng":"114.647021","lat":"35.968271","count":"6"},
+        {"lng":"114.483172","lat":"35.862866","count":"3"},
+        {"lng":"114.589631","lat":"35.856694","count":"4"},
+        {"lng":"114.37365","lat":"35.930392","count":"1"},
+        {"lng":"114.322755","lat":"35.82315","count":"26"},
+        {"lng":"114.322755","lat":"35.82315","count":"6"},
+        {"lng":"114.376392","lat":"36.013433","count":"3"},
+        {"lng":"114.447681","lat":"36.052479","count":"6"},
+        {"lng":"114.447681","lat":"36.052479","count":"13"},
+        {"lng":"114.31517","lat":"36.117569","count":"5"}
+
+
+    ];//������������������������
+
+
+    if(!isSupportCanvas()){
+        alert('���������������������������canvas������������������,���������������������������������������������������~')
+    }
+    //���������������,������������heatmap.js��������� https://github.com/pa7/heatmap.js/blob/master/README.md
+    //������������������:
+    /* visible ���������������������,���������true
+     * opacity ������������������,1-100
+     * radius ������������������������������������
+     * gradient  {JSON} ������������������������ . gradient������������
+     *  {
+            .2:'rgb(0, 255, 255)',
+            .5:'rgb(0, 110, 255)',
+            .8:'rgb(100, 0, 255)'
+        }
+        ������ key ���������������������, 0~1.
+            value ������������.
+     */
+    heatmapOverlay = new BMapLib.HeatmapOverlay({"radius":100,"visible":true});
+    map.addOverlay(heatmapOverlay);
+    heatmapOverlay.setDataSet({data:points,max:0.13});
+
+    //closeHeatmap();
+
+
+
+    //���������������������������canvas
+    function isSupportCanvas(){
+        var elem = document.createElement('canvas');
+        return !!(elem.getContext && elem.getContext('2d'));
+    }
+
+    function setGradient(){
+        /*������������������:
+        {
+            0:'rgb(102, 255, 0)',
+            .5:'rgb(255, 170, 0)',
+            1:'rgb(255, 0, 0)'
+        }*/
+        var gradient = {};
+        var colors = document.querySelectorAll("input[type='color']");
+        colors = [].slice.call(colors,0);
+        colors.forEach(function(ele){
+            gradient[ele.getAttribute("data-key")] = ele.value;
+        });
+        heatmapOverlay.setOptions({"gradient":gradient});
+    }
+
+    function openHeatmap(){
+        heatmapOverlay.show();
+    }
+
+    function closeHeatmap(){
+        heatmapOverlay.hide();
+    }
+</script>
+

--
Gitblit v1.8.0