From 842148f960e3d5dc995c49ef42a6ce2b8f1d4e34 Mon Sep 17 00:00:00 2001
From: lizijie <lzjiiie@163.com>
Date: Wed, 02 Dec 2020 16:05:46 +0800
Subject: [PATCH] pollution_sourc_point表相关代码

---
 src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java |  369 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 357 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
index 9a24f1b..ccd664d 100644
--- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -1,7 +1,12 @@
 package com.moral.service.impl;
 
+import com.moral.mapper.*;
+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;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -17,6 +22,7 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -34,6 +40,7 @@
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.time.DateUtils;
+import org.apache.jasper.compiler.JspUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
@@ -44,16 +51,26 @@
 import com.moral.common.util.ReportTimeFormat;
 import com.moral.common.util.ResourceUtil;
 import com.moral.common.util.ValidateUtil;
+import com.moral.entity.Area;
+import com.moral.entity.City;
+import com.moral.entity.MonitorPoint;
+import com.moral.entity.Province;
 import com.moral.entity.Sensor;
 import com.moral.entity.charts.DataCondition;
 import com.moral.entity.charts.LineChartCriteria;
 import com.moral.entity.charts.TimePeriod;
 import com.moral.mapper.AlarmDailyMapper;
+import com.moral.mapper.AreaMapper;
+import com.moral.mapper.CityMapper;
 import com.moral.mapper.DeviceMapper;
 import com.moral.mapper.HistoryMapper;
 import com.moral.mapper.HistoryMinutelyMapper;
+import com.moral.mapper.MonitorPointMapper;
+import com.moral.mapper.ProvinceMapper;
 import com.moral.mapper.SensorMapper;
+import com.moral.mapper.ShAreaMapper;
 import com.moral.service.HistoryMinutelyService;
+import com.sun.org.apache.bcel.internal.generic.ANEWARRAY;
 
 import static com.moral.common.bean.Constants.NULL_VALUE;
 import static org.springframework.util.ObjectUtils.isEmpty;
@@ -76,6 +93,19 @@
 
     @Resource
     private AlarmDailyMapper alarmDailyMapper;
+
+    @Resource
+    private AreaMapper areaMapper;
+
+    @Resource
+    private ProvinceMapper provinceMapper;
+
+    @Resource
+    private CityMapper cityMapper;
+
+    @Resource
+    private MonitorPointMapper monitorPointMapper;
+
 
     @Override
     public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) {
@@ -361,20 +391,17 @@
     }
 
     @Override
-    public List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters) throws Exception {
+    public List<Map<String, Object>> get(Map<String, Object> parameters) throws Exception {
         convertQueryParam(parameters);
         if (!ObjectUtils.isEmpty(parameters.get("compensate"))) {
             parameters.put("timeUnits", "10min");
         }
-        return historyMinutelyMapper.getAreaAvgDataByAreaCode(parameters);
-
+        return historyMinutelyMapper.getMultiDeviceSensorData(parameters);
     }
 
     @Override
     public void convertQueryParam(Map<String, Object> parameters) throws ParseException {
         if (!parameters.containsKey("field")) {
-            // String type = (String) parameters.get("type");
-            // parameters.putAll(getElementByType(type));
             ParameterUtils.getElementByType(parameters);
             if (parameters.containsKey("timeUnits")) {
                 if ("minutely".equals(parameters.get("timeUnits"))) {
@@ -382,13 +409,13 @@
                         String[] timeStr = parameters.get("time").toString().split("-");
                         int year = Integer.valueOf(timeStr[0]);
                         int month = Integer.valueOf(timeStr[1]);
-                        String yearAndMonth;
-                        if (month < 10) {
-                            yearAndMonth = "minutely_" + year + "0" + month;
-                        } else {
-                            yearAndMonth = "minutely_" + year + month;
-                        }
                         if (year >= 2020) {
+                            String yearAndMonth;
+                            if (month < 10) {
+                                yearAndMonth = "minutely_" + year + "0" + month;
+                            } else {
+                                yearAndMonth = "minutely_" + year + month;
+                            }
                             parameters.put("timeUnits", yearAndMonth);
                         }
                     }
@@ -698,7 +725,7 @@
             }
             parameters.put("timeList", timeList);
         } else if ("day".equals(parameters.get("type"))) {
-            String time = parameters.get("time") + "T00:00:00";
+            String time = parameters.get("time") + "T01:00:00";
             LocalDateTime value = LocalDateTime.parse(time);
             LocalDateTime end = value.plusHours(23);
             parameters.put("timeUnits", "hourly");
@@ -748,4 +775,322 @@
         return historyMinutelyMapper.getDevicesSensorsAvgDataToExcel(parameters);
     }
 
+
+    @Override
+    public List<Map<String, Object>> get5MinutesOrHalfHour(Map<String, Object> parameters) throws ParseException {
+        if (parameters.get("city") == null) {
+            return new ArrayList<Map<String, Object>>();
+        }
+        String string = parameters.get("time").toString();
+        String year = string.substring(0, 4);
+        String[] split = string.substring(5).split("-");
+        String month = split[0];
+        String day = split[1];
+        if (split[0].length() < 2) {
+            month = 0 + split[0];
+        }
+        if (split[1].length() < 2) {
+            day = 0 + split[1];
+        }
+        String time = year + "-" + month + "-" + day;
+        String cityName = parameters.get("city").toString();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String type = parameters.get("type").toString();
+        String range = parameters.get("range").toString();
+        Area area = areaMapper.getAreaByName(cityName);
+        Integer code;
+        String name;
+        if (area == null) {
+            City city = cityMapper.getCityByName(cityName);
+            if (city == null) {
+                Province province = provinceMapper.getProvinceByName(cityName);
+                code = province.getProvinceCode();
+                name = province.getProvinceName();
+            } else {
+                code = city.getCityCode();
+                name = city.getCityName();
+            }
+        } else {
+            code = area.getAreaCode();
+            name = area.getAreaName();
+        }
+        parameters.put("cityCode", code);
+        parameters.put("name", name);
+        Map<String, Object> map = new HashMap<>();
+        if (code.toString().endsWith("0000")) {
+            map.put("provinceCode", code);
+        } else if (code.toString().endsWith("00")) {
+            map.put("cityCode", code);
+        } else {
+            map.put("areaCode", code);
+        }
+        //List<String> sensorKeys = sensorMapper.getSensorKeys();
+
+        List<String> sensorKeys = new ArrayList<String>();
+        Collections.addAll(sensorKeys, "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e10", "e11", "e12", "e13", "e14", "e15"
+                , "e16", "e17", "e18", "e21", "e23", "e25", "e26", "e27", "e28", "e31", "e33", "e45", "e49", "e97", "e98", "e102");
+
+        String timeUnits = "minutely_" + time.substring(0, 7).replace("-", "");
+        map.put("sensorKeys", sensorKeys);
+        map.put("timeUnits", timeUnits);
+        Calendar cal = Calendar.getInstance();
+        List<Map<String, Object>> resultList = new ArrayList<>();
+        int seg;
+        long startTime;
+        long endTime;
+        int minuteChange;
+        if ("m".equals(type)) {
+            cal.setTime(sdf.parse(time + " 00:05:00"));
+            startTime = cal.getTimeInMillis();
+            cal.add(Calendar.DAY_OF_MONTH, 1);
+            endTime = cal.getTimeInMillis();
+            seg = 5 * 60 * 1000;
+            minuteChange = -5;
+        } else {
+            cal.setTime(sdf.parse(time + " 00:30:00"));
+            startTime = cal.getTimeInMillis();
+            cal.add(Calendar.DAY_OF_MONTH, 1);
+            endTime = cal.getTimeInMillis();
+            seg = 30 * 60 * 1000;
+            minuteChange = -30;
+        }
+        for (long time1 = startTime; time1 < endTime; time1 += seg) {
+            Date end = new Date(time1);
+            cal.setTime(end);
+            cal.add(Calendar.MINUTE, minuteChange);
+            Date start = cal.getTime();
+            map.put("start", start);
+            map.put("end", end);
+            Map<String, Object> dataMap = historyMinutelyMapper.get5MiutesOrHalfHourByDay(map);
+            if (dataMap == null) {
+                break;
+            }
+            dataMap.put("time", sdf.format(end));
+            dataMap.put("city", name);
+            Set<String> set = dataMap.keySet();
+            Iterator<String> it = set.iterator();
+            List<String> listKey = new ArrayList<>();
+            while (it.hasNext()) {
+                String key = it.next();
+                if (dataMap.get(key) == null || "".equals(dataMap.get(key))) {
+                    listKey.add(key);
+                }
+            }
+            for (String key : listKey) {
+                dataMap.remove(key);
+            }
+            resultList.add(dataMap);
+        }
+        return resultList;
+    }
+
+    @Override
+    public List<Map<String, Object>> getMultiDeviceSensorData(Map<String, Object> parameters) throws Exception {
+        String sensorKey = parameters.get("sensorKey").toString();
+        String[] macs = parameters.get("macs").toString().split(",");
+        List<String> sensorKeys = new ArrayList<>();
+        sensorKeys.add(sensorKey);
+        parameters.put("sensorKeys", sensorKeys);
+        parameters.put("sensors", sensorKeys);
+        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);
+            List<Map<String, Object>> l = new ArrayList<>();
+            for (int i = 0; i < 31; i++) {
+                l.add(null);
+            }
+            for (Map<String, Object> dataMap : data) {
+                String time = dataMap.get("time").toString();
+                Integer t = Integer.valueOf(time.substring(time.length() - 2));
+                dataMap.put("time", t);
+                if ("day".equals(type)) {
+                    l.set(t, dataMap);
+                } else {
+                    l.set(t - 1, dataMap);
+                }
+            }
+            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);
+                }
+            }
+        }
+        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 {
+        Calendar cal = Calendar.getInstance();
+        int length = ((String) parameters.get("startTime")).split("-").length;
+        String time = parameters.remove("startTime").toString();
+        String timeb;
+        if (parameters.get("endTime") == null) {
+            timeb = time;
+        } else {
+            timeb = parameters.remove("endTime").toString();
+        }
+        String dateFormat = "";
+        String typeFormat = "";
+        String timeUnits = "daily";
+        int i = 0;
+        if (length == 1) {
+            dateFormat = "yyyy";
+            typeFormat = "%Y";
+            i = Calendar.YEAR;
+        } else if (length == 2) {
+            dateFormat = "yyyy-MM";
+            typeFormat = "%Y-%m";
+            i = Calendar.MONTH;
+        } else if (length == 3) {
+            dateFormat = "yyyy-MM-dd";
+            typeFormat = "%Y-%m-%d";
+            i = Calendar.DAY_OF_MONTH;
+        } else if (length == 4) {
+            dateFormat = "yyyy-MM-dd HH";
+            typeFormat = "%Y-%m-%d %H";
+            timeUnits = "hourly";
+            i = Calendar.HOUR_OF_DAY;
+            time = time.substring(0, 10) + " " + time.substring(11, 13);
+            timeb = timeb.substring(0, 10) + " " + timeb.substring(11, 13);
+        }
+        parameters.put("time", time);
+        parameters.put("timeb", timeb);
+
+        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
+        cal.setTime(sdf.parse(timeb));
+        cal.add(i, 1);
+        Date endTime = cal.getTime();
+        parameters.put("format", dateFormat);
+        parameters.put("typeFormat", typeFormat);
+        parameters.put("timeUnits", timeUnits);
+        parameters.put("field", i);
+        cal.setTime(sdf.parse(time));
+        List<String> times = new ArrayList<>();
+        for (long d = cal.getTimeInMillis(); d < 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", sdf.format(endTime));
+        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