jinpengyong
2021-07-01 fdc8e1e781851904b05f234523f372c8c1098b69
screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
@@ -11,6 +11,7 @@
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;
@@ -46,10 +47,8 @@
    @Autowired
    private HistoryHourlyService historyHourlyService;
    @Override
    public void insertHistoryDaily() {
        String format = DateUtils.yyyy_MM_dd_EN;
        Date now = new Date();
        //开始时间
@@ -82,14 +81,20 @@
            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 -> {
@@ -104,41 +109,19 @@
                            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<>();
@@ -148,7 +131,7 @@
        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);
@@ -165,7 +148,7 @@
        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;