From 0289e2c5349f6b2e8cf41126be7ff31381b3f1d5 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Mon, 19 Oct 2020 14:35:10 +0800 Subject: [PATCH] 多设备单因子数据及其平均值对比 --- src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java | 120 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 99 insertions(+), 21 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..4b8c103 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; @@ -893,38 +894,115 @@ @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; } - - } -- Gitblit v1.8.0