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