From cb888577b99892706860d2732785d22842aae9b0 Mon Sep 17 00:00:00 2001
From: 于紫祥_1901 <email@yuzixiang_1910>
Date: Fri, 18 Sep 2020 15:14:34 +0800
Subject: [PATCH] 走行车update

---
 src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java |  140 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 130 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
index f435eee..ed28222 100644
--- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -2,6 +2,7 @@
 
 import java.math.BigDecimal;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -17,6 +18,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;
@@ -44,14 +46,22 @@
 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.service.HistoryMinutelyService;
 
@@ -76,6 +86,18 @@
 
     @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) {
@@ -358,16 +380,6 @@
             parameters.put("timeUnits", "10min");
         }
         return historyMinutelyMapper.getMonitorPointOrDeviceAvgData(parameters);
-    }
-
-    @Override
-    public List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters) throws Exception {
-        convertQueryParam(parameters);
-        if (!ObjectUtils.isEmpty(parameters.get("compensate"))) {
-            parameters.put("timeUnits", "10min");
-        }
-        return historyMinutelyMapper.getAreaAvgDataByAreaCode(parameters);
-
     }
 
     @Override
@@ -748,4 +760,112 @@
         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;
+    }
 }

--
Gitblit v1.8.0