From eaadd850bf0b3a6b3d598fb63c4e87b14fba2663 Mon Sep 17 00:00:00 2001
From: cjl <276999030@qq.com>
Date: Fri, 11 Aug 2023 16:51:22 +0800
Subject: [PATCH] improvement:臭氧预测修改

---
 screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java |   22 ++++++++++++++++++++--
 1 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java
index e0df6e8..8a068b7 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java
@@ -414,8 +414,14 @@
                     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))),90d);
+                        }else if(son.contains("������������")){
+                            rsAvg = percentile(listMap.get(numCount+"_"+sensorMap.get(sensorsList.get(z))),95d);
+                        }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 +532,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();
+    }
+
 }
 
 

--
Gitblit v1.8.0