| | |
| | | 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; |
| | |
| | | @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; |
| | | } |
| | | |
| | | |
| | | } |