| | |
| | | @SuppressWarnings({"unchecked", "unused", "rawtypes"}) |
| | | public class HistoryMinutelyServiceImpl implements HistoryMinutelyService { |
| | | |
| | | @Resource |
| | | private HistoryMinutelyMapper historyMinutelyMapper; |
| | | @Resource |
| | | private HistoryMinutelyMapper historyMinutelyMapper; |
| | | |
| | | @Resource |
| | | private HistoryMapper historyMapper; |
| | | @Resource |
| | | private HistoryMapper historyMapper; |
| | | |
| | | @Resource |
| | | private DeviceMapper deviceMapper; |
| | | @Resource |
| | | private DeviceMapper deviceMapper; |
| | | |
| | | @Resource |
| | | private SensorMapper sensorMapper; |
| | | @Resource |
| | | private SensorMapper sensorMapper; |
| | | |
| | | @Resource |
| | | private AlarmDailyMapper alarmDailyMapper; |
| | | @Resource |
| | | private AlarmDailyMapper alarmDailyMapper; |
| | | |
| | | @Override |
| | | public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) { |
| | | //ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); |
| | | LocalDate time = LocalDate.now(); |
| | | int year = time.getYear(); |
| | | int month = time.getMonthValue(); |
| | | int day = time.getDayOfMonth(); |
| | | if (day == 1) { |
| | | if (month == 1) { |
| | | month = 12; |
| | | year = year - 1; |
| | | } else { |
| | | month = month - 1; |
| | | } |
| | | } |
| | | String monthStr = month < 10 ? ("0" + month) : month + ""; |
| | | String yearAndMonth = year + monthStr; |
| | | // 昨日00:00:00 |
| | | parameters.put("start", time.minusDays(1)); |
| | | |
| | | // 今日00:00:00 |
| | | parameters.put("end", time); |
| | | parameters.put("yearAndMonth", yearAndMonth); |
| | | parameters.put("sensorKeys", Arrays.asList("e1", "e2", "e10", "e11", "e15", "e16")); |
| | | Map<String, Double> average = historyMinutelyMapper.getSersionAvgByDevice(parameters); |
| | | return getAQIByDataMap(average); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> getHourAQIByDevice(Map<String, Object> parameters) { |
| | | //ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); |
| | | LocalDate localDate = LocalDate.now(); |
| | | // 昨日00:00:00 |
| | | //parameters.put("start", localDate.minusDays(1)); |
| | | |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(new Date()); |
| | | calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) - 1); |
| | | int hour = calendar.get(Calendar.HOUR) - 1; |
| | | |
| | | // 今日00:00:00 |
| | | parameters.put("end", localDate); |
| | | parameters.put("sensorKeys", Arrays.asList("e1", "e2", "e10", "e11", "e15", "e16")); |
| | | Map<String, Double> average = historyMinutelyMapper.getSersionAvgByDevice(parameters); |
| | | return getAQIByDataMap(average); |
| | | } |
| | | |
| | | private Map<String, Object> getAQIByDataMap(Map<String, Double> average) { |
| | | Map<String, Object> resultMap = new HashMap<String, Object>(); |
| | | if (isEmpty(average)) { |
| | | resultMap.put("AQI", "N/V"); |
| | | } else { |
| | | String[] IAQIValues = ResourceUtil.getArrValue("IAQI"); |
| | | Set<Double> IAQIs = new HashSet<Double>(); |
| | | for (Map.Entry<String, Double> entry : average.entrySet()) { |
| | | double minMacKey = 0, maxMacKey = 0, minIAQI = 0, maxIAQI = 0; |
| | | String[] macKeyValues = ResourceUtil.getArrValue(entry.getKey()); |
| | | Double avg = entry.getValue(); |
| | | if (isEmpty(avg)) { |
| | | IAQIs.add(null); |
| | | } else { |
| | | int index = -1; |
| | | for (int i = 0; i < macKeyValues.length; i++) { |
| | | if (avg <= Double.valueOf(macKeyValues[i])) { |
| | | if (i == 0) { |
| | | index = i; |
| | | } else { |
| | | index = i - 1; |
| | | } |
| | | break; |
| | | @Override |
| | | public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) { |
| | | //ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); |
| | | LocalDate time = LocalDate.now(); |
| | | int year = time.getYear(); |
| | | int month = time.getMonthValue(); |
| | | int day = time.getDayOfMonth(); |
| | | if (day == 1) { |
| | | if (month == 1) { |
| | | month = 12; |
| | | year = year - 1; |
| | | } else { |
| | | month = month - 1; |
| | | } |
| | | } |
| | | if (index == -1) { |
| | | IAQIs.add(Double.MAX_VALUE); |
| | | } else { |
| | | minMacKey = Double.valueOf(macKeyValues[index]); |
| | | maxMacKey = Double.valueOf(macKeyValues[index + 1]); |
| | | minIAQI = Double.valueOf(IAQIValues[index]); |
| | | maxIAQI = Double.valueOf(IAQIValues[index + 1]); |
| | | Double result = CalculateUtils.calculateIAQI(maxIAQI, minIAQI, maxMacKey, minMacKey, avg); |
| | | IAQIs.add(result); |
| | | } |
| | | } |
| | | } |
| | | IAQIs.remove(null); |
| | | if (isEmpty(IAQIs)) { |
| | | resultMap.put("AQI", "N/V"); |
| | | } else { |
| | | Double AQI = Collections.max(IAQIs); |
| | | if (AQI == Double.MAX_VALUE) { |
| | | resultMap.put("AQI", IAQIValues[IAQIValues.length - 1]); |
| | | String monthStr = month < 10 ? ("0" + month) : month + ""; |
| | | String yearAndMonth = year + monthStr; |
| | | // 昨日00:00:00 |
| | | parameters.put("start", time.minusDays(1)); |
| | | |
| | | // 今日00:00:00 |
| | | parameters.put("end", time); |
| | | parameters.put("yearAndMonth", yearAndMonth); |
| | | parameters.put("sensorKeys", Arrays.asList("e1", "e2", "e10", "e11", "e15", "e16")); |
| | | Map<String, Double> average = historyMinutelyMapper.getSersionAvgByDevice(parameters); |
| | | return getAQIByDataMap(average); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> getHourAQIByDevice(Map<String, Object> parameters) { |
| | | //ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); |
| | | LocalDate localDate = LocalDate.now(); |
| | | // 昨日00:00:00 |
| | | //parameters.put("start", localDate.minusDays(1)); |
| | | |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(new Date()); |
| | | calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) - 1); |
| | | int hour = calendar.get(Calendar.HOUR) - 1; |
| | | |
| | | // 今日00:00:00 |
| | | parameters.put("end", localDate); |
| | | parameters.put("sensorKeys", Arrays.asList("e1", "e2", "e10", "e11", "e15", "e16")); |
| | | Map<String, Double> average = historyMinutelyMapper.getSersionAvgByDevice(parameters); |
| | | return getAQIByDataMap(average); |
| | | } |
| | | |
| | | private Map<String, Object> getAQIByDataMap(Map<String, Double> average) { |
| | | Map<String, Object> resultMap = new HashMap<String, Object>(); |
| | | if (isEmpty(average)) { |
| | | resultMap.put("AQI", "N/V"); |
| | | } else { |
| | | resultMap.put("AQI", String.format("%.0f", AQI)); |
| | | } |
| | | } |
| | | } |
| | | return resultMap; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List> getCompareReport(Map<String, Object> parameters) throws Exception { |
| | | Map<String, List> resultMap = new HashMap<String, List>(); |
| | | List<Map<String, Object>> list = JSON.parseObject((String) parameters.remove("items"), new TypeReference<List<Map<String, Object>>>() { |
| | | }); |
| | | |
| | | String type = (String) parameters.get("type"); |
| | | // parameters.putAll(getElementByType(type)); |
| | | ParameterUtils.getElementByType(parameters); |
| | | Integer timeLength = Integer.valueOf(parameters.remove("timeLength").toString()); |
| | | if ("month".equals(type)) { |
| | | for (Map<String, Object> map : list) { |
| | | String[] formatTime = map.get("formatTime").toString().split("-"); |
| | | LocalDate localDate = LocalDate.of(Integer.valueOf(formatTime[0]), Integer.valueOf(formatTime[1]), 1); |
| | | int lengthOfMonth = localDate.lengthOfMonth(); |
| | | if (lengthOfMonth > timeLength) { |
| | | timeLength = lengthOfMonth; |
| | | } |
| | | } |
| | | } |
| | | |
| | | List<Object> timeList = new ArrayList<Object>(); |
| | | for (int i = 0; i < timeLength; i++) { |
| | | timeList.add(String.format("%02d", "day".equals(type) || "hour".equals(type) ? i : i + 1)); |
| | | } |
| | | parameters.put("timeList", timeList); |
| | | |
| | | ExecutorService threadPool = Executors.newCachedThreadPool(); |
| | | CompletionService<Map<String, Object>> cs = new ExecutorCompletionService<Map<String, Object>>(threadPool); |
| | | for (int i = 0; i < list.size(); i++) { |
| | | Map<String, Object> map = list.get(i); |
| | | map.put("part", i); |
| | | if (ObjectUtils.isEmpty(map.get("mac"))) { |
| | | map.remove("mac"); |
| | | } |
| | | map.put("time", map.remove("formatTime")); |
| | | map.putAll(parameters); |
| | | cs.submit(new Callable<Map<String, Object>>() { |
| | | @Override |
| | | public Map<String, Object> call() throws Exception { |
| | | return getMonitorPointOrDeviceAvgData4Compare(map); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | List<Object> dataList = new ArrayList<Object>(); |
| | | for (Map<String, Object> map : list) { |
| | | dataList.add(cs.take().get()); |
| | | } |
| | | Object[] datas = new Object[list.size()]; |
| | | Object[] deviceCounts = new Object[list.size()]; |
| | | Object[] alarmDatas = new Object[list.size()]; |
| | | Set<String> sensors = new TreeSet<String>(new Comparator<String>() { |
| | | @Override |
| | | public int compare(String o1, String o2) { |
| | | return o1.split("-")[0].compareTo(o2.split("-")[0]); |
| | | //return Integer.compare(Integer.valueOf(o1.split("-")[0].replace("e", "")), Integer.valueOf(o2.split("-")[0].replace("e", ""))); |
| | | } |
| | | }); |
| | | Map<String, Double> sortMap = new HashMap<String, Double>(); |
| | | for (Object object : dataList) { |
| | | Map<String, Object> map = (Map<String, Object>) object; |
| | | for (String key : map.keySet()) { |
| | | int index = Integer.valueOf(key.substring(key.length() - 1)); |
| | | String actual = key.substring(0, key.length() - 1); |
| | | Object obj = map.get(key); |
| | | switch (actual) { |
| | | case "data": |
| | | datas[index] = obj; |
| | | break; |
| | | case "deviceCount": |
| | | deviceCounts[index] = obj; |
| | | break; |
| | | case "alarmData": |
| | | alarmDatas[index] = obj; |
| | | if (!ObjectUtils.isEmpty(obj)) { |
| | | Map<String, BigDecimal> mapData = (Map<String, BigDecimal>) obj; |
| | | BigDecimal sum = mapData.remove("sum"); |
| | | for (Entry<String, BigDecimal> entry : mapData.entrySet()) { |
| | | if (!"name".equals(entry.getKey())) { |
| | | sortMap.put(entry.getKey() + "-" + index, new BigDecimal(100).multiply(entry.getValue()) |
| | | .divide(sum, 2, BigDecimal.ROUND_HALF_UP).doubleValue()); |
| | | |
| | | String[] IAQIValues = ResourceUtil.getArrValue("IAQI"); |
| | | Set<Double> IAQIs = new HashSet<Double>(); |
| | | for (Map.Entry<String, Double> entry : average.entrySet()) { |
| | | double minMacKey = 0, maxMacKey = 0, minIAQI = 0, maxIAQI = 0; |
| | | String[] macKeyValues = ResourceUtil.getArrValue(entry.getKey()); |
| | | Double avg = entry.getValue(); |
| | | if (isEmpty(avg)) { |
| | | IAQIs.add(null); |
| | | } else { |
| | | int index = -1; |
| | | for (int i = 0; i < macKeyValues.length; i++) { |
| | | if (avg <= Double.valueOf(macKeyValues[i])) { |
| | | if (i == 0) { |
| | | index = i; |
| | | } else { |
| | | index = i - 1; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | if (index == -1) { |
| | | IAQIs.add(Double.MAX_VALUE); |
| | | } else { |
| | | minMacKey = Double.valueOf(macKeyValues[index]); |
| | | maxMacKey = Double.valueOf(macKeyValues[index + 1]); |
| | | minIAQI = Double.valueOf(IAQIValues[index]); |
| | | maxIAQI = Double.valueOf(IAQIValues[index + 1]); |
| | | Double result = CalculateUtils.calculateIAQI(maxIAQI, minIAQI, maxMacKey, minMacKey, avg); |
| | | IAQIs.add(result); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case "sensors": |
| | | sensors.addAll((List<String>) obj); |
| | | break; |
| | | IAQIs.remove(null); |
| | | if (isEmpty(IAQIs)) { |
| | | resultMap.put("AQI", "N/V"); |
| | | } else { |
| | | Double AQI = Collections.max(IAQIs); |
| | | if (AQI == Double.MAX_VALUE) { |
| | | resultMap.put("AQI", IAQIValues[IAQIValues.length - 1]); |
| | | } else { |
| | | resultMap.put("AQI", String.format("%.0f", AQI)); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return resultMap; |
| | | } |
| | | List<Map.Entry<String, Double>> sortList = new ArrayList<Map.Entry<String, Double>>(sortMap.entrySet()); |
| | | Collections.sort(sortList, new Comparator<Map.Entry<String, Double>>() { |
| | | @Override |
| | | public int compare(Entry<String, Double> o1, Entry<String, Double> o2) { |
| | | if (o2.getValue().compareTo(o1.getValue()) == 0) { |
| | | String[] key1 = o1.getKey().split("-"); |
| | | String[] key2 = o2.getKey().split("-"); |
| | | |
| | | @Override |
| | | public Map<String, List> getCompareReport(Map<String, Object> parameters) throws Exception { |
| | | Map<String, List> resultMap = new HashMap<String, List>(); |
| | | List<Map<String, Object>> list = JSON.parseObject((String) parameters.remove("items"), new TypeReference<List<Map<String, Object>>>() { |
| | | }); |
| | | |
| | | String type = (String) parameters.get("type"); |
| | | // parameters.putAll(getElementByType(type)); |
| | | ParameterUtils.getElementByType(parameters); |
| | | Integer timeLength = Integer.valueOf(parameters.remove("timeLength").toString()); |
| | | if ("month".equals(type)) { |
| | | for (Map<String, Object> map : list) { |
| | | String[] formatTime = map.get("formatTime").toString().split("-"); |
| | | LocalDate localDate = LocalDate.of(Integer.valueOf(formatTime[0]), Integer.valueOf(formatTime[1]), 1); |
| | | int lengthOfMonth = localDate.lengthOfMonth(); |
| | | if (lengthOfMonth > timeLength) { |
| | | timeLength = lengthOfMonth; |
| | | } |
| | | } |
| | | } |
| | | |
| | | List<Object> timeList = new ArrayList<Object>(); |
| | | for (int i = 0; i < timeLength; i++) { |
| | | timeList.add(String.format("%02d", "day".equals(type) || "hour".equals(type) ? i : i + 1)); |
| | | } |
| | | parameters.put("timeList", timeList); |
| | | |
| | | ExecutorService threadPool = Executors.newCachedThreadPool(); |
| | | CompletionService<Map<String, Object>> cs = new ExecutorCompletionService<Map<String, Object>>(threadPool); |
| | | for (int i = 0; i < list.size(); i++) { |
| | | Map<String, Object> map = list.get(i); |
| | | map.put("part", i); |
| | | if (ObjectUtils.isEmpty(map.get("mac"))) { |
| | | map.remove("mac"); |
| | | } |
| | | map.put("time", map.remove("formatTime")); |
| | | map.putAll(parameters); |
| | | cs.submit(new Callable<Map<String, Object>>() { |
| | | @Override |
| | | public Map<String, Object> call() throws Exception { |
| | | return getMonitorPointOrDeviceAvgData4Compare(map); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | List<Object> dataList = new ArrayList<Object>(); |
| | | for (Map<String, Object> map : list) { |
| | | dataList.add(cs.take().get()); |
| | | } |
| | | Object[] datas = new Object[list.size()]; |
| | | Object[] deviceCounts = new Object[list.size()]; |
| | | Object[] alarmDatas = new Object[list.size()]; |
| | | Set<String> sensors = new TreeSet<String>(new Comparator<String>() { |
| | | @Override |
| | | public int compare(String o1, String o2) { |
| | | return o1.split("-")[0].compareTo(o2.split("-")[0]); |
| | | //return Integer.compare(Integer.valueOf(o1.split("-")[0].replace("e", "")), Integer.valueOf(o2.split("-")[0].replace("e", ""))); |
| | | } |
| | | }); |
| | | Map<String, Double> sortMap = new HashMap<String, Double>(); |
| | | for (Object object : dataList) { |
| | | Map<String, Object> map = (Map<String, Object>) object; |
| | | for (String key : map.keySet()) { |
| | | int index = Integer.valueOf(key.substring(key.length() - 1)); |
| | | String actual = key.substring(0, key.length() - 1); |
| | | Object obj = map.get(key); |
| | | switch (actual) { |
| | | case "data": |
| | | datas[index] = obj; |
| | | break; |
| | | case "deviceCount": |
| | | deviceCounts[index] = obj; |
| | | break; |
| | | case "alarmData": |
| | | alarmDatas[index] = obj; |
| | | if (!ObjectUtils.isEmpty(obj)) { |
| | | Map<String, BigDecimal> mapData = (Map<String, BigDecimal>) obj; |
| | | BigDecimal sum = mapData.remove("sum"); |
| | | for (Entry<String, BigDecimal> entry : mapData.entrySet()) { |
| | | if (!"name".equals(entry.getKey())) { |
| | | sortMap.put(entry.getKey() + "-" + index, new BigDecimal(100).multiply(entry.getValue()) |
| | | .divide(sum, 2, BigDecimal.ROUND_HALF_UP).doubleValue()); |
| | | |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case "sensors": |
| | | sensors.addAll((List<String>) obj); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | List<Map.Entry<String, Double>> sortList = new ArrayList<Map.Entry<String, Double>>(sortMap.entrySet()); |
| | | Collections.sort(sortList, new Comparator<Map.Entry<String, Double>>() { |
| | | @Override |
| | | public int compare(Entry<String, Double> o1, Entry<String, Double> o2) { |
| | | if (o2.getValue().compareTo(o1.getValue()) == 0) { |
| | | String[] key1 = o1.getKey().split("-"); |
| | | String[] key2 = o2.getKey().split("-"); |
| | | // String sensor1 = key1[0].replace("e", ""); |
| | | // String sensor2 = key2[0].replace("e", ""); |
| | | // if (Integer.valueOf(sensor1).compareTo(Integer.valueOf(sensor2)) == 0) { |
| | | // return Integer.compare(Integer.valueOf(key1[1]), Integer.valueOf(key2[1])); |
| | | // } |
| | | // return Integer.valueOf(sensor1).compareTo(Integer.valueOf(sensor2)); |
| | | if (key1[0].compareTo(key2[0]) == 0) { |
| | | return Integer.compare(Integer.valueOf(key1[1]), Integer.valueOf(key2[1])); |
| | | } else { |
| | | return key1[0].compareTo(key2[0]); |
| | | } |
| | | } else { |
| | | return o2.getValue().compareTo(o1.getValue()); |
| | | } |
| | | } |
| | | if (key1[0].compareTo(key2[0]) == 0) { |
| | | return Integer.compare(Integer.valueOf(key1[1]), Integer.valueOf(key2[1])); |
| | | } else { |
| | | return key1[0].compareTo(key2[0]); |
| | | } |
| | | } else { |
| | | return o2.getValue().compareTo(o1.getValue()); |
| | | } |
| | | } |
| | | |
| | | }); |
| | | resultMap.put("times", timeList); |
| | | resultMap.put("datas", Arrays.asList(datas)); |
| | | resultMap.put("deviceCounts", Arrays.asList(deviceCounts)); |
| | | resultMap.put("alarmDatas", Arrays.asList(alarmDatas)); |
| | | resultMap.put("sensors", new ArrayList<Object>(sensors)); |
| | | resultMap.put("sortList", sortList); |
| | | return resultMap; |
| | | } |
| | | |
| | | |
| | | public Map<String, Object> getMonitorPointOrDeviceAvgData4Compare(Map<String, Object> parameters) throws Exception { |
| | | Map<String, Object> resultMap = new HashMap<String, Object>(); |
| | | List<Map<String, Object>> resultList = getMonitorPointOrDeviceAvgData(parameters); |
| | | List<Object> timeList = (List<Object>) parameters.get("timeList"); |
| | | List<String> sensors = (List<String>) parameters.get("sensors"); |
| | | String part = parameters.get("part").toString(); |
| | | Map<String, Double[]> doubleMap = new LinkedHashMap<String, Double[]>(); |
| | | for (Map<String, Object> map : resultList) { |
| | | String time = map.get("time").toString(); |
| | | time = time.substring(time.length() - 2); |
| | | int index = timeList.indexOf(time); |
| | | for (String sensor : sensors) { |
| | | String[] split = sensor.split("-"); |
| | | String sensorKey = split[0]; |
| | | if (map.containsKey(sensorKey)) { |
| | | Double[] doubles; |
| | | if (doubleMap.containsKey(sensor)) { |
| | | doubles = doubleMap.get(sensor); |
| | | } else { |
| | | doubles = new Double[timeList.size()]; |
| | | } |
| | | doubles[index] = (Double) map.get(sensorKey); |
| | | doubleMap.put(sensor, doubles); |
| | | } |
| | | } |
| | | } |
| | | |
| | | Object deviceCount; |
| | | if (parameters.containsKey("deviceCount")) { |
| | | deviceCount = parameters.remove("deviceCount"); |
| | | } else { |
| | | deviceCount = deviceMapper.getDeviceCountByRegion(parameters); |
| | | } |
| | | |
| | | resultMap.put("deviceCount" + part, deviceCount); |
| | | resultMap.put("data" + part, doubleMap); |
| | | resultMap.put("sensors" + part, sensors); |
| | | Object type = parameters.get("type"); |
| | | if ("year".equals(type) || "month".equals(type)) { |
| | | parameters.put("sensorKeys", Arrays.asList("e1", "e2", "e10", "e11", "e15", "e16")); |
| | | List<Map<String, Object>> alarmData = alarmDailyMapper.getAlarmData(parameters); |
| | | if (!ObjectUtils.isEmpty(alarmData)) { |
| | | resultMap.put("alarmData" + part, alarmDailyMapper.getAlarmData(parameters).get(0)); |
| | | } |
| | | } |
| | | return resultMap; |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getMonitorPointOrDeviceAvgData(Map<String, Object> parameters) throws Exception { |
| | | convertQueryParam(parameters); |
| | | if (!ObjectUtils.isEmpty(parameters.get("compensate"))) { |
| | | 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 |
| | | 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); |
| | | } |
| | | String time = (String) parameters.get("time"); |
| | | String format = (String) parameters.get("format"); |
| | | Integer field = Integer.valueOf(parameters.get("field").toString()); |
| | | Date start = DateUtils.parseDate(time, format), end = null; |
| | | if (parameters.containsKey("timeb")) { |
| | | end = DateUtils.parseDate((String) parameters.get("timeb"), format); |
| | | } else { |
| | | Calendar instance = Calendar.getInstance(); |
| | | instance.setTime(start); |
| | | instance.add(field, 1); |
| | | end = instance.getTime(); |
| | | } |
| | | parameters.put("start", start); |
| | | parameters.put("end", end); |
| | | |
| | | List<String> sensorKeys = new ArrayList<String>(); |
| | | List<String> sensors = new ArrayList<String>(); |
| | | if (parameters.containsKey("sensors")) { |
| | | try { |
| | | sensors = JSON.parseObject((String) parameters.get("sensors"), new TypeReference<List<String>>() { |
| | | }); |
| | | for (String sensor : sensors) { |
| | | sensorKeys.add(sensor.split("-")[0]); |
| | | } |
| | | } catch (Exception e) { |
| | | sensorKeys = sensors = (List<String>) parameters.remove("sensors"); |
| | | } |
| | | } else { |
| | | List<Sensor> sensorList = sensorMapper.getSensorsByCriteria(parameters); |
| | | for (Sensor sensor : sensorList) { |
| | | sensorKeys.add(sensor.getSensorKey()); |
| | | String string = sensor.getSensorKey() + "-" + sensor.getName() + "-" + sensor.getUnit(); |
| | | if (parameters.containsKey("description")) { |
| | | string += "-" + sensor.getDescription(); |
| | | } |
| | | sensors.add(string); |
| | | } |
| | | resultMap.put("times", timeList); |
| | | resultMap.put("datas", Arrays.asList(datas)); |
| | | resultMap.put("deviceCounts", Arrays.asList(deviceCounts)); |
| | | resultMap.put("alarmDatas", Arrays.asList(alarmDatas)); |
| | | resultMap.put("sensors", new ArrayList<Object>(sensors)); |
| | | resultMap.put("sortList", sortList); |
| | | return resultMap; |
| | | } |
| | | parameters.put("sensorKeys", sensorKeys); |
| | | parameters.put("sensors", sensors); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> getMonthAverageBySensor(Map<String, Object> parameters) { |
| | | //ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); |
| | | Object sensorKey = parameters.remove("macKey"); |
| | | ValidateUtil.notNull(sensorKey, "param.is.null"); |
| | | Map<String, Object> result = new HashMap<String, Object>(); |
| | | LocalDate end = LocalDate.now(), start; |
| | | // 每月一日的数据取上月的数据 |
| | | if (1 == end.getDayOfMonth()) { |
| | | // 上个月1日00:00:00 |
| | | start = end.plusDays(-1).with(TemporalAdjusters.firstDayOfMonth()); |
| | | } else { |
| | | // 这个月1日00:00:00 |
| | | start = end.with(TemporalAdjusters.firstDayOfMonth()); |
| | | } |
| | | parameters.put("start", start); |
| | | parameters.put("end", end); |
| | | parameters.put("sensorKeys", Arrays.asList(sensorKey)); |
| | | |
| | | Map<String, Double> average = historyMinutelyMapper.getSersionAvgByDevice(parameters); |
| | | if (isEmpty(average)) { |
| | | result.put("average", NULL_VALUE); |
| | | } else { |
| | | result.put("average", String.format("%.2f", average.get(sensorKey))); |
| | | public Map<String, Object> getMonitorPointOrDeviceAvgData4Compare(Map<String, Object> parameters) throws Exception { |
| | | Map<String, Object> resultMap = new HashMap<String, Object>(); |
| | | List<Map<String, Object>> resultList = getMonitorPointOrDeviceAvgData(parameters); |
| | | List<Object> timeList = (List<Object>) parameters.get("timeList"); |
| | | List<String> sensors = (List<String>) parameters.get("sensors"); |
| | | String part = parameters.get("part").toString(); |
| | | Map<String, Double[]> doubleMap = new LinkedHashMap<String, Double[]>(); |
| | | for (Map<String, Object> map : resultList) { |
| | | String time = map.get("time").toString(); |
| | | time = time.substring(time.length() - 2); |
| | | int index = timeList.indexOf(time); |
| | | for (String sensor : sensors) { |
| | | String[] split = sensor.split("-"); |
| | | String sensorKey = split[0]; |
| | | if (map.containsKey(sensorKey)) { |
| | | Double[] doubles; |
| | | if (doubleMap.containsKey(sensor)) { |
| | | doubles = doubleMap.get(sensor); |
| | | } else { |
| | | doubles = new Double[timeList.size()]; |
| | | } |
| | | doubles[index] = (Double) map.get(sensorKey); |
| | | doubleMap.put(sensor, doubles); |
| | | } |
| | | } |
| | | } |
| | | |
| | | Object deviceCount; |
| | | if (parameters.containsKey("deviceCount")) { |
| | | deviceCount = parameters.remove("deviceCount"); |
| | | } else { |
| | | deviceCount = deviceMapper.getDeviceCountByRegion(parameters); |
| | | } |
| | | |
| | | resultMap.put("deviceCount" + part, deviceCount); |
| | | resultMap.put("data" + part, doubleMap); |
| | | resultMap.put("sensors" + part, sensors); |
| | | Object type = parameters.get("type"); |
| | | if ("year".equals(type) || "month".equals(type)) { |
| | | parameters.put("sensorKeys", Arrays.asList("e1", "e2", "e10", "e11", "e15", "e16")); |
| | | List<Map<String, Object>> alarmData = alarmDailyMapper.getAlarmData(parameters); |
| | | if (!ObjectUtils.isEmpty(alarmData)) { |
| | | resultMap.put("alarmData" + part, alarmDailyMapper.getAlarmData(parameters).get(0)); |
| | | } |
| | | } |
| | | return resultMap; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getMonitorPointOrDeviceAvgData(Map<String, Object> parameters) throws Exception { |
| | | convertQueryParam(parameters); |
| | | if (!ObjectUtils.isEmpty(parameters.get("compensate"))) { |
| | | 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 |
| | | 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); |
| | | } |
| | | String time = (String) parameters.get("time"); |
| | | String format = (String) parameters.get("format"); |
| | | Integer field = Integer.valueOf(parameters.get("field").toString()); |
| | | Date start = DateUtils.parseDate(time, format), end = null; |
| | | if (parameters.containsKey("timeb")) { |
| | | end = DateUtils.parseDate((String) parameters.get("timeb"), format); |
| | | } else { |
| | | Calendar instance = Calendar.getInstance(); |
| | | instance.setTime(start); |
| | | instance.add(field, 1); |
| | | end = instance.getTime(); |
| | | } |
| | | parameters.put("start", start); |
| | | parameters.put("end", end); |
| | | |
| | | List<String> sensorKeys = new ArrayList<String>(); |
| | | List<String> sensors = new ArrayList<String>(); |
| | | if (parameters.containsKey("sensors")) { |
| | | try { |
| | | sensors = JSON.parseObject((String) parameters.get("sensors"), new TypeReference<List<String>>() { |
| | | }); |
| | | for (String sensor : sensors) { |
| | | sensorKeys.add(sensor.split("-")[0]); |
| | | } |
| | | } catch (Exception e) { |
| | | sensorKeys = sensors = (List<String>) parameters.remove("sensors"); |
| | | } |
| | | } else { |
| | | List<Sensor> sensorList = sensorMapper.getSensorsByCriteria(parameters); |
| | | for (Sensor sensor : sensorList) { |
| | | sensorKeys.add(sensor.getSensorKey()); |
| | | String string = sensor.getSensorKey() + "-" + sensor.getName() + "-" + sensor.getUnit(); |
| | | if (parameters.containsKey("description")) { |
| | | string += "-" + sensor.getDescription(); |
| | | } |
| | | sensors.add(string); |
| | | } |
| | | } |
| | | parameters.put("sensorKeys", sensorKeys); |
| | | parameters.put("sensors", sensors); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> getMonthAverageBySensor(Map<String, Object> parameters) { |
| | | //ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); |
| | | Object sensorKey = parameters.remove("macKey"); |
| | | ValidateUtil.notNull(sensorKey, "param.is.null"); |
| | | Map<String, Object> result = new HashMap<String, Object>(); |
| | | LocalDate end = LocalDate.now(), start; |
| | | // 每月一日的数据取上月的数据 |
| | | if (1 == end.getDayOfMonth()) { |
| | | // 上个月1日00:00:00 |
| | | start = end.plusDays(-1).with(TemporalAdjusters.firstDayOfMonth()); |
| | | } else { |
| | | // 这个月1日00:00:00 |
| | | start = end.with(TemporalAdjusters.firstDayOfMonth()); |
| | | } |
| | | parameters.put("start", start); |
| | | parameters.put("end", end); |
| | | parameters.put("sensorKeys", Arrays.asList(sensorKey)); |
| | | |
| | | Map<String, Double> average = historyMinutelyMapper.getSersionAvgByDevice(parameters); |
| | | if (isEmpty(average)) { |
| | | result.put("average", NULL_VALUE); |
| | | } else { |
| | | result.put("average", String.format("%.2f", average.get(sensorKey))); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> getAverageBySensor(Map<String, Object> parameters) { |
| | |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 根据线性表单的条件规则,获取多条线性表单数据 |
| | | * |
| | | * @param lineChartCriteria |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Map<String, List<List<Double>>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria) { |
| | | Map<String, List<List<Double>>> listMap = new HashMap<>(); |
| | | List<String> sensorKeys = lineChartCriteria.getSensorKeys(); |
| | | List<DataCondition> dataConditionList = lineChartCriteria.getDataConditions(); |
| | | TimePeriod timePeriod = lineChartCriteria.getTimePeriod(); |
| | | sensorKeys.forEach(sensorKey -> { |
| | | listMap.put(sensorKey, new ArrayList<List<Double>>(dataConditionList.size())); |
| | | }); |
| | | dataConditionList.forEach(dataCondition -> { |
| | | Map<String, List<Double>> dataMap = queryOneLineChartDateByCrieria(sensorKeys, timePeriod, dataCondition); |
| | | // 数据装载 |
| | | listMap.forEach((sensorKey, list) -> { |
| | | List<Double> rowData = dataMap.get(sensorKey); |
| | | list.add(rowData); |
| | | }); |
| | | }); |
| | | return listMap; |
| | | } |
| | | |
| | | /** |
| | | * 根据线性表单的条件规则,获取一条线性表单数据,包含 所有检测项目 |
| | | * |
| | | * @param sensorKeys |
| | | * @param timePeriod |
| | | * @param dataCondition |
| | | * @return |
| | | */ |
| | | public Map<String, List<Double>> queryOneLineChartDateByCrieria(List<String> sensorKeys, TimePeriod timePeriod, DataCondition dataCondition) { |
| | | List<String> timeList = ReportTimeFormat.makeTimeList(timePeriod); |
| | | List<Map<String, Object>> lineChartDatas = historyMinutelyMapper.selectLineChartDateByCrieria(sensorKeys, timePeriod, dataCondition); |
| | | Map<String, List<Double>> lineChartDatasWithEmpty = new HashMap<>(); |
| | | // lineChartDatasWithEmpty 初始化 |
| | | sensorKeys.forEach(sensorKey -> { |
| | | lineChartDatasWithEmpty.put(sensorKey, timeList.stream().map(time -> { |
| | | Double data = null; |
| | | return data; |
| | | }).collect(Collectors.toList())); |
| | | }); |
| | | // m 为查询data的index,此处要防止m越界 |
| | | int m = 0; |
| | | int dataLength = lineChartDatas.size() - 1; |
| | | m = dataLength > -1 ? 0 : -1; |
| | | if (m > -1) { |
| | | for (int n = 0; n < timeList.size(); n++) { |
| | | if (m > -1) { |
| | | String time = timeList.get(n); |
| | | Map<String, Object> rowData = lineChartDatas.get(m); |
| | | String keyTime = rowData.get("format_time").toString(); |
| | | if (time.equals(keyTime)) { |
| | | // list to map |
| | | int finalN = n; |
| | | sensorKeys.forEach(sensorKey -> { |
| | | Object value = rowData.get(sensorKey); |
| | | List<Double> lineChartDatasWithEmptyTemp = lineChartDatasWithEmpty.get(sensorKey); |
| | | if (finalN < lineChartDatasWithEmptyTemp.size()) { |
| | | Double sensorValue = value != null ? new Double(value.toString()) : null; |
| | | lineChartDatasWithEmptyTemp.set(finalN, sensorValue); |
| | | } |
| | | /** |
| | | * 根据线性表单的条件规则,获取多条线性表单数据 |
| | | * |
| | | * @param lineChartCriteria |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Map<String, List<List<Double>>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria) { |
| | | Map<String, List<List<Double>>> listMap = new HashMap<>(); |
| | | List<String> sensorKeys = lineChartCriteria.getSensorKeys(); |
| | | List<DataCondition> dataConditionList = lineChartCriteria.getDataConditions(); |
| | | TimePeriod timePeriod = lineChartCriteria.getTimePeriod(); |
| | | sensorKeys.forEach(sensorKey -> { |
| | | listMap.put(sensorKey, new ArrayList<List<Double>>(dataConditionList.size())); |
| | | }); |
| | | dataConditionList.forEach(dataCondition -> { |
| | | Map<String, List<Double>> dataMap = queryOneLineChartDateByCrieria(sensorKeys, timePeriod, dataCondition); |
| | | // 数据装载 |
| | | listMap.forEach((sensorKey, list) -> { |
| | | List<Double> rowData = dataMap.get(sensorKey); |
| | | list.add(rowData); |
| | | }); |
| | | // 置为 -1,防止越界 |
| | | m = m < dataLength ? m + 1 : -1; |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | return listMap; |
| | | } |
| | | return lineChartDatasWithEmpty; |
| | | } |
| | | |
| | | private Map<String, Object> getElementByType(Object type) { |
| | | Map<String, Object> resultMap = new HashMap<String, Object>(); |
| | | switch (type.toString()) { |
| | | case "year": |
| | | resultMap.put("format", "yyyy"); |
| | | resultMap.put("typeFormat", "%Y-%m"); |
| | | resultMap.put("timeLength", 12); |
| | | resultMap.put("field", Calendar.YEAR); |
| | | break; |
| | | case "month": |
| | | resultMap.put("format", "yyyy-MM"); |
| | | resultMap.put("typeFormat", "%Y-%m-%d"); |
| | | resultMap.put("timeLength", 28); |
| | | resultMap.put("field", Calendar.MONTH); |
| | | break; |
| | | case "day": |
| | | resultMap.put("format", "yyyy-MM-dd"); |
| | | resultMap.put("typeFormat", "%Y-%m-%d %H"); |
| | | resultMap.put("timeLength", 24); |
| | | resultMap.put("field", Calendar.DATE); |
| | | break; |
| | | case "hour": |
| | | resultMap.put("format", "yyyy-MM-dd HH"); |
| | | resultMap.put("typeFormat", "%Y-%m-%d %H:%i"); |
| | | resultMap.put("timeLength", 60); |
| | | resultMap.put("field", Calendar.HOUR); |
| | | break; |
| | | } |
| | | return resultMap; |
| | | } |
| | | |
| | | /* |
| | | * @description 查询无人机在时间段内的sensor值 |
| | | * @author ZhuDongming |
| | | * @date 2019-07-25 09:21:45 |
| | | * @param parameters |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<List<Map<String, Object>>> getSensorData(Map<String, Object> parameters) { |
| | | String startTime = parameters.get("startTime").toString(); |
| | | DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | LocalDateTime startTimeLocalDateTime = LocalDateTime.parse(startTime, dateTimeFormatter); |
| | | int year = startTimeLocalDateTime.getYear(); |
| | | int month = startTimeLocalDateTime.getMonthValue(); |
| | | String monthStr = month < 10 ? ("0" + month) : month + ""; |
| | | String yearAndMonth = year + monthStr; |
| | | List<Sensor> sensors = sensorMapper.getSensorsByMac(parameters); |
| | | List<String> sensorKeys = new ArrayList<>(); |
| | | for (Sensor sensor : sensors) { |
| | | sensorKeys.add(sensor.getSensorKey()); |
| | | } |
| | | parameters.put("sensorKeys", sensorKeys); |
| | | List<Map<String, Object>> listMap = null; |
| | | if (year <= 2019) { |
| | | listMap = historyMinutelyMapper.getSensorData(parameters); |
| | | } else { |
| | | parameters.put("yearAndMonth", yearAndMonth); |
| | | listMap = historyMinutelyMapper.getSensorData2020(parameters); |
| | | } |
| | | List<List<Map<String, Object>>> listMaps = new ArrayList<>(); |
| | | List<Map<String, Object>> listMapAvg = new ArrayList<>(); |
| | | List<Map<String, Object>> listMapMin = new ArrayList<>(); |
| | | List<Map<String, Object>> listMapMax = new ArrayList<>(); |
| | | if (CollectionUtils.isNotEmpty(listMap)) { |
| | | for (Map<String, Object> map : listMap) { |
| | | Map<String, Object> mapAvg = new LinkedHashMap<>(); |
| | | Map<String, Object> mapMin = new LinkedHashMap<>(); |
| | | Map<String, Object> mapMax = new LinkedHashMap<>(); |
| | | mapAvg.put("time", map.get("time")); |
| | | mapMin.put("time", map.get("time")); |
| | | mapMax.put("time", map.get("time")); |
| | | for (Entry<String, Object> entry : map.entrySet()) { |
| | | for (Sensor sensor : sensors) { |
| | | if (sensor.getSensorKey().equals(entry.getKey())) { |
| | | mapAvg.put(entry.getKey(), new BigDecimal(entry.getValue().toString()).stripTrailingZeros().toPlainString() + sensor.getUnit()); |
| | | } else if (("min" + sensor.getSensorKey()).equals(entry.getKey())) { |
| | | mapMin.put(entry.getKey().substring(3), new BigDecimal(entry.getValue().toString().replace("\"", "")).stripTrailingZeros().toPlainString()); |
| | | } else if (("max" + sensor.getSensorKey()).equals(entry.getKey())) { |
| | | mapMax.put(entry.getKey().substring(3), new BigDecimal(entry.getValue().toString().replace("\"", "")).stripTrailingZeros().toPlainString()); |
| | | /** |
| | | * 根据线性表单的条件规则,获取一条线性表单数据,包含 所有检测项目 |
| | | * |
| | | * @param sensorKeys |
| | | * @param timePeriod |
| | | * @param dataCondition |
| | | * @return |
| | | */ |
| | | public Map<String, List<Double>> queryOneLineChartDateByCrieria(List<String> sensorKeys, TimePeriod timePeriod, DataCondition dataCondition) { |
| | | List<String> timeList = ReportTimeFormat.makeTimeList(timePeriod); |
| | | List<Map<String, Object>> lineChartDatas = historyMinutelyMapper.selectLineChartDateByCrieria(sensorKeys, timePeriod, dataCondition); |
| | | Map<String, List<Double>> lineChartDatasWithEmpty = new HashMap<>(); |
| | | // lineChartDatasWithEmpty 初始化 |
| | | sensorKeys.forEach(sensorKey -> { |
| | | lineChartDatasWithEmpty.put(sensorKey, timeList.stream().map(time -> { |
| | | Double data = null; |
| | | return data; |
| | | }).collect(Collectors.toList())); |
| | | }); |
| | | // m 为查询data的index,此处要防止m越界 |
| | | int m = 0; |
| | | int dataLength = lineChartDatas.size() - 1; |
| | | m = dataLength > -1 ? 0 : -1; |
| | | if (m > -1) { |
| | | for (int n = 0; n < timeList.size(); n++) { |
| | | if (m > -1) { |
| | | String time = timeList.get(n); |
| | | Map<String, Object> rowData = lineChartDatas.get(m); |
| | | String keyTime = rowData.get("format_time").toString(); |
| | | if (time.equals(keyTime)) { |
| | | // list to map |
| | | int finalN = n; |
| | | sensorKeys.forEach(sensorKey -> { |
| | | Object value = rowData.get(sensorKey); |
| | | List<Double> lineChartDatasWithEmptyTemp = lineChartDatasWithEmpty.get(sensorKey); |
| | | if (finalN < lineChartDatasWithEmptyTemp.size()) { |
| | | Double sensorValue = value != null ? new Double(value.toString()) : null; |
| | | lineChartDatasWithEmptyTemp.set(finalN, sensorValue); |
| | | } |
| | | }); |
| | | // 置为 -1,防止越界 |
| | | m = m < dataLength ? m + 1 : -1; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if ("0°".equals(mapAvg.get("e76")) || "0".equals(mapMin.get("e76")) || "0".equals(mapMax.get("e76")) || "0°".equals(mapAvg.get("e77")) || "0".equals(mapMin.get("e77")) || "0".equals(mapMax.get("e77"))) { |
| | | continue; |
| | | return lineChartDatasWithEmpty; |
| | | } |
| | | |
| | | private Map<String, Object> getElementByType(Object type) { |
| | | Map<String, Object> resultMap = new HashMap<String, Object>(); |
| | | switch (type.toString()) { |
| | | case "year": |
| | | resultMap.put("format", "yyyy"); |
| | | resultMap.put("typeFormat", "%Y-%m"); |
| | | resultMap.put("timeLength", 12); |
| | | resultMap.put("field", Calendar.YEAR); |
| | | break; |
| | | case "month": |
| | | resultMap.put("format", "yyyy-MM"); |
| | | resultMap.put("typeFormat", "%Y-%m-%d"); |
| | | resultMap.put("timeLength", 28); |
| | | resultMap.put("field", Calendar.MONTH); |
| | | break; |
| | | case "day": |
| | | resultMap.put("format", "yyyy-MM-dd"); |
| | | resultMap.put("typeFormat", "%Y-%m-%d %H"); |
| | | resultMap.put("timeLength", 24); |
| | | resultMap.put("field", Calendar.DATE); |
| | | break; |
| | | case "hour": |
| | | resultMap.put("format", "yyyy-MM-dd HH"); |
| | | resultMap.put("typeFormat", "%Y-%m-%d %H:%i"); |
| | | resultMap.put("timeLength", 60); |
| | | resultMap.put("field", Calendar.HOUR); |
| | | break; |
| | | } |
| | | listMapAvg.add(mapAvg); |
| | | listMapMin.add(mapMin); |
| | | listMapMax.add(mapMax); |
| | | } |
| | | listMaps.add(listMapAvg); |
| | | listMaps.add(listMapMin); |
| | | listMaps.add(listMapMax); |
| | | return resultMap; |
| | | } |
| | | return listMaps; |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getDevicesAvgDataToExcel(Map<String, Object> parameters) throws Exception { |
| | | if ("month".equals(parameters.get("type"))) { |
| | | parameters.put("timeUnits", "daily"); |
| | | parameters.put("typeFormat", "%Y-%m-%d"); |
| | | String time = parameters.get("time") + "-01T00:00:00"; |
| | | LocalDateTime value = LocalDateTime.parse(time); |
| | | LocalDateTime start = value.with(TemporalAdjusters.firstDayOfMonth()); |
| | | LocalDateTime end = value.with(TemporalAdjusters.lastDayOfMonth()); |
| | | parameters.put("start", start); |
| | | parameters.put("end", end); |
| | | int day = end.getDayOfMonth(); |
| | | List<String> timeList = new ArrayList<>(); |
| | | for (int i = 0; i <= day - 1; i++) { |
| | | timeList.add(start.plusDays(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | } |
| | | parameters.put("timeList", timeList); |
| | | } else if ("day".equals(parameters.get("type"))) { |
| | | String time = parameters.get("time") + "T00:00:00"; |
| | | LocalDateTime value = LocalDateTime.parse(time); |
| | | LocalDateTime end = value.plusHours(23); |
| | | parameters.put("timeUnits", "hourly"); |
| | | parameters.put("typeFormat", "%Y-%m-%d %H:%i"); |
| | | parameters.put("start", time); |
| | | parameters.put("end", end); |
| | | List<String> timeList = new ArrayList<>(); |
| | | for (int i = 0; i <= 23; i++) { |
| | | timeList.add(value.plusHours(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); |
| | | } |
| | | parameters.put("timeList", timeList); |
| | | /* |
| | | * @description 查询无人机在时间段内的sensor值 |
| | | * @author ZhuDongming |
| | | * @date 2019-07-25 09:21:45 |
| | | * @param parameters |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<List<Map<String, Object>>> getSensorData(Map<String, Object> parameters) { |
| | | String startTime = parameters.get("startTime").toString(); |
| | | DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | LocalDateTime startTimeLocalDateTime = LocalDateTime.parse(startTime, dateTimeFormatter); |
| | | int year = startTimeLocalDateTime.getYear(); |
| | | int month = startTimeLocalDateTime.getMonthValue(); |
| | | String monthStr = month < 10 ? ("0" + month) : month + ""; |
| | | String yearAndMonth = year + monthStr; |
| | | List<Sensor> sensors = sensorMapper.getSensorsByMac(parameters); |
| | | List<String> sensorKeys = new ArrayList<>(); |
| | | for (Sensor sensor : sensors) { |
| | | sensorKeys.add(sensor.getSensorKey()); |
| | | } |
| | | parameters.put("sensorKeys", sensorKeys); |
| | | List<Map<String, Object>> listMap = null; |
| | | if (year <= 2019) { |
| | | listMap = historyMinutelyMapper.getSensorData(parameters); |
| | | } else { |
| | | parameters.put("yearAndMonth", yearAndMonth); |
| | | listMap = historyMinutelyMapper.getSensorData2020(parameters); |
| | | } |
| | | List<List<Map<String, Object>>> listMaps = new ArrayList<>(); |
| | | List<Map<String, Object>> listMapAvg = new ArrayList<>(); |
| | | List<Map<String, Object>> listMapMin = new ArrayList<>(); |
| | | List<Map<String, Object>> listMapMax = new ArrayList<>(); |
| | | if (CollectionUtils.isNotEmpty(listMap)) { |
| | | for (Map<String, Object> map : listMap) { |
| | | Map<String, Object> mapAvg = new LinkedHashMap<>(); |
| | | Map<String, Object> mapMin = new LinkedHashMap<>(); |
| | | Map<String, Object> mapMax = new LinkedHashMap<>(); |
| | | mapAvg.put("time", map.get("time")); |
| | | mapMin.put("time", map.get("time")); |
| | | mapMax.put("time", map.get("time")); |
| | | for (Entry<String, Object> entry : map.entrySet()) { |
| | | for (Sensor sensor : sensors) { |
| | | if (sensor.getSensorKey().equals(entry.getKey())) { |
| | | mapAvg.put(entry.getKey(), new BigDecimal(entry.getValue().toString()).stripTrailingZeros().toPlainString() + sensor.getUnit()); |
| | | } else if (("min" + sensor.getSensorKey()).equals(entry.getKey())) { |
| | | mapMin.put(entry.getKey().substring(3), new BigDecimal(entry.getValue().toString().replace("\"", "")).stripTrailingZeros().toPlainString()); |
| | | } else if (("max" + sensor.getSensorKey()).equals(entry.getKey())) { |
| | | mapMax.put(entry.getKey().substring(3), new BigDecimal(entry.getValue().toString().replace("\"", "")).stripTrailingZeros().toPlainString()); |
| | | } |
| | | } |
| | | } |
| | | if ("0°".equals(mapAvg.get("e76")) || "0".equals(mapMin.get("e76")) || "0".equals(mapMax.get("e76")) || "0°".equals(mapAvg.get("e77")) || "0".equals(mapMin.get("e77")) || "0".equals(mapMax.get("e77"))) { |
| | | continue; |
| | | } |
| | | listMapAvg.add(mapAvg); |
| | | listMapMin.add(mapMin); |
| | | listMapMax.add(mapMax); |
| | | } |
| | | listMaps.add(listMapAvg); |
| | | listMaps.add(listMapMin); |
| | | listMaps.add(listMapMax); |
| | | } |
| | | return listMaps; |
| | | } |
| | | return historyMinutelyMapper.getDevicesAvgDataToExcel(parameters); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getDevicesSensorsAvgDataToExcel(Map<String, Object> parameters) throws Exception { |
| | | if ("month".equals(parameters.get("type"))) { |
| | | parameters.put("timeUnits", "daily"); |
| | | parameters.put("typeFormat", "%Y-%m-%d"); |
| | | String time = parameters.get("time") + "-01T00:00:00"; |
| | | LocalDateTime value = LocalDateTime.parse(time); |
| | | LocalDateTime start = value.with(TemporalAdjusters.firstDayOfMonth()); |
| | | LocalDateTime end = value.with(TemporalAdjusters.lastDayOfMonth()); |
| | | parameters.put("start", start); |
| | | parameters.put("end", end); |
| | | int day = end.getDayOfMonth(); |
| | | List<String> timeList = new ArrayList<>(); |
| | | for (int i = 0; i <= day - 1; i++) { |
| | | timeList.add(start.plusDays(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | } |
| | | parameters.put("timeList", timeList); |
| | | } else if ("day".equals(parameters.get("type"))) { |
| | | String time = parameters.get("time") + "T00:00:00"; |
| | | LocalDateTime value = LocalDateTime.parse(time); |
| | | LocalDateTime end = value.plusHours(23); |
| | | parameters.put("timeUnits", "hourly"); |
| | | parameters.put("typeFormat", "%Y-%m-%d %H:%i"); |
| | | parameters.put("start", time); |
| | | parameters.put("end", end); |
| | | List<String> timeList = new ArrayList<>(); |
| | | for (int i = 0; i <= 23; i++) { |
| | | timeList.add(value.plusHours(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); |
| | | } |
| | | parameters.put("timeList", timeList); |
| | | @Override |
| | | public List<Map<String, Object>> getDevicesAvgDataToExcel(Map<String, Object> parameters) throws Exception { |
| | | if ("month".equals(parameters.get("type"))) { |
| | | parameters.put("timeUnits", "daily"); |
| | | parameters.put("typeFormat", "%Y-%m-%d"); |
| | | String time = parameters.get("time") + "-01T00:00:00"; |
| | | LocalDateTime value = LocalDateTime.parse(time); |
| | | LocalDateTime start = value.with(TemporalAdjusters.firstDayOfMonth()); |
| | | LocalDateTime end = value.with(TemporalAdjusters.lastDayOfMonth()); |
| | | parameters.put("start", start); |
| | | parameters.put("end", end); |
| | | int day = end.getDayOfMonth(); |
| | | List<String> timeList = new ArrayList<>(); |
| | | for (int i = 0; i <= day - 1; i++) { |
| | | timeList.add(start.plusDays(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | } |
| | | parameters.put("timeList", timeList); |
| | | } else if ("day".equals(parameters.get("type"))) { |
| | | String time = parameters.get("time") + "T00:00:00"; |
| | | LocalDateTime value = LocalDateTime.parse(time); |
| | | LocalDateTime end = value.plusHours(23); |
| | | parameters.put("timeUnits", "hourly"); |
| | | parameters.put("typeFormat", "%Y-%m-%d %H:%i"); |
| | | parameters.put("start", time); |
| | | parameters.put("end", end); |
| | | List<String> timeList = new ArrayList<>(); |
| | | for (int i = 0; i <= 23; i++) { |
| | | timeList.add(value.plusHours(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); |
| | | } |
| | | parameters.put("timeList", timeList); |
| | | } |
| | | return historyMinutelyMapper.getDevicesAvgDataToExcel(parameters); |
| | | } |
| | | return historyMinutelyMapper.getDevicesSensorsAvgDataToExcel(parameters); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getDevicesSensorsAvgDataToExcel(Map<String, Object> parameters) throws Exception { |
| | | if ("month".equals(parameters.get("type"))) { |
| | | parameters.put("timeUnits", "daily"); |
| | | parameters.put("typeFormat", "%Y-%m-%d"); |
| | | String time = parameters.get("time") + "-01T00:00:00"; |
| | | LocalDateTime value = LocalDateTime.parse(time); |
| | | LocalDateTime start = value.with(TemporalAdjusters.firstDayOfMonth()); |
| | | LocalDateTime end = value.with(TemporalAdjusters.lastDayOfMonth()); |
| | | parameters.put("start", start); |
| | | parameters.put("end", end); |
| | | int day = end.getDayOfMonth(); |
| | | List<String> timeList = new ArrayList<>(); |
| | | for (int i = 0; i <= day - 1; i++) { |
| | | timeList.add(start.plusDays(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | } |
| | | parameters.put("timeList", timeList); |
| | | } else if ("day".equals(parameters.get("type"))) { |
| | | String time = parameters.get("time") + "T00:00:00"; |
| | | LocalDateTime value = LocalDateTime.parse(time); |
| | | LocalDateTime end = value.plusHours(23); |
| | | parameters.put("timeUnits", "hourly"); |
| | | parameters.put("typeFormat", "%Y-%m-%d %H:%i"); |
| | | parameters.put("start", time); |
| | | parameters.put("end", end); |
| | | List<String> timeList = new ArrayList<>(); |
| | | for (int i = 0; i <= 23; i++) { |
| | | timeList.add(value.plusHours(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); |
| | | } |
| | | parameters.put("timeList", timeList); |
| | | } |
| | | return historyMinutelyMapper.getDevicesSensorsAvgDataToExcel(parameters); |
| | | } |
| | | |
| | | } |