From a66d53c3cbfb0024804045f4d795be06089d4f9d Mon Sep 17 00:00:00 2001 From: lizijie <lzjiiie@163.com> Date: Thu, 03 Dec 2020 17:54:15 +0800 Subject: [PATCH] 五分钟表相关代码,平均风向、平局风速工具类 --- src/main/java/com/moral/service/impl/HistoryServiceImpl.java | 239 +++++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 164 insertions(+), 75 deletions(-) diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java index e0a6eec..d914880 100644 --- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java @@ -34,8 +34,8 @@ import com.moral.service.HistoryService; import com.moral.service.ProfessionService; import com.moral.util.AQICalculation; - import com.moral.util.DatesUtil; + import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; @@ -74,16 +74,18 @@ Map<String, Object> resultMap = new LinkedHashMap<String, Object>(); accountService.setOrgIdsByAccount(parameters); LocalDateTime time = LocalDateTime.now(); - // ������������ -10������ - parameters.put("start", time.minusMinutes(10)); + parameters.put("end", time); // ������������ -5������ - parameters.put("end", time.minusMinutes(5)); + LocalDateTime start = time.minusMinutes(5); + parameters.put("start", start); List<Sensor> Sensors = sensorMapper.getSensorsByCriteria(parameters); List<String> sensorKeys = new ArrayList<String>(); for (Sensor sensor : Sensors) { sensorKeys.add(sensor.getSensorKey()); } parameters.put("sensorKeys", sensorKeys); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMM"); + parameters.put("timeUnits", "five_minutely_" + df.format(time)); List<Map<String, Object>> list = historyMapper.getAreaAllDataByAccount(parameters); resultMap.putAll(list.get(0)); return resultMap; @@ -105,8 +107,8 @@ List<String> sensorKeys = new ArrayList<String>(); sensorKeys.add(macKey.toString()); parameters.put("sensorKeys", sensorKeys); + parameters.put("timeUnits", "hourly"); List<Map<String, Object>> list = historyMapper.getAreaAllDataByAccount(parameters); - for (Map<String, Object> map : list) { result.put((String) map.get("name"), map.get(macKey.toString())); } @@ -115,7 +117,14 @@ @Override public String queryValueByMacAndTime(String mac, Date time) { - return historyMapper.selectValueByMacAndTime(mac, time); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String timeUnits = sdf.format(time); + return historyMapper.selectValueByMacAndTime(mac, time, timeUnits); + } + + public String getValueByMacAndTime(String mac, String time, String time1) { + String timeUnits = time1.substring(0, 10).replace("-", ""); + return historyMapper.getValueByMacAndTime(mac, time, time1, timeUnits); } @Override @@ -150,10 +159,12 @@ parameters.put("nextLevel", nextLevel); LocalDate localDate = LocalDate.now(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMM"); Object timeType = parameters.get("timeType"); + String table = "history"; - String column = "value"; - if ("month".equals(timeType)) { + String column = "json"; + /*if ("month".equals(timeType)) { if (1 != localDate.getDayOfMonth()) { table = "history_daily"; column = "json"; @@ -165,7 +176,19 @@ parameters.put("start", LocalDateTime.now().truncatedTo(ChronoUnit.HOURS)); } else { parameters.put("start", LocalDateTime.now().minusMinutes(5)); + }*/ + + if ("month".equals(timeType)) { + table = "history_daily"; + parameters.put("start", localDate.with(TemporalAdjusters.firstDayOfMonth())); + } else if ("day".equals(timeType)) { + table = "history_hourly"; + parameters.put("start", localDate); + } else if ("hour".equals(timeType)) { + table = "history_minutely_" + df.format(localDate); + parameters.put("start", LocalDateTime.now().truncatedTo(ChronoUnit.HOURS)); } + parameters.put("table", table); parameters.put("column", column); @@ -176,7 +199,6 @@ } accountService.setOrgIdsByAccount(parameters); - List<Map<String, Object>> result = historyMapper.getRegionRankingData(parameters); for (Map<String, Object> map : result) { if (ObjectUtils.isEmpty(map.get("avg"))) { @@ -250,6 +272,10 @@ ValidateUtil.notNull(parameters.get("deviceId"), "param.is.null"); List<Map<String, Object>> sensors = sensorMapper.getSensorsByDeviceVersionId(parameters); parameters.put("size", 1); + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String timeUnits = sdf.format(date); + parameters.put("timeUnits", timeUnits); List<Map<String, Object>> values = historyMapper.getValueByMacAndSize(parameters); JSONObject map = null; if (!ObjectUtils.isEmpty(values)) { @@ -289,6 +315,10 @@ ValidateUtil.notNull(parameters.get("mac"), "param.is.null"); ValidateUtil.notNull(parameters.get("size"), "param.is.null"); parameters.put("size", Integer.valueOf(parameters.remove("size").toString())); + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String timeUnits = sdf.format(date); + parameters.put("timeUnits", timeUnits); List<Map<String, Object>> values = historyMapper.getValueByMacAndSize(parameters); Map<String, Object> sensorUnits = getSensorUnitByDeviceMac(parameters); for (Map<String, Object> value : values) { @@ -331,6 +361,9 @@ parameters.put("end", end); parameters.put("sensorKeys", Arrays.asList(((String) sensorKey).split(","))); accountService.setOrgIdsByAccount(parameters); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMdd"); + //���history������������������ + parameters.put("timeUnits", df.format(start)); Map<String, Object> result = historyMapper.getActualDataByRegion(parameters); if (ObjectUtils.isEmpty(result)) { result = new HashMap<String, Object>(); @@ -350,7 +383,6 @@ resultMap.put(map.remove("sensor_key").toString(), map); } return resultMap; - } @Override @@ -370,7 +402,9 @@ int startHour = endHour - 1; startTime = localDate + " " + startHour + ":00:00"; } - Map<String, Object> map = historyMapper.getAVGValueByMacAndTimeslot(mac, startTime, endTime); + //���������history������������������ + String timeUnits = startTime.substring(0, 10).replace("-", ""); + Map<String, Object> map = historyMapper.getAVGValueByMacAndTimeslot(mac, startTime, endTime, timeUnits); Map<String, Object> returnMap = new HashMap<>(); if (map.isEmpty()) { returnMap.put("AQI", "N/V"); @@ -378,12 +412,15 @@ Map<String, Double> AQIMap = new HashMap<>(); for (Map.Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); - Double value = Double.parseDouble(entry.getValue().toString()); - AQIMap.put(key, value); + if (entry.getValue() != null) { + Double value = Double.parseDouble(entry.getValue().toString()); + AQIMap.put(key, value); + } } returnMap = AQICalculation.hourlyAQI(AQIMap); } - + long aqi = Math.round(Double.valueOf(returnMap.get("AQI").toString())); + returnMap.put("AQI", aqi); return returnMap; } @@ -433,10 +470,31 @@ Date end = rightNow.getTime(); String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(end); String before5Time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(beforeD); // ������������������ - String sensor = parameters.get("sensor").toString(); - List<Map<String, Object>> result = historyMapper.getAVGSensorRankByMonitorPointIdList(sensor, monitorPointIdList, before5Time, endTime); - return result; + String timeUnits1 = before5Time.substring(0, 10).replace("-", ""); + List<Map<String, Object>> result1 = historyMapper.getAVGSensorRankByMonitorPointIdList(sensor, monitorPointIdList, before5Time, endTime, timeUnits1); + String timeUnits2 = before5Time.substring(0, 10).replace("-", ""); + List<Map<String, Object>> result2 = historyMapper.getAVGSensorRankByMonitorPointIdList(sensor, monitorPointIdList, before5Time, endTime, timeUnits2); + if (result1.isEmpty()) { + return result2; + } else if (result2.isEmpty()) { + return result1; + } else { + for (Map<String, Object> map1 : result1) { + Object name1 = map1.get("name"); + double value1 = Double.parseDouble(map1.get("sensor").toString()); + double avg = 0.0; + for (Map<String, Object> map2 : result2) { + Object name2 = map2.get("name"); + double value2 = Double.parseDouble(map2.get("sensor").toString()); + if (name1.equals(name2)) { + avg = (value1 + value2) / 2; + map1.put("sensor", avg); + } + } + } + } + return result1; } @Override @@ -456,7 +514,10 @@ int startHour = endHour - 1; startTime = localDate + " " + startHour + ":00:00"; } - Map<String, Object> map = historyMapper.getMonitorPointAVGValueByMonitorPointIdAndTimeslot(monitor_point_id, startTime, endTime); + //���������history������������������ + String timeUnits = startTime.substring(0, 10).replace("-", ""); + + Map<String, Object> map = historyMapper.getMonitorPointAVGValueByMonitorPointIdAndTimeslot(monitor_point_id, startTime, endTime, timeUnits); Map<String, Object> returnMap = new HashMap<>(); if (map.isEmpty()) { returnMap.put("AQI", "N/V"); @@ -491,20 +552,20 @@ } parameters.put("sensorKeys", sensorKeys); List<Map<String, Object>> listMap = null; - if (today.compareTo(startTimeDay) == 0) { + /*if (today.compareTo(startTimeDay) == 0) { listMap = historyMapper.listGetSensorData(parameters); - } + }*/ + //if (CollectionUtils.isEmpty(listMap)) { + listMap = historyMapper.getCarSensorData(parameters); if (CollectionUtils.isEmpty(listMap)) { - listMap = historyMapper.getCarSensorData(parameters); - if (CollectionUtils.isEmpty(listMap)) { - if (year <= 2019) { - listMap = historyMinutelyMapper.getSensorData(parameters); - } else { - parameters.put("yearAndMonth", yearAndMonth); - listMap = historyMinutelyMapper.getSensorData2020(parameters); - } + 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<>(); @@ -520,7 +581,9 @@ for (Map.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().replace("\"", "")).stripTrailingZeros().toPlainString() + sensor.getUnit()); + if (entry.getValue() != null) { + mapAvg.put(entry.getKey(), new BigDecimal(entry.getValue().toString().replace("\"", "")).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())) { @@ -543,10 +606,36 @@ } @Override - public List<Map<String,Object>> getO3AVG(Map<String, Object> parameters) { - String mac= (String) parameters.get("mac"); - String stime= (String) parameters.get("time"); - SimpleDateFormat format=new SimpleDateFormat("yyyy-MM"); + public List<Map<String, Object>> getUavSensorData(Map<String, Object> parameters) { + 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>> uavSensorData = historyMapper.getUavSensorData(parameters); + for (Map<String, Object> dataMap : uavSensorData) { + for (Map.Entry<String, Object> entry : dataMap.entrySet()) { + for (Sensor sensor : sensors) { + if (sensor.getSensorKey().equals(entry.getKey())) { + if (entry.getValue() != null) { + dataMap.put(entry.getKey(), new BigDecimal(entry.getValue().toString().replace("\"", "")).stripTrailingZeros().toPlainString() + sensor.getUnit()); + } + } + } + } + } + Map<String, Object> map = sensorMapper.getSensorBySensorKey(parameters.get("sensorKey").toString()); + parameters.put("unit", map.get("unit")); + parameters.put("description", map.get("description")); + return uavSensorData; + } + + @Override + public List<Map<String, Object>> getO3AVG(Map<String, Object> parameters) { + String mac = (String) parameters.get("mac"); + String stime = (String) parameters.get("time"); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM"); Date time = null; try { time = format.parse(stime); @@ -554,74 +643,74 @@ e.printStackTrace(); } List<String> stringListDate = DatesUtil.getAllTheDateOftheMonth(time); - List<Map<String,Object>> maxList=new ArrayList<Map<String,Object>>(); + List<Map<String, Object>> maxList = new ArrayList<Map<String, Object>>(); for (String date : stringListDate) { - System.out.println("------------------------------------------------"); Map<String, Object> parm = new HashMap<String, Object>(); DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime time1 = LocalDateTime.parse(date + " 00:00:00", df); LocalDateTime time2 = time1.plusDays(1); String time3 = time2.toString().substring(0, 10); String nextDate = time3 + " 07:00:00"; - System.out.println("-----"+date); - System.out.println(nextDate); parm.put("date", date); parm.put("nextDate", nextDate); parm.put("mac", mac); List<Map<String, Object>> listMap = historyMapper.getO3AVG(parm); - System.out.println("size="+listMap.size()); - List list=new ArrayList(); - DatesUtil.getList(listMap,list); - List list1=new ArrayList(); - String maxO3=""; - for (int i = 0; i <list.size() ; i++) { - List elist=new ArrayList(); - List tlist=new ArrayList(); - Double sum=0.0; - Double avg=0.0; - for (Object o : (List)list.get(i)) { - Iterator<Map.Entry> iterator= ((Map)o).entrySet().iterator(); - while(iterator.hasNext()) { + List list = new ArrayList(); + DatesUtil.getList(listMap, list); + List list1 = new ArrayList(); + String maxO3 = ""; + for (int i = 0; i < list.size(); i++) { + List elist = new ArrayList(); + Double sum = 0.0; + Double avg = 0.0; + for (Object o : (List) list.get(i)) { + Iterator<Map.Entry> iterator = ((Map) o).entrySet().iterator(); + while (iterator.hasNext()) { Map.Entry entry = iterator.next(); - if (entry.getKey().equals("e15")){ + if (entry.getKey().equals("e15")) { elist.add(entry.getValue()); } } } - for (int j = 0; j <elist.size(); j++) { - sum+=Double.parseDouble((String) elist.get(j)); - if (listMap.size()<=8 && listMap.size()>0){ - avg=sum/listMap.size(); - }else { - avg=sum/8; + for (int j = 0; j < elist.size(); j++) { + sum += Double.parseDouble((String) elist.get(j)); + if (listMap.size() <= 8 && listMap.size() > 0) { + avg = sum / listMap.size(); + } else { + avg = sum / 8; } } - if (avg==0.0){ + if (avg == 0.0) { list1.add(""); - }else { + } else { BigDecimal b = new BigDecimal(avg); - double avg1 = b.setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue(); + double avg1 = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue(); list1.add(avg1); } } - System.out.println(list1); - - String timef=date+" 00:00:00"; - String timea=date+" 23:59:59"; - int num=historyMapper.getNum(timef,timea); - if (num==0) { + String timef = date + " 00:00:00"; + String timea = date + " 23:59:59"; + int num = historyMapper.getNum(timef, timea); + if (num == 0) { maxO3 = ""; - }else { - if (list1.size()!=0){ - maxO3= ""+ Collections.max(list1); - }else { - maxO3=""; - }} - Map<String,Object> avgMap=new HashMap<String,Object>(); - avgMap.put("time",date); - avgMap.put("e15",maxO3); + } else { + if (list1.size() != 0) { + maxO3 = "" + Collections.max(list1); + } else { + maxO3 = ""; + } + } + Map<String, Object> avgMap = new HashMap<String, Object>(); + avgMap.put("time", date); + avgMap.put("e15", maxO3); maxList.add(avgMap); } return maxList; } + + @Override + public String getJsonData(String mac, String time, String table) { + return historyMapper.getJsonData(mac, time, table); + } + } -- Gitblit v1.8.0