From f8bfd26b5ca75f439c74ecc1a830ccfbdcc11b63 Mon Sep 17 00:00:00 2001
From: cjl <276999030@qq.com>
Date: Mon, 24 Jul 2023 09:42:19 +0800
Subject: [PATCH] fix: 导出数据添加百分位

---
 screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java |   24 ++++++++++++++++++++++--
 1 files changed, 22 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..6ff2255 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,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();
+    }
+
 }
 
 

--
Gitblit v1.8.0