| | |
| | | import com.moral.api.service.HistoryHourlyService; |
| | | import com.moral.api.service.SensorService; |
| | | import com.moral.constant.Constants; |
| | | import com.moral.util.AmendUtils; |
| | | import com.moral.util.DateUtils; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | @Autowired |
| | | private HistoryHourlyService historyHourlyService; |
| | | |
| | | |
| | | @Override |
| | | public void insertHistoryDaily() { |
| | | |
| | | String format = DateUtils.yyyy_MM_dd_EN; |
| | | Date now = new Date(); |
| | | //开始时间 |
| | |
| | | List<Map<String, Object>> tempValue = new ArrayList<>(value); |
| | | |
| | | value.removeIf(map -> ((Date) map.get("time")).getTime() == start.getTime()); |
| | | //臭氧8小时滑动值 |
| | | double o3AvgOfDay = getO3AvgOfDay(value); |
| | | //臭氧8小时滑动平均值计算并修约 |
| | | Object o3AvgOfDay = AmendUtils.getO3AvgOfDay(value); |
| | | if (o3AvgOfDay != null) { |
| | | jsonMap.put(Constants.SENSOR_CODE_O3, o3AvgOfDay); |
| | | System.out.println("臭氧==" + value); |
| | | |
| | | //除臭氧外日均值计算 |
| | | } |
| | | //除臭氧外其他因子均值计算 |
| | | tempValue.removeIf(map -> ((Date) map.get("time")).getTime() == end.getTime()); |
| | | System.out.println("其他因子==" + tempValue); |
| | | |
| | | //风向均值计算并修约 |
| | | Object windDirAvg = AmendUtils.getWindDirAvg(value); |
| | | if (windDirAvg != null) { |
| | | jsonMap.put(Constants.SENSOR_CODE_WIND_DIR, windDirAvg); |
| | | } |
| | | |
| | | sensorCodes.forEach(sensorCode -> { |
| | | OptionalDouble optionalDouble = tempValue.parallelStream() |
| | | .flatMapToDouble(v -> { |
| | |
| | | return DoubleStream.of(Double.parseDouble(sensorValue.toString())); |
| | | }).average(); |
| | | if (optionalDouble.isPresent()) { |
| | | jsonMap.put(sensorCode.toString(), Double.parseDouble(String.format("%.4f", optionalDouble.getAsDouble()))); |
| | | //银行家算法修约 |
| | | double sciCal = AmendUtils.sciCal(optionalDouble.getAsDouble(), 4); |
| | | jsonMap.put(sensorCode.toString(), sciCal); |
| | | } |
| | | }); |
| | | dataMap.put("value", JSONObject.toJSONString(jsonMap)); |
| | | insertData.add(dataMap); |
| | | }); |
| | | |
| | | //臭氧8小时滑动值 |
| | | System.out.println(insertData); |
| | | //存入数据库 |
| | | historyDailyMapper.insertHistoryDaily(insertData); |
| | | } |
| | | |
| | | //臭氧8小时滑动值 |
| | | private double getO3AvgOfDay(List<Map<String, Object>> list) { |
| | | double max = 0d; |
| | | for (int i = 8; i <= 24; i++) { |
| | | List<Double> data = new ArrayList<>(); |
| | | for (Map<String, Object> dataMap : list) { |
| | | Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); |
| | | Double o3 = Double.parseDouble(dataValue.get(Constants.SENSOR_CODE_O3).toString()); |
| | | int hour = DateUtils.getHour((Date) dataMap.get("time")); |
| | | if (hour == 0) { |
| | | hour = 24; |
| | | } |
| | | if (hour <= i && hour >= i - 7) { |
| | | data.add(o3); |
| | | } |
| | | } |
| | | double average = data.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage(); |
| | | if (max < average) { |
| | | max = average; |
| | | } |
| | | } |
| | | return Double.parseDouble(String.format("%.4f", max)); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | List<Integer> list = new ArrayList<>(); |
| | |
| | | list.add(18);//4 |
| | | list.add(16);//5 |
| | | list.add(22);//6 |
| | | list.add(4);//8 |
| | | list.add(4);//7 |
| | | list.add(12); |
| | | list.add(28); |
| | | list.add(26); |
| | |
| | | list.add(12); |
| | | list.add(10); |
| | | list.add(5); |
| | | list.add(88); |
| | | list.add(88);//24 |
| | | Integer max = 0; |
| | | for (int i = 7; i < list.size(); i++) { |
| | | Integer sum = 0; |