| | |
| | | Object lower = params.get("o3Lower"); |
| | | double max; |
| | | List<Double> avgs = new ArrayList<>(); |
| | | for (int i = 8; i <= 24; i++) { |
| | | for (int i = 7; i <= 23; i++) { |
| | | List<Double> data = new ArrayList<>(); |
| | | for (Map<String, Object> dataMap : list) { |
| | | Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); |
| | |
| | | } |
| | | |
| | | int hour = DateUtils.getHour((Date) dataMap.get("time")); |
| | | if (hour == 0) { |
| | | hour = 24; |
| | | } |
| | | if (hour <= i && hour >= i - 7) { |
| | | data.add(o3); |
| | | } |
| | |
| | | * @return 功能:臭氧8小时滑动值计算 |
| | | */ |
| | | public static List<Map<String, Object>> getO3_8H(List<Map<String, Object>> data) { |
| | | Date time1 = null; |
| | | Date time2 = null; |
| | | for (Map<String, Object> datum : data) { |
| | | Date time = (Date) datum.get("time"); |
| | | if (DateUtils.getHour(time) == 0) { |
| | | time2 = DateUtils.getDate(DateUtils.dateToDateString(time, DateUtils.yyyy_MM_dd_EN)); |
| | | } else { |
| | | time1 = DateUtils.getDate(DateUtils.dateToDateString(time, DateUtils.yyyy_MM_dd_EN)); |
| | | } |
| | | } |
| | | |
| | | Date date = (Date) data.get(0).get("time"); |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (int i = 8; i <= 24; i++) { |
| | | for (int i = 7; i <= 23; i++) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | if (i < 24) { |
| | | map.put("time", ObjectUtils.isEmpty(time1) ? null : DateUtils.addHours(time1, i)); |
| | | } else { |
| | | map.put("time", ObjectUtils.isEmpty(time2) ? null : time2); |
| | | } |
| | | map.put("time", DateUtils.addHours(date, i)); |
| | | List<Double> value = new ArrayList<>(); |
| | | for (Map<String, Object> dataMap : data) { |
| | | Map<String, Object> sensorValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); |
| | | Double o3 = Double.parseDouble(sensorValue.get("O3").toString()); |
| | | Date time = (Date) dataMap.get("time"); |
| | | int hour = DateUtils.getHour(time); |
| | | if (hour == 0) { |
| | | hour = 24; |
| | | } |
| | | if (hour <= i && hour >= i - 7) { |
| | | value.add(o3); |
| | | } |
| | |
| | | QueryWrapper<CityAqi> wrapper = new QueryWrapper<>(); |
| | | wrapper.select("city_code", "time", "value") |
| | | .ge("time", DateUtils.dateToDateString(start)) |
| | | .le("time", DateUtils.dateToDateString(end)); |
| | | .lt("time", DateUtils.dateToDateString(end)); |
| | | List<Map<String, Object>> dailyData = cityAqiService.listMaps(wrapper); |
| | | |
| | | if (dailyData.size() == 0) { |
| | |
| | | CityAqiDaily cityAqiDaily = new CityAqiDaily(); |
| | | cityAqiDaily.setCityCode(Integer.parseInt(cityCode)); |
| | | cityAqiDaily.setTime(start); |
| | | |
| | | //中间变量,用于计算除臭氧外其它因子 |
| | | List<Map<String, Object>> tempValue = new ArrayList<>(value); |
| | | |
| | | //移除第一天数据(0点的),O3滑动值第一条数据是从1点-8点 |
| | | value.removeIf(map -> ((Date) map.get("time")).getTime() == start.getTime()); |
| | | |
| | | //O3日均值单独计算,滑动值算法 |
| | | Double o3OfDay = AmendUtils.o3OfDay(value); |
| | | if (o3OfDay != null) { |
| | | jsonMap.put("O3", o3OfDay); |
| | | if (!ObjectUtils.isEmpty(value)) { |
| | | Double o3OfDay = AmendUtils.o3OfDay(value); |
| | | if (o3OfDay != null) { |
| | | jsonMap.put("O3", o3OfDay); |
| | | } |
| | | } |
| | | |
| | | //除臭氧外其他因子均值计算 |
| | | tempValue.removeIf(o -> ((Date) o.get("time")).getTime() == end.getTime()); |
| | | |
| | | sensors.forEach(sensor -> { |
| | | OptionalDouble optionalDouble = tempValue.parallelStream().flatMapToDouble(v -> { |
| | | OptionalDouble optionalDouble = value.parallelStream().flatMapToDouble(v -> { |
| | | Map<String, Object> dataValue = JSONObject.parseObject((String) v.get("value"), Map.class); |
| | | Object sensorValue = dataValue.get(sensor); |
| | | if (ObjectUtils.isEmpty(sensorValue)) { |
| | |
| | | Date time = DateUtils.dataToTimeStampTime(now, DateUtils.yyyy_MM_dd_HH_EN); |
| | | |
| | | Date start = null; |
| | | if (DateUtils.getHour(time) == 0 || DateUtils.getHour(time) >= 8) { |
| | | if (DateUtils.getHour(time) >= 7) { |
| | | start = DateUtils.addHours(time, -7); |
| | | } |
| | | |
| | |
| | | dataMap.put("mac", mac); |
| | | dataMap.put("time", start); |
| | | |
| | | //中间变量,用于计算除臭氧外其它因子 |
| | | List<Map<String, Object>> tempValue = new ArrayList<>(value); |
| | | |
| | | //移除第一天数据(0点的),O3滑动值第一条数据是从1点-8点 |
| | | value.removeIf(map -> ((Date) map.get("time")).getTime() == start.getTime()); |
| | | Map<String, Object> params = new HashMap<>(); |
| | | params.put("data", value); |
| | | params.put("type", "day"); |
| | |
| | | if (!ObjectUtils.isEmpty(o3AvgOfDay)) { |
| | | jsonMap.putAll(o3AvgOfDay); |
| | | } |
| | | //除臭氧外其他因子均值计算 |
| | | tempValue.removeIf(o -> ((Date) o.get("time")).getTime() == end.getTime()); |
| | | |
| | | //风向均值计算并修约 |
| | | params.put("data", tempValue); |
| | | |
| | | Map<String, Object> windDirAvg = AmendUtils.getWindDirAvg(params); |
| | | if (!ObjectUtils.isEmpty(windDirAvg)) { |
| | | jsonMap.putAll(windDirAvg); |
| | |
| | | String sensorCode = sensor.getCode(); |
| | | Double upper = sensor.getUpper(); |
| | | Double lower = sensor.getLower(); |
| | | OptionalDouble optionalDouble = tempValue.parallelStream() |
| | | OptionalDouble optionalDouble = value.parallelStream() |
| | | .flatMapToDouble(v -> { |
| | | Map<String, Object> dataValue = JSONObject.parseObject((String) v.get("value"), Map.class); |
| | | Object sensorValue = dataValue.get(sensorCode); |
| | |
| | | } |
| | | |
| | | } |
| | | //风向计算 |
| | | Map<String, Object> windDirAvg = AmendUtils.getWindDirAvg(params); |
| | | if (!ObjectUtils.isEmpty(windDirAvg)) { |
| | | jsonMap.putAll(windDirAvg); |
| | |
| | | } |
| | | |
| | | } |
| | | //风向计算 |
| | | Map<String, Object> windDirAvg = AmendUtils.getWindDirAvg(params); |
| | | if (!ObjectUtils.isEmpty(windDirAvg)) { |
| | | jsonMap.putAll(windDirAvg); |
| | |
| | | SELECT mac, `time`, `value` |
| | | FROM history_hourly_${timeUnits} |
| | | WHERE `time` <![CDATA[>=]]> #{start} |
| | | AND `time` <![CDATA[<=]]> #{end} |
| | | AND `time` <![CDATA[<]]> #{end} |
| | | </select> |
| | | </mapper> |