From 3c7db3d43212a01302c3b375f94a332e1f28d511 Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Thu, 22 Oct 2020 10:10:07 +0800
Subject: [PATCH] 增加国控站坐标获取

---
 src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java |  239 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 212 insertions(+), 27 deletions(-)

diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
index 79ef541..b3056f9 100644
--- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -4,6 +4,7 @@
 import io.swagger.models.auth.In;
 
 import java.math.BigDecimal;
+import java.text.NumberFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Instant;
@@ -104,14 +105,7 @@
 
     @Resource
     private MonitorPointMapper monitorPointMapper;
-    @Resource
-    HistoryFiveMinutelyMapper historyFiveMinutelyMapper;
 
-    @Override
-    public List<Map<String, Object>> getFiveMinutesDataByMacsAndTime(Map<String, Object> parameters) {
-        ValidateUtil.notNull(parameters,"���������������������������������");
-        return historyFiveMinutelyMapper.getFiveMinutesDataByMacsAndTime(parameters);
-    }
 
     @Override
     public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) {
@@ -893,38 +887,229 @@
     @Override
     public List<Map<String, Object>> getMultiDeviceSensorData(Map<String, Object> parameters) throws Exception {
         String sensorKey = parameters.get("sensorKey").toString();
-        System.out.println(parameters);
         String[] macs = parameters.get("macs").toString().split(",");
         List<String> sensorKeys = new ArrayList<>();
         sensorKeys.add(sensorKey);
         parameters.put("sensorKeys", sensorKeys);
         parameters.put("sensors", sensorKeys);
-        System.out.println(parameters);
-        List<Map<String, Object>> list = new ArrayList<>(24);
-        int max = 0;
+        String type = parameters.get("type").toString();
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (int i = 0; i < 31; i++) {
+            list.add(null);
+        }
         for (String mac : macs) {
             parameters.put("mac", mac);
             List<Map<String, Object>> data = getMonitorPointOrDeviceAvgData(parameters);
-            if (data.size() >= max) {
-                max = data.size();
+            List<Map<String, Object>> l = new ArrayList<>();
+            for (int i = 0; i < 31; i++) {
+                l.add(null);
             }
-            for (Map<String, Object> map : data) {
-                List<String> values = new ArrayList<>();
-                Map<String, Object> hashMap = new HashMap<>();
-                String time = map.get("time").toString();
-                hashMap.put("time",time);
-                int length = time.length();
+            for (Map<String, Object> dataMap : data) {
+                String time = dataMap.get("time").toString();
                 Integer t = Integer.valueOf(time.substring(time.length() - 2));
-                String value = map.get(sensorKey).toString();
-               /* if (length > 10) {
-
-                }*/
-                values.add(value);
+                dataMap.put("time", t);
+                if ("day".equals(type)) {
+                    l.set(t, dataMap);
+                } else {
+                    l.set(t - 1, dataMap);
+                }
             }
-            System.out.println(data);
+            for (int i = 0; i < l.size(); i++) {
+                if (l.get(i) == null) {
+                    Map<String, Object> m = new HashMap<>();
+                    List<String> v = new ArrayList<>();
+                    v.add("");
+                    if ("day".equals(type)) {
+                        m.put("time", i);
+                    } else {
+                        m.put("time", i + 1);
+                    }
+                    m.put("values", v);
+                    l.set(i, m);
+                }
+            }
+            data = l;
+            for (Map<String, Object> map : data) {
+                Map<String, Object> hashMap = new HashMap<>();
+                if (map != null) {
+                    int t = Integer.valueOf(map.get("time").toString());
+                    hashMap.put("time", t);
+                    String value;
+                    if (map.get(sensorKey) == null) {
+                        value = "";
+                    } else {
+                        value = map.get(sensorKey).toString();
+                    }
+                    List<String> values;
+
+                    if ("day".equals(type)) {
+                        t = t + 1;
+                    }
+                    if (list.get(t - 1) != null) {
+                        values = (ArrayList<String>) list.get(t - 1).get("values");
+                    } else {
+                        values = new ArrayList<>();
+                    }
+                    values.add(value);
+                    hashMap.put("values", values);
+                    list.set(t - 1, hashMap);
+                }
+            }
         }
-        return null;
+        boolean flag = false;
+        Iterator<Map<String, Object>> iterator = list.iterator();
+        int digit = 0;
+        while (iterator.hasNext()) {
+            Map<String, Object> next = iterator.next();
+            ArrayList<String> values = (ArrayList<String>) next.get("values");
+            for (String value : values) {
+                if ("".equals(value)) {
+                    flag = true;
+                } else {
+                    digit = value.split("\\.")[1].length();
+                    flag = false;
+                    break;
+                }
+            }
+            if (flag) {
+                iterator.remove();
+            }
+        }
+        NumberFormat nf = NumberFormat.getNumberInstance();
+        nf.setMaximumFractionDigits(digit);
+        for (Map<String, Object> map : list) {
+            int time = Integer.valueOf(map.get("time").toString());
+            ArrayList<String> values = (ArrayList<String>) map.get("values");
+            if (values.size() > 1) {
+                int length = 0;
+                double sum = 0.0;
+                for (String value : values) {
+                    if (!"".equals(value)) {
+                        Double v = Double.valueOf(value);
+                        length += 1;
+                        sum += v;
+                    }
+                }
+                Double avg = sum / length;
+                String format = nf.format(avg);
+                values.add(format);
+                map.put("values", values);
+            }
+        }
+        return list;
     }
 
-
+    @Override
+    public List<Map<String, Object>> getAllDeviceDataToExcel(Map<String, Object> parameters) throws Exception {
+        String time = parameters.remove("startTime").toString();
+        String timeb;
+        if (parameters.get("endTime") == null) {
+            timeb = time;
+        } else {
+            timeb = parameters.remove("endTime").toString();
+        }
+        parameters.put("time", time);
+        parameters.put("timeb", timeb);
+        Calendar cal = Calendar.getInstance();
+        int length = time.length();
+        String type = "";
+        if (length == 10) {
+            type = "day";
+        } else if (length == 7) {
+            type = "month";
+        } else if (length == 4) {
+            type = "year";
+        } else if (length == 13) {
+            type = "hour";
+        }
+        parameters.put("type", type);
+        String[] endTimes = timeb.split("-");
+        String dateFormat = "";
+        String beginTime = "";
+        String endTime = "";
+        Integer year = Integer.valueOf(endTimes[0]);
+        int i = 0;
+        if (type.equals("year")) {
+            dateFormat = "yyyy-MM";
+            beginTime = time + "-01";
+            timeb = Integer.valueOf(timeb) + 1 + "";
+            endTime = timeb + "-01";
+            i = Calendar.MONTH;
+        } else if (type.equals("month")) {
+            dateFormat = "yyyy-MM-dd";
+            beginTime = time + "-01";
+            i = Calendar.DAY_OF_MONTH;
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            cal.setTime(sdf.parse(timeb));
+            cal.add(Calendar.MONTH, 1);
+            timeb = sdf.format(cal.getTime());
+            endTime = timeb + "-01";
+        } else if (type.equals("day")) {
+            dateFormat = "yyyy-MM-dd HH";
+            beginTime = time + " 00";
+            i = Calendar.HOUR_OF_DAY;
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            cal.setTime(sdf.parse(timeb));
+            cal.add(Calendar.DAY_OF_MONTH, 1);
+            timeb = sdf.format(cal.getTime());
+            endTime = timeb + " 00";
+        } else if (type.equals("hour")) {
+            dateFormat = "yyyy-MM-dd HH:mm";
+            beginTime = time + ":00:00";
+            i = Calendar.MINUTE;
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH");
+            cal.setTime(sdf.parse(timeb));
+            cal.add(Calendar.HOUR_OF_DAY, 1);
+            timeb = sdf.format(cal.getTime());
+            endTime = timeb + ":00:00";
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
+        cal.setTime(sdf.parse(beginTime));
+        List<String> times = new ArrayList<>();
+        for (long d = cal.getTimeInMillis(); d < sdf.parse(endTime).getTime(); cal.set(i, cal.get(i) + 1), d = cal.getTimeInMillis()) {
+            String format = sdf.format(d);
+            times.add(format);
+        }
+        String[] sensorKeys = parameters.get("sensorKey").toString().split(",");
+        List<String> keys = Arrays.asList(sensorKeys);
+        parameters.put("sensors", keys);
+        parameters.put("sensorKeys", keys);
+        parameters.put("timeb", timeb);
+        int mpId = Integer.valueOf(parameters.get("monitorPoint").toString());
+        String monitorPointName = monitorPointMapper.getMonitorName(mpId);
+        List<Map<String, Object>> devices = deviceMapper.getDevicesByMpId(mpId);
+        List<Map<String, Object>> resultList = new ArrayList<>();
+        for (Map<String, Object> map : devices) {
+            String mac = map.get("mac").toString();
+            parameters.put("mac", mac);
+            String name = map.get("name").toString();
+            List<Map<String, Object>> data = getMonitorPointOrDeviceAvgData(parameters);
+            for (String sensorKey : keys) {
+                Map<String, Object> sensor = sensorMapper.getSensorBySensorKey(sensorKey);
+                if (sensor == null) {
+                    continue;
+                }
+                String description = sensor.get("description").toString();
+                String unit = sensor.get("unit").toString();
+                Map<String, Object> hashMap = new LinkedHashMap<>();
+                for (String t : times) {
+                    hashMap.put("monitorPointName", monitorPointName);
+                    hashMap.put("name", name);
+                    hashMap.put("sensor", description + "(" + unit + ")");
+                    hashMap.put(t, "");
+                }
+                if (data.size() != 0) {
+                    for (Map<String, Object> dataMap : data) {
+                        String t = dataMap.get("time").toString();
+                        if (dataMap.get(sensorKey) != null) {
+                            String value = dataMap.get(sensorKey).toString();
+                            hashMap.put(t, value);
+                        }
+                    }
+                }
+                resultList.add(hashMap);
+            }
+        }
+        return resultList;
+    }
 }

--
Gitblit v1.8.0