From 9e4480300d1285a574d52451206c5adc81396be4 Mon Sep 17 00:00:00 2001
From: 于紫祥_1901 <email@yuzixiang_1910>
Date: Mon, 13 Jul 2020 09:36:17 +0800
Subject: [PATCH] 无组织排放实时

---
 src/main/webapp/view/unorganizedMap.jsp                           |    2 
 src/main/resources/mapper/MonitorPointMapper.xml                  |    7 
 src/main/java/com/moral/config/WebSocketConfig.java               |    7 
 src/main/java/com/moral/service/MonitorPointService.java          |    4 
 src/main/java/com/moral/webSocketServer/WebSocketServerNew.java   |  177 ++++++++++++
 src/main/webapp/view/newUnorganizedMap.jsp                        |  407 +++++++++++++++++++++++++++++
 src/main/java/com/moral/controller/ScreenController.java          |  177 +++++++++--
 src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java |   21 +
 src/main/java/com/moral/mapper/MonitorPointMapper.java            |    2 
 9 files changed, 761 insertions(+), 43 deletions(-)

diff --git a/src/main/java/com/moral/config/WebSocketConfig.java b/src/main/java/com/moral/config/WebSocketConfig.java
index 71ac2eb..6426c78 100644
--- a/src/main/java/com/moral/config/WebSocketConfig.java
+++ b/src/main/java/com/moral/config/WebSocketConfig.java
@@ -3,19 +3,21 @@
 import com.moral.service.DeviceService;
 import com.moral.webSocketServer.WebSocketServer;
 
+import com.moral.webSocketServer.WebSocketServerNew;
 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;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
 @Configuration
 public class WebSocketConfig {
 
-   /* @Bean
+    @Bean
     public ServerEndpointExporter serverEndpointExporter() {
         return new ServerEndpointExporter();
-    }*/
+    }
 
     @Bean
     public MessageConverter jsonMessageConverter() {
@@ -25,6 +27,7 @@
     @Autowired
     public void setMessageService(DeviceService deviceService){
         WebSocketServer.deviceService=deviceService;
+        WebSocketServerNew.deviceService=deviceService;
     }
 
 }
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 79c159c..f42bc29 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -73,15 +73,19 @@
 import com.moral.service.SensorUnitService;
 import com.moral.service.WeatherService;
 import com.moral.util.AQICalculation;
+import com.moral.util.MyLatLng;
 import com.moral.util.TempAllocationUtils;
 
+import com.moral.util.mapUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import net.sf.json.JSONString;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.net.ftp.FTPClient;
+import org.apache.ibatis.annotations.Param;
 import org.apache.log4j.Logger;
 import org.dom4j.Document;
 import org.dom4j.Element;
@@ -628,12 +632,12 @@
     @ResponseBody
     @ApiOperation(value = "������������", notes = "������������")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "orgId",defaultValue = "5", value = "������Id", required = true, paramType = "query", dataType = "Integer"),
-            @ApiImplicitParam(name = "regionCode",defaultValue = "320583", value = "������������", required = true, paramType = "query", dataType = "String"),
-            @ApiImplicitParam(name = "Fe", defaultValue = "31.485018",value = "���������������", required = true, paramType = "query", dataType = "String"),
-            @ApiImplicitParam(name = "Ge", defaultValue = "121.378395",value = "���������������", required = true, paramType = "query", dataType = "String"),
-            @ApiImplicitParam(name = "Ke", defaultValue = "31.296614",value = "���������������", required = true, paramType = "query", dataType = "String"),
-            @ApiImplicitParam(name = "Le", defaultValue = "120.59651",value = "���������������", required = true, paramType = "query", dataType = "String")
+            @ApiImplicitParam(name = "orgId", defaultValue = "5", value = "������Id", required = true, paramType = "query", dataType = "Integer"),
+            @ApiImplicitParam(name = "regionCode", defaultValue = "320583", value = "������������", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "Fe", defaultValue = "31.485018", value = "���������������", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "Ge", defaultValue = "121.378395", value = "���������������", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "Ke", defaultValue = "31.296614", value = "���������������", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "Le", defaultValue = "120.59651", value = "���������������", required = true, paramType = "query", dataType = "String")
     })
     public ResultBean getDevices(@RequestParam("orgId") Integer orgId, MapBounds mapBounds,
                                  @RequestParam("regionCode") String regionCode) {
@@ -1201,9 +1205,7 @@
 	public ResultBean<Map<String, Object>> getSensor(HttpServletRequest request) throws Exception {
 		Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
 		String mac = (String) parameters.get("mac");
-		//System.out.println("ScreenController-----getSensor-----mac:"+mac);
 		Map<String, Object> map = sensorUnitService.getSensorByMac(mac);
-		System.out.println("ScreenController-----getSensor-----map:"+map);
 		return new ResultBean<Map<String, Object>>(map);
 	}*/
 
@@ -1271,7 +1273,6 @@
     })
     public ResultBean<List<Map<String, Object>>> AIForecast(HttpServletRequest request) throws Exception {
         Map<String, Object> parameters = getParametersStartingWith(request, null);
-        //System.out.println(parameters);
         String monitorPoint = (String) parameters.get("monitorPoint");
         String intoTime = parameters.get("time").toString();
         Date date = new SimpleDateFormat("yy-MM-dd").parse(intoTime);
@@ -1627,9 +1628,11 @@
 
     @RequestMapping(value = "/newMap-page", method = RequestMethod.GET)
     public ModelAndView newMap(ModelAndView model, @RequestParam("areaCode") long code,
-                            @RequestParam("accountId") int accountId) {
+                               @RequestParam("accountId") int accountId) {
         Account account = accountService.getAccountById(accountId);
+        List<MonitorPoint> monitorPointList = monitorPointService.getMonitorPointListByAccountId(accountId);
         String regionName = areaService.queryFullNameByCode(code);
+
         if (account != null && regionName != null) {
             Object sensors = sensorService.queryAll();
             JSONObject params = new JSONObject();
@@ -1685,9 +1688,9 @@
             JSONObject params = new JSONObject();
             params.put("sensorInfo", sensorData);
             params.put("sensorsMap", sensorsMap);
-            params.put("sensorKey",parameters.get("sensorKey"));
-            params.put("unit",parameters.get("unit"));
-            params.put("description",parameters.get("description"));
+            params.put("sensorKey", parameters.get("sensorKey"));
+            params.put("unit", parameters.get("unit"));
+            params.put("description", parameters.get("description"));
             String paramsJson = params.toJSONString();
             model.addObject("uavDroppointParams", paramsJson);
             model.setViewName("uavdroppoint");
@@ -1733,9 +1736,9 @@
             JSONObject params = new JSONObject();
             params.put("sensorInfo", sensorData);
             params.put("sensorsMap", sensorsMap);
-            params.put("sensorKey",parameters.get("sensorKey"));
-            params.put("unit",parameters.get("unit"));
-            params.put("description",parameters.get("description"));
+            params.put("sensorKey", parameters.get("sensorKey"));
+            params.put("unit", parameters.get("unit"));
+            params.put("description", parameters.get("description"));
             String paramsJson = params.toJSONString();
             model.addObject("uavChannelParams", paramsJson);
             model.setViewName("uavchannelnew");
@@ -1781,9 +1784,9 @@
             JSONObject params = new JSONObject();
             params.put("sensorInfo", sensorData);
             params.put("sensorsMap", sensorsMap);
-            params.put("sensorKey",parameters.get("sensorKey"));
-            params.put("unit",parameters.get("unit"));
-            params.put("description",parameters.get("description"));
+            params.put("sensorKey", parameters.get("sensorKey"));
+            params.put("unit", parameters.get("unit"));
+            params.put("description", parameters.get("description"));
             String paramsJson = params.toJSONString();
             model.addObject("uavTracingParams", paramsJson);
             model.setViewName("uavtracing");
@@ -1804,16 +1807,16 @@
             @ApiImplicitParam(name = "monitorPointId", value = "������Id", required = true, paramType = "query", dataType = "String"),
             @ApiImplicitParam(name = "sensorKey", value = "������", required = true, paramType = "query", dataType = "String"),
             @ApiImplicitParam(name = "time", value = "������(���������2020-03-19-14)", required = true, paramType = "query", dataType = "String")})
-    public ModelAndView PurificationRate(HttpServletRequest request,ModelAndView model){
+    public ModelAndView PurificationRate(HttpServletRequest request, ModelAndView model) {
         Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
-        String monitPointIdS= (String) parameters.get("monitorPointId");
-        String sensor= (String) parameters.get("sensorKey");
-        String time= (String) parameters.get("time");
+        String monitPointIdS = (String) parameters.get("monitorPointId");
+        String sensor = (String) parameters.get("sensorKey");
+        String time = (String) parameters.get("time");
         String YearAndDay = time.substring(0, time.lastIndexOf("-"));
         String Hour = time.substring(time.lastIndexOf("-") + 1);
         String Time = YearAndDay + " " + Hour + ":00:00";
-        int monitPointId=Integer.parseInt(monitPointIdS);
-        JSONObject params=monitorPointService.getMonitorPointById(monitPointId,Time,1,sensor);
+        int monitPointId = Integer.parseInt(monitPointIdS);
+        JSONObject params = monitorPointService.getMonitorPointById(monitPointId, Time, 1, sensor);
         String paramsJson = params.toJSONString();
         model.addObject("mapParams", paramsJson);
         model.setViewName("purityMap");
@@ -1826,22 +1829,21 @@
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "monitorPointId", value = "������Id", required = true, paramType = "query", dataType = "String"),
             @ApiImplicitParam(name = "time", value = "������(���������2020-03-19-14)", required = true, paramType = "query", dataType = "String")})
-    public ModelAndView collectionRate(HttpServletRequest request,ModelAndView model){
+    public ModelAndView collectionRate(HttpServletRequest request, ModelAndView model) {
         Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
-        String monitPointIdS= (String) parameters.get("monitorPointId");
-        String sensor= "";
-        String time= (String) parameters.get("time");
+        String monitPointIdS = (String) parameters.get("monitorPointId");
+        String sensor = "";
+        String time = (String) parameters.get("time");
         String YearAndDay = time.substring(0, time.lastIndexOf("-"));
         String Hour = time.substring(time.lastIndexOf("-") + 1);
         String Time = YearAndDay + " " + Hour + ":00:00";
-        int monitPointId=Integer.parseInt(monitPointIdS);
+        int monitPointId = Integer.parseInt(monitPointIdS);
         //������������������
-        JSONObject params=monitorPointService.getMonitorPointById(monitPointId,Time,2,sensor);
-        model.addObject("params",params);
+        JSONObject params = monitorPointService.getMonitorPointById(monitPointId, Time, 2, sensor);
+        model.addObject("params", params);
         model.setViewName("pressureMap");
         return model;
     }
-
 
 
     @GetMapping("/unorganizedEmissions")
@@ -1851,20 +1853,115 @@
             @ApiImplicitParam(name = "sensorKey", value = "������", required = true, paramType = "query", dataType = "String"),
             // @ApiImplicitParam(name = "sensorKey", value = "���������key,���������������������������", required = true, paramType = "query", dataType = "String"),
             @ApiImplicitParam(name = "time", value = "������(���������2020-03-19-14)", required = true, paramType = "query", dataType = "String")})
-    public ModelAndView unorganizedEmissions(HttpServletRequest request,ModelAndView model){
+    public ModelAndView unorganizedEmissions(HttpServletRequest request, ModelAndView model) {
         Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
-        String monitPointIdS= (String) parameters.get("monitorPointId");
-        String sensor= (String) parameters.get("sensorKey");
-        String time= (String) parameters.get("time");
+        String monitPointIdS = (String) parameters.get("monitorPointId");
+        String sensor = (String) parameters.get("sensorKey");
+        String time = (String) parameters.get("time");
         String YearAndDay = time.substring(0, time.lastIndexOf("-"));
         String Hour = time.substring(time.lastIndexOf("-") + 1);
         String Time = YearAndDay + " " + Hour + ":00:00";
-        int monitPointId=Integer.parseInt(monitPointIdS);
+        int monitPointId = Integer.parseInt(monitPointIdS);
         //������������������
-        JSONObject params=monitorPointService.getMonitorPointById(monitPointId,Time,3,sensor);
-        model.addObject("params",params);
+        JSONObject params = monitorPointService.getMonitorPointById(monitPointId, Time, 3, sensor);
+        model.addObject("params", params);
         model.setViewName("unorganizedMap");
         return model;
     }
 
+
+    @GetMapping("/unorganizedEmissionsRealTime")
+    @ApiOperation(value = "���������������������", notes = "���������������������")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "monitorPointId", value = "������Id", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "sensorKey", value = "������", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "accountId", value = "������id", required = false, paramType = "query", dataType = "String")})
+    public ModelAndView unorganizedEmissionsBackups(HttpServletRequest request, ModelAndView model) {
+        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+        String monitPointIdS = (String) parameters.get("monitorPointId");
+        String sensor = (String) parameters.get("sensorKey");
+        String accountId = (String) parameters.get("accountId");
+        Account account = accountService.getAccountById(Integer.parseInt(accountId));
+        int monitPointId = Integer.parseInt(monitPointIdS);
+        JSONObject params = monitorPointService.getMacList(monitPointId);
+        params.put("accountId", accountId);
+        params.put("orgId", account.getOrganizationId());
+        params.put("sensor", sensor);
+        //������������������
+        //JSONObject params=monitorPointService.getMonitorPointById(monitPointId,Time,3,sensor);
+        // model.addObject("params",params);
+        model.addObject("params", params);
+        model.setViewName("newUnorganizedMap");
+        return model;
+    }
+
+    @GetMapping("/chooseDevice")
+    @ResponseBody
+    public Object unorganizedEmissionsBackups(String wind, String monitPointId) {
+        JSONObject params = new JSONObject();
+        Double windDir = Double.parseDouble(wind);
+        List<Device> deviceList = deviceService.getDeviceById2(Integer.parseInt(monitPointId));
+        Map<String, Object> longAndLatiMap;
+        List<Map> longAndLatiList = new ArrayList<>();//������������������������������������windList������������������������������������������������������������������
+        List<Device> preAngleDeviceList = new ArrayList<Device>(); //���������������������������������������
+        for (int f = 0; f < deviceList.size(); f++) {
+            for (int h = 0; h < deviceList.size(); h++) {
+                if (f != h) {
+                    longAndLatiMap = new HashMap<String, Object>();
+                    longAndLatiMap.put("h", h);
+                    longAndLatiMap.put("f", f);
+                    Double angle = mapUtils.getAngle(
+                            new MyLatLng((Double) deviceList.get(h).getLongitude(),
+                                    (Double) deviceList.get(h).getLatitude()),
+                            new MyLatLng((Double) deviceList.get(f).getLongitude(),
+                                    (Double) deviceList.get(f).getLatitude()));
+                    Double angleDiff = Math.abs(angle - windDir);
+                    longAndLatiMap.put("angle", angleDiff);
+                    longAndLatiList.add(longAndLatiMap);
+                }
+            }
+        }
+        Double minAngle = (Double) longAndLatiList.get(0).get("angle");
+        int indexAngle = 0;
+        for (int j = 1; j < longAndLatiList.size(); j++) {
+            if (minAngle > (Double) longAndLatiList.get(j).get("angle")) {
+                minAngle = (Double) longAndLatiList.get(j).get("angle");
+                indexAngle = j;
+            }else {
+                indexAngle=indexAngle;
+            }
+        }
+        preAngleDeviceList.add(deviceList.get((Integer) longAndLatiList.get(indexAngle).get("h")));
+        preAngleDeviceList.add(deviceList.get((Integer) longAndLatiList.get(indexAngle).get("f")));
+        Double length = mapUtils.getDistance((Double) preAngleDeviceList.get(0).getLongitude(), (Double) preAngleDeviceList.get(0).getLatitude(),
+                (Double) preAngleDeviceList.get(1).getLongitude(), (Double) preAngleDeviceList.get(1).getLatitude());
+        Double subLength = length / 5;
+        Double subLength1 = length / 6.1;
+        Double angle = mapUtils.getAngle(
+                new MyLatLng((Double) preAngleDeviceList.get(0).getLongitude(),
+                        (Double) preAngleDeviceList.get(0).getLatitude()),
+                new MyLatLng((Double) preAngleDeviceList.get(1).getLongitude(),
+                        (Double) preAngleDeviceList.get(1).getLatitude()));
+        List locationList = new ArrayList();
+        String[] firstLocation = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, (Double) preAngleDeviceList.get(0).getLongitude(),
+                (Double) preAngleDeviceList.get(0).getLatitude(), subLength);
+        String[] secondLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(firstLocation[0]),
+                Double.parseDouble(firstLocation[1]), subLength);
+        String[] thirdLocation = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(secondLoction[0]),
+                Double.parseDouble(secondLoction[1]), subLength);
+        String[] fourthLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(thirdLocation[0]),
+                Double.parseDouble(thirdLocation[1]), subLength);
+        String[] fivethLoction = mapUtils.calLocationByDistanceAndLocationAndDirection(angle, Double.parseDouble(fourthLoction[0]),
+                Double.parseDouble(fourthLoction[1]), subLength1);
+        locationList.add(firstLocation);
+        locationList.add(secondLoction);
+        locationList.add(thirdLocation);
+        locationList.add(fourthLoction);
+        locationList.add(fivethLoction);
+        String preAngleDeviceString = JSON.toJSON(preAngleDeviceList).toString();
+        params.put("preAngleDeviceString", preAngleDeviceString);//���������������������������
+        params.put("locationList",locationList);
+        return params;
+    }
+
 }
diff --git a/src/main/java/com/moral/mapper/MonitorPointMapper.java b/src/main/java/com/moral/mapper/MonitorPointMapper.java
index 425cb4b..45146b0 100644
--- a/src/main/java/com/moral/mapper/MonitorPointMapper.java
+++ b/src/main/java/com/moral/mapper/MonitorPointMapper.java
@@ -22,4 +22,6 @@
     List<Device> getDeviceList(@Param("id") int id);
     //���������������������������id
     MonitorPoint getMonitorPointById(@Param("id") int id);
+
+    List<MonitorPoint> getMonitorPointListByAccountId(@Param("id") int id);
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/service/MonitorPointService.java b/src/main/java/com/moral/service/MonitorPointService.java
index c0fb66d..9f2247b 100644
--- a/src/main/java/com/moral/service/MonitorPointService.java
+++ b/src/main/java/com/moral/service/MonitorPointService.java
@@ -49,4 +49,8 @@
 
     //���������������������������id
     JSONObject getMonitorPointById(int id, String Time, int i, String sensor);
+
+    JSONObject getMacList(int id);
+
+    List<MonitorPoint> getMonitorPointListByAccountId(int id);
 }
diff --git a/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java b/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
index 0d68e94..ea969fb 100644
--- a/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
@@ -796,5 +796,26 @@
         return params;
     }
 
+    @Override
+    public JSONObject getMacList(int monitPointId) {
+        JSONObject params = new JSONObject();
+        MonitorPoint monitorPoint = monitorPointMapper.getMonitorPointById(monitPointId);
+
+        //������������������������
+        List<Device> deviceList = deviceService.getDeviceById2(monitPointId);
+
+        params.put("longitudeCompany",monitorPoint.getLongitude());
+        params.put("latitudeCompany",monitorPoint.getLatitude());
+        params.put("latitudeCompany",monitorPoint.getLatitude());
+        params.put("monitPointId",monitPointId);
+        params.put("deviceList",deviceList);
+        return params;
+    }
+
+    @Override
+    public List<MonitorPoint> getMonitorPointListByAccountId(int id) {
+        return monitorPointMapper.getMonitorPointListByAccountId(id);
+    }
+
 
 }
diff --git a/src/main/java/com/moral/webSocketServer/WebSocketServerNew.java b/src/main/java/com/moral/webSocketServer/WebSocketServerNew.java
new file mode 100644
index 0000000..22e2ef6
--- /dev/null
+++ b/src/main/java/com/moral/webSocketServer/WebSocketServerNew.java
@@ -0,0 +1,177 @@
+package com.moral.webSocketServer;
+
+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;
+import com.rabbitmq.client.QueueingConsumer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * @ServerEndpoint ���������������������������������������������������������������������������������������websocket������������,
+ * ���������������������������������������������������������URL������,���������������������������URL������������WebSocket������������
+ */
+@Slf4j
+@ServerEndpoint("/screen/webSocketNew/{param}")
+@Component
+public class WebSocketServerNew {
+    public static DeviceService deviceService;
+
+    // ������������������������������������������������������������������������������
+    private Session session;
+
+    private String orgId;
+
+    private String accountId;
+
+
+    private Connection connection;
+
+    private Channel channel;
+
+    // ������session���������������������������
+    private static CopyOnWriteArraySet<WebSocketServerNew> webSocketSet = new CopyOnWriteArraySet<WebSocketServerNew>();
+
+    /**
+     * ���������������������������������
+     *
+     * @param session ������������������session���������������������������������������������������������������������������������
+     */
+    @OnOpen
+    public void onOpen(Session session, @PathParam("param") String param) {
+        this.session = session;
+        //������������������������������������������������
+        webSocketSet.add(this);
+        String[] flag=param.split("&");
+
+        String orgId = flag[0];
+        String accountId = flag[1];
+        String monitPointId = flag[2];
+        String p=flag[3];
+        String QUEUE_NAME = "deviceData_" + accountId;
+        Map<String, Object> paramMap = new HashMap<String, Object>();
+        List<Device> deviceList = deviceService.getDeviceById2(Integer.parseInt(monitPointId));
+        try {
+            //������������������������������������������������
+            ConnectionFactory factory = new ConnectionFactory();
+            //������MabbitMQ������������ip���������������
+            factory.setHost("47.96.15.25");
+            factory.setPort(5672);
+            factory.setUsername("guest");
+            factory.setPassword("guest_pass");
+            String routingKey;
+            connection = factory.newConnection();
+            channel = connection.createChannel();
+            //���������������������������������������������������������������������������������������������������������
+            channel.queueDeclare(QUEUE_NAME, false, false, true, null);
+            for (Device d : deviceList) {
+                routingKey = orgId + "." + d.getMac();
+                channel.queueBind(QUEUE_NAME, "screens_data", routingKey);
+            }
+            //���������������������
+            QueueingConsumer consumer = new QueueingConsumer(channel);
+            //������������������
+            channel.basicConsume(QUEUE_NAME, true, consumer);
+            int i=Integer.parseInt(p);
+            while (true) {
+                if (i<=12){
+                    QueueingConsumer.Delivery delivery = consumer.nextDelivery();
+                    String message = new String(delivery.getBody());
+                    sendMessage(message);
+                    i++;
+                }else {
+                    //Thread.sleep(1* 1000);
+                    QueueingConsumer.Delivery delivery = consumer.nextDelivery();
+                    String message = new String(delivery.getBody());
+                    sendMessage(message);
+                    i++;
+                }
+                //nextDelivery������������������������������������������������������������take���������
+
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
+    }
+
+
+    /**
+     * ���������������������������
+     */
+
+    @OnClose
+    public void onClose() {
+
+//**���������Set��� ������������������������*//**//**//**//**//**//**//**//*
+
+        webSocketSet.remove(this);
+        try {
+            connection.close();
+        } catch (IOException e) {
+            log.error(e.getMessage());
+        }
+    }
+
+
+    @OnMessage
+    public void onMessage(String message) {
+        System.out.println(message);
+        for (WebSocketServerNew webSocketServer : webSocketSet) {
+            webSocketServer.sendMessage(message);
+        }
+    }
+
+   /* @RabbitListener(bindings = @QueueBinding(
+            value = @Queue(value = "deviceInfo", durable = "false", autoDelete = "true"),
+            exchange = @Exchange(value = "screens_data", durable = "true", type = "topic"),
+            key = "99.*"
+    ))
+    @RabbitHandler //������������:��������������������� ������������������������������������������
+    public void receiveMessage(@Payload String message, @Headers Map<String, Object> headers, Channel channel) throws IOException {
+        //sendMessage(message.toString());
+        onMessage(message);
+       *//* Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
+        //���������������������rabbitmq���������������������  deliverTag������������������ false���������������
+        channel.basicAck(deliveryTag, true);*//*
+    }*/
+
+    /**
+     * ������������������������
+     */
+    public void sendMessage(String message) {
+        try {
+            if (session.isOpen()) {
+                this.session.getBasicRemote().sendText(message);
+            }
+        } catch (IOException e) {
+            log.error(e.getMessage());
+        }
+    }
+
+    /**
+     * ���������������������
+     *
+     * @param session
+     * @param error
+     */
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error(error.getMessage());
+    }
+
+}
diff --git a/src/main/resources/mapper/MonitorPointMapper.xml b/src/main/resources/mapper/MonitorPointMapper.xml
index 8b59ad0..0e45627 100644
--- a/src/main/resources/mapper/MonitorPointMapper.xml
+++ b/src/main/resources/mapper/MonitorPointMapper.xml
@@ -165,4 +165,11 @@
 	<select id="getMonitorPointById" resultType="com.moral.entity.MonitorPoint">
 		select * from monitor_point where id=#{id}
 	</select>
+	<select id="getMonitorPointListByAccountId" resultType="com.moral.entity.MonitorPoint">
+		SELECT mp.* FROM account a,`monitor_point` mp,organization o
+		where a.organization_id=o.id
+		and o.id=mp.organization_id
+		and a.id=#{id};
+	</select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/webapp/view/newUnorganizedMap.jsp b/src/main/webapp/view/newUnorganizedMap.jsp
new file mode 100644
index 0000000..f923a81
--- /dev/null
+++ b/src/main/webapp/view/newUnorganizedMap.jsp
@@ -0,0 +1,407 @@
+<%@ 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"/>
+    <style type="text/css">
+        body, html, #allmap {
+            width: 100%;
+            height: 100%;
+            overflow: hidden;
+            margin: 0;
+            font-family: "������������";
+        }
+
+        #box {
+            width: 300px;
+            height: 400px;
+            top: 220px;
+            right: 30px;
+            position: absolute;
+            z-index: 1;
+            border: 2px solid red;
+            background-color: gainsboro;
+            opacity: 0.8;
+        }
+
+        #cpm, #cpm1 {
+            width: 300px;
+            height: 100px;
+            position: absolute;
+            background-color: #ffffff;
+            display: none;
+            left: 50%;
+            top: 50%;
+            margin-left: -150px;
+            margin-top: -50px;
+            z-index: 11;
+            color: #000000;
+            border: 2px solid #FF7F50;
+            font-size: 14px;
+            line-height: 100px;
+            text-align: center;
+        }
+    </style>
+    <script type="text/javascript"
+            src="http://api.map.baidu.com/api?v=2.0&ak=rER1sgBIcQxkfNSlm2wmBGZGgEERrooM"></script>
+    <script type="text/javascript" src="/js/jquery.min.js"></script>
+    <script type="text/javascript" src="/js/utils.js"></script>
+    <script type="text/javascript">
+        if (typeof (JSON) == 'undefined') {
+            $.getScript("js/json2.js");
+        }
+    </script>
+    <script type="text/javascript" src="/js/paging.js"></script>
+    <title>������������</title>
+</head>
+<body>
+<div id="cpm">���������������������������������������������������������������</div>
+<div id="cpm1">������������������������������������������������������������</div>
+<div id="allmap" style="z-index: 0">
+</div>
+<div id="box">
+    <p>
+        <img src="/img/wind_dir02.png" style="width: 30px;height: 45px;margin-left: 20px;"/> <span
+            style="position: relative;top: -9px;">&nbsp;&nbsp;���������(������������������������������)</span>
+    </p>
+    <p>
+        <img src="/img/arrows01.png" style="margin-left: 20px;transform:rotate(90deg);width: 30px;height: 60px;"/> <span
+            style="position: relative;top: -25px;">&nbsp;&nbsp;���������������������</span>
+    </p>
+    <p>
+        <img src="/img/arrows02.png" style="width: 30px;height: 60px;margin-left: 20px;transform:rotate(90deg);"/> <span
+            style="position: relative;top: -25px;">&nbsp;&nbsp;���������������������</span>
+    </p>
+
+    <p style="text-indent: 1em;line-height: 25px;color: red" id="alarm">���������������<span id="diff"></span></br></br>&nbsp;&nbsp;&nbsp;
+        ���������������������������������������������������������������������</p>
+</div>
+<div id="mapParams" style="display: none;">
+    ${requestScope.params}
+</div>
+</body>
+
+</html>
+<script type="text/javascript">
+    var hostAndPort = document.location.host;
+    // ������������API������
+    var map = new BMap.Map("allmap", {minZoom: 14, maxZoom: 19});    // ������Map������
+    map.enableScrollWheelZoom(true);     //������������������������
+    var params = $.parseJSON($("#mapParams").html());
+    var longitude = params["longitudeCompany"];
+    var latitude = params["latitudeCompany"];
+    var point = new BMap.Point(longitude, latitude);
+    map.centerAndZoom(point, 18.5);  // ���������������,������������������������������������
+    var devices = [];
+    var deviceList = params["deviceList"];
+    var sensor = params["sensor"];
+    var accountId = params["accountId"];
+    var orgId = params["orgId"];
+    var monitPointId = params["monitPointId"];
+    var arrows=[];
+    //������������������������
+    map.addControl(new BMap.MapTypeControl({
+        mapTypes: [
+            BMAP_HYBRID_MAP,
+            BMAP_NORMAL_MAP
+        ]
+    }));
+    map.setMapType(BMAP_HYBRID_MAP);
+    if (deviceList != null) {
+        if (deviceList.length > 1) {
+            for (var i = 0; i < deviceList.length; i++) {
+                var icon = new BMap.Icon("/img/ico00.png", new BMap.Size(48, 48));
+                var mark = new BMap.Marker(new BMap.Point(deviceList[i].longitude, deviceList[i].latitude), {icon: icon});
+                devices.push(new BMap.Point(deviceList[i].longitude, deviceList[i].latitude));
+                map.addOverlay(mark);
+            }
+        } else {
+            var icon1 = new BMap.Icon("/img/ico00.png", new BMap.Size(48, 48));
+            var mark1 = new BMap.Marker(new BMap.Point(deviceList.longitude, deviceList.latitude), {icon: icon1});
+            devices.push(new BMap.Point(deviceList.longitude, deviceList.latitude));
+            map.addOverlay(mark1);
+            $("#alarm").css("visibility", "hidden");
+        }
+    }
+    var ws;
+    if (typeof (WebSocket) === "undefined") {
+        alert("������������������������WebSocket");
+    } else {
+        var p=0;
+        ws = new WebSocket('ws://' + hostAndPort + '/screen/webSocketNew/' + orgId + '&' + accountId + '&' + monitPointId+ '&' +p);
+        ws.onopen = function () {
+        };
+
+        //������������������
+        ws.onmessage = function (msg) {
+            // $("#searchParam").val(JSON.parse(msg.data));
+            if(deviceList.length>=2){
+                realTimeData(JSON.parse(JSON.parse(msg.data)), deviceList,monitPointId);
+            }else{
+                if(deviceList.length==0){
+                    $("#box").css("visibility","hidden");
+                    document.getElementById("cpm").style.display = 'block';
+                }
+                if(deviceList.length==1){
+                    $("#box").css("visibility","hidden");
+                    document.getElementById("cpm1").style.display = 'block';
+                }
+
+            }
+
+            /*  if (moralMap.showSensors && typeof (moralMap.showSensors) == "function") {
+                  moralMap.showSensors(JSON.parse(JSON.parse(msg.data)));
+              }*/
+        };
+
+        //������������
+        ws.onclose = function () {
+        };
+        //���������������������
+        ws.onerror = function () {
+        };
+    }
+
+    var marks = [];
+    function realTimeData(data, deviceList,monitPointId) {
+        for (var j = 0; j < marks.length; j++) {
+            map.removeOverlay(marks[j]);
+        }
+        var diffArr=[];
+        for (var i = 0; i < deviceList.length; i++) {
+            var deviceInfo = data;
+            var mac = deviceInfo["mac"];
+            if (mac == deviceList[i].mac) {
+                deviceList[i]["deviceInfo"] = deviceInfo;
+            }
+            }
+
+        for (var i = 0; i < deviceList.length; i++) {
+            for (var j = 0; j <deviceList.length ; j++) {
+                if (j != i) {
+                        var maps={};
+                        var windNumj=deviceList[j]["deviceInfo"]["e23"];
+                        var windNumi=deviceList[i]["deviceInfo"]["e23"];
+                        var diff=windNumj-windNumi;
+                        if (diff > 180) {
+                            diff = 360 - diff;
+                        }
+                        maps["j"]=j;
+                        maps["i"]=i;
+                        maps["diff"]=Math.abs(diff);
+                        diffArr.push(maps);
+                }
+        }
+            var icon = new BMap.Icon("/img/wind_dir02.png", new BMap.Size(25, 25), {anchor: new BMap.Size(11, 21.5)});
+            var mark = new BMap.Marker(new BMap.Point(deviceList[i].longitude, deviceList[i].latitude), {icon: icon});
+            devices.push(new BMap.Point(deviceList[i].longitude, deviceList[i].latitude));
+            var dirWind=0;
+            if (deviceList[i]["deviceInfo"]["e23"]<=180){
+                dirWind=180+parseInt(deviceList[i]["deviceInfo"]["e23"]);
+            }else {
+                dirWind=deviceList[i]["deviceInfo"]["e23"].valueOf()-180
+            }
+            mark.setRotation(dirWind);
+            marks.push(mark);
+            map.addOverlay(mark);
+
+        }
+        var minIndex=0;
+        var minWindDir=0.0;
+        minWindDir=diffArr[0]["diff"];
+        for (var i = 1; i <diffArr.length ; i++) {
+            if (minWindDir>diffArr[i]["diff"]){
+                minWindDir=diffArr[i]["diff"];
+                minIndex=i;
+            }else {
+                minIndex=minIndex;
+            }
+        }
+        var firstDevice=deviceList[diffArr[minIndex]["j"]];
+        var secondDevice=deviceList[diffArr[minIndex]["i"]];
+        var fNum=Number(firstDevice["deviceInfo"]["e23"]);
+        var sNum=Number(secondDevice["deviceInfo"]["e23"]);
+        var wind=0;
+        if(Math.abs(fNum-secondDevice)>180){
+            wind=(fNum+sNum)/2+180;
+            if (wind>360){
+                wind=wind-360;
+            }
+        }else {
+            wind=(fNum+sNum)/2
+        }
+        $.ajax({
+            url: "/screen/chooseDevice",
+            type: "get",
+            dataType: "json",
+            data:{"wind":wind,"monitPointId":monitPointId},
+            success: function (info) {
+                var locationList=info["locationList"];
+                var preAngleDeviceString = info["preAngleDeviceString"];
+
+                var preAngleDeviceList="";
+                if (preAngleDeviceString!=0 &&preAngleDeviceString!=1){
+                    var arrow="";
+                    preAngleDeviceList=JSON.parse(preAngleDeviceString);
+
+                    var mac0=preAngleDeviceList[0]["mac"];
+                    var mac1=preAngleDeviceList[1]["mac"];
+                    for (var i = 0; i <deviceList.length ; i++) {
+                        if (mac0==deviceList[i]["mac"]){
+                            preAngleDeviceList[0]["sensors"]=deviceList[i]["deviceInfo"];
+                        }else if (mac1==deviceList[i]["mac"]){
+                            preAngleDeviceList[1]["sensors"]=deviceList[i]["deviceInfo"];
+                        }else {
+                            continue;
+                        }
+                    }
+                    var diff=preAngleDeviceList[0]["sensors"][sensor]-preAngleDeviceList[1]["sensors"][sensor];
+                    var diffSensor=preAngleDeviceList[1]["sensors"][sensor]-preAngleDeviceList[0]["sensors"][sensor];
+                    diffSensor=String(diffSensor).replace(/^(.*\..{4}).*$/,"$1");
+                    connectionDoublePoint(diff,preAngleDeviceList,locationList,diffSensor);
+            }}}
+        );
+
+    }
+function connectionDoublePoint(diff,preAngleDeviceList,locationList,diffSensor) {
+    for (var i = 0; i <arrows.length ; i++) {
+        map.removeOverlay(arrows[i]);
+    }
+    var info="";
+    if (diff>0){
+        info="������������������";
+        var polyline = new BMap.Polyline([
+            new BMap.Point(preAngleDeviceList[0].longitude, preAngleDeviceList[0].latitude),
+            new BMap.Point(locationList[0][0],locationList[0][1])
+        ], {strokeColor:"red", strokeWeight:8, strokeOpacity:0.5});   //������������
+        map.addOverlay(polyline);   //������������
+        var polyline1 = new BMap.Polyline([
+            new BMap.Point(locationList[0][0],locationList[0][1]),
+            new BMap.Point(locationList[1][0],locationList[1][1])
+        ], {strokeColor:"Tomato", strokeWeight:8, strokeOpacity:0.5});   //������������
+        map.addOverlay(polyline1);   //������������
+        var polyline2 = new BMap.Polyline([
+            new BMap.Point(locationList[1][0],locationList[1][1]),
+            new BMap.Point(locationList[2][0],locationList[2 ][1])
+        ], {strokeColor:"Coral", strokeWeight:8, strokeOpacity:0.5});   //������������
+        map.addOverlay(polyline2);   //������������
+        var polyline3 = new BMap.Polyline([
+            new BMap.Point(locationList[2][0],locationList[2][1]),
+            new BMap.Point(locationList[3][0],locationList[3][1])
+        ], {strokeColor:"Orange", strokeWeight:8, strokeOpacity:0.5});   //������������
+        map.addOverlay(polyline3);   //������������
+        var polyline4 = new BMap.Polyline([
+            new BMap.Point(locationList[3][0],locationList[3][1]),
+            new BMap.Point(locationList[4][0],locationList[4][1])
+        ], {strokeColor:"Gold", strokeWeight:8, strokeOpacity:0.5});   //������������
+        map.addOverlay(polyline4);   //������������
+        var arrowLineList = new Array();//������������������������
+        arrows.push(polyline);
+        arrows.push(polyline1);
+        arrows.push(polyline2);
+        arrows.push(polyline3);
+        arrows.push(polyline4);
+        color="Gold";
+        arrowLineList[arrowLineList.length] = addArrow(polyline4,30,Math.PI/7,color);//������������������������
+    } else {
+        info="������������������";
+        var polyline = new BMap.Polyline([
+            new BMap.Point(preAngleDeviceList[0].longitude, preAngleDeviceList[0].latitude),
+            new BMap.Point(locationList[0][0],locationList[0][1])
+        ], {strokeColor:"Gold", strokeWeight:8, strokeOpacity:0.5});   //������������
+        map.addOverlay(polyline);   //������������
+        var polyline1 = new BMap.Polyline([
+            new BMap.Point(locationList[0][0],locationList[0][1]),
+            new BMap.Point(locationList[1][0],locationList[1][1])
+        ], {strokeColor:"Orange", strokeWeight:8, strokeOpacity:0.5});   //������������
+        map.addOverlay(polyline1);   //������������
+        var polyline2 = new BMap.Polyline([
+            new BMap.Point(locationList[1][0],locationList[1][1]),
+            new BMap.Point(locationList[2][0],locationList[2 ][1])
+        ], {strokeColor:"Coral", strokeWeight:8, strokeOpacity:0.5});   //������������
+        map.addOverlay(polyline2);   //������������
+        var polyline3 = new BMap.Polyline([
+            new BMap.Point(locationList[2][0],locationList[2][1]),
+            new BMap.Point(locationList[3][0],locationList[3][1])
+        ], {strokeColor:"Tomato", strokeWeight:8, strokeOpacity:0.5});   //������������
+        map.addOverlay(polyline3);   //������������
+        var polyline4 = new BMap.Polyline([
+            new BMap.Point(locationList[3][0],locationList[3][1]),
+            new BMap.Point(locationList[4][0],locationList[4][1])
+        ], {strokeColor:"red", strokeWeight:8, strokeOpacity:0.5});   //������������
+        map.addOverlay(polyline4);   //������������
+        arrows.push(polyline);
+        arrows.push(polyline1);
+        arrows.push(polyline2);
+        arrows.push(polyline3);
+        arrows.push(polyline4);
+        var arrowLineList = new Array();//������������������������
+        color="red";
+        arrowLineList[arrowLineList.length] = addArrow(polyline4,28,Math.PI/7,color);//������������������������
+    }
+    $("#diff").html(diffSensor+" ("+info+")");
+}
+    function addArrow(polyline, length, angleValue, color) { //���������������������
+        var linePoint = polyline.getPath();//���������������
+        var arrowCount = linePoint.length;
+        for (var i = 1; i < arrowCount; i++) { //������������������������
+            var pixelStart = map.pointToPixel(linePoint[i - 1]);
+            var pixelEnd = map.pointToPixel(linePoint[i]);
+            var angle = angleValue;//������������������������
+            var r = length; // r/Math.sin(angle)������������������
+            var delta = 0; //���������������������������������
+            var param = 0; //������������������
+            var pixelTemX, pixelTemY;//���������������
+            var pixelX, pixelY, pixelX1, pixelY1;//���������������
+            if (pixelEnd.x - pixelStart.x == 0) { //���������������������
+                pixelTemX = pixelEnd.x;
+                if (pixelEnd.y > pixelStart.y) {
+                    pixelTemY = pixelEnd.y - r;
+                } else {
+                    pixelTemY = pixelEnd.y + r;
+                }
+                //���������������������������������������������������������������������������������������
+                pixelX = pixelTemX - r * Math.tan(angle);
+                pixelX1 = pixelTemX + r * Math.tan(angle);
+                pixelY = pixelY1 = pixelTemY;
+            } else  //���������������
+            {
+                delta = (pixelEnd.y - pixelStart.y) / (pixelEnd.x - pixelStart.x);
+                param = Math.sqrt(delta * delta + 1);
+
+                if ((pixelEnd.x - pixelStart.x) < 0) //������������������
+                {
+                    pixelTemX = pixelEnd.x + r / param;
+                    pixelTemY = pixelEnd.y + delta * r / param;
+                } else//������������������
+                {
+                    pixelTemX = pixelEnd.x - r / param;
+                    pixelTemY = pixelEnd.y - delta * r / param;
+                }
+                //���������������������������������������������������������������������������������������
+                pixelX = pixelTemX + Math.tan(angle) * r * delta / param;
+                pixelY = pixelTemY - Math.tan(angle) * r / param;
+
+                pixelX1 = pixelTemX - Math.tan(angle) * r * delta / param;
+                pixelY1 = pixelTemY + Math.tan(angle) * r / param;
+            }
+
+            var pointArrow = map.pixelToPoint(new BMap.Pixel(pixelX, pixelY));
+            var pointArrow1 = map.pixelToPoint(new BMap.Pixel(pixelX1, pixelY1));
+            arrow = new BMap.Polyline([
+                pointArrow,
+                linePoint[i],
+                pointArrow1
+            ], {strokeColor: color, strokeWeight: 6, strokeOpacity: 0.5});
+
+            arrows.push(arrow);
+            map.addOverlay(arrow);
+            return arrow;
+        }
+    }
+</script>
+
diff --git a/src/main/webapp/view/unorganizedMap.jsp b/src/main/webapp/view/unorganizedMap.jsp
index bfe4ef0..b67884d 100644
--- a/src/main/webapp/view/unorganizedMap.jsp
+++ b/src/main/webapp/view/unorganizedMap.jsp
@@ -18,7 +18,7 @@
         #box {
             width:300px;
             height:400px;
-            top:520px;
+            top:220px;
             right:30px;
             position:absolute;
             z-index:1;

--
Gitblit v1.8.0