cjl
2023-07-24 f8bfd26b5ca75f439c74ecc1a830ccfbdcc11b63
screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java
@@ -414,8 +414,16 @@
                    double rsAvg = 0L;
                    String son = numCount+"_"+sensorMap.get(sensorsList.get(z));
                    if(listMap.containsKey(numCount+"_"+sensorMap.get(sensorsList.get(z)))){
                        Double ListAvg = listMap.get(numCount+"_"+sensorMap.get(sensorsList.get(z))).stream().collect(Collectors.averagingDouble(Double::doubleValue));
                        rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
                        if(son.contains("臭氧")){
                            rsAvg = percentile(listMap.get(numCount+"_"+sensorMap.get(sensorsList.get(z))),95d);
                        }else if(son.contains("一氧化碳")){
                            rsAvg = percentile(listMap.get(numCount+"_"+sensorMap.get(sensorsList.get(z))),90d);
                        }else {
                            Double ListAvg = listMap.get(numCount+"_"+sensorMap.get(sensorsList.get(z))).stream().collect(Collectors.averagingDouble(Double::doubleValue));
                            rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
                        }
                    }
                    timeValueMap.put(sensorMap.get(sensorsList.get(z)),rsAvg);
                }
@@ -526,6 +534,18 @@
        monitorPointMapper.selectList(monitorPointQueryWrapper).forEach(it->map.put(it.getId(),it.getName()));
        return map;
    }
    private Double percentile(List<Double> date,double num){
        Collections.sort(date);
        double position = (num / 100) * (date.size() - 1);
        int index = (int) position;
        // 获取小数部分的位置索引
        double fraction = position - index;
        // 获取百分位值
        double percentileValue = date.get(index) + fraction * (date.get(index + 1) - date.get(index));
        return new BigDecimal(percentileValue).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}