From 7a5dc31374b644b3c8695ddbc612af4d060b3060 Mon Sep 17 00:00:00 2001
From: cjl <909710561@qq.com>
Date: Wed, 09 Sep 2026 16:21:43 +0800
Subject: [PATCH] fix:补充

---
 screen-api/src/main/java/com/moral/api/service/impl/HistorySecondRadarServiceImpl.java |   77 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 75 insertions(+), 2 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondRadarServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondRadarServiceImpl.java
index 4c89ce1..fa97b36 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondRadarServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistorySecondRadarServiceImpl.java
@@ -12,6 +12,8 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -29,10 +31,31 @@
     private static final double HEIGHT_INTERVAL = 7.5;
     @Override
     public RadarListVo radarList(RadarListCond cond) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime timeStart = LocalDateTime.parse(cond.getStartTime(), formatter);
+        // 2.������������������0���������������������
+        LocalDateTime resultTime = timeStart.withSecond(0).withNano(0);
+        // 3.���������������
+        cond.setStartTime(resultTime.format(formatter));
         RadarListVo radarListVo = new RadarListVo();
         List<String> time = new ArrayList<>();
-        List<HistorySecondRadarListVo> list = this.baseMapper.listRadar(cond);
         List<List<double[]>> pm25 = new ArrayList<>();
+        List<List<double[]>> pm10 = new ArrayList<>();
+        List<String> highList = buildHighList(cond.getHigh2());
+        List<String> highList1 = buildHighList(cond.getHigh1());
+        List<HistorySecondRadarListVo> list = this.baseMapper.listRadar(cond);
+        for (HistorySecondRadarListVo row : list) {
+            time.add(row.getTimeStr());
+            double[] pm25Values = parseValues(row.getRadarData(), "a34004-Avg");
+            double[] pm10Values = parseValues(row.getRadarData(), "a34002-Avg");
+            pm25.add(buildPointList(pm25Values, highList.size(),highList1.size()));
+            pm10.add(buildPointList(pm10Values, highList.size(),highList1.size()));
+        }
+        radarListVo.setPm25(pm25);
+        radarListVo.setTime(time);
+        radarListVo.setPm10(pm10);
+
+       /* List<List<double[]>> pm25 = new ArrayList<>();
         List<List<double[]>> pm10 = new ArrayList<>();
         for(HistorySecondRadarListVo ot : list){
             pm10.add(convertSingleRecordToJson(ot.getRadarDataPm10(),cond.getHigh1(),cond.getHigh2()));
@@ -41,10 +64,60 @@
         }
         radarListVo.setPm25(pm25);
         radarListVo.setTime(time);
-        radarListVo.setPm10(pm10);
+        radarListVo.setPm10(pm10);*/
         return radarListVo;
     }
+    private static List<double[]> buildPointList(double[] values, int pointCount, int minPointCount) {
+        List<double[]> pointList = new ArrayList<double[]>(pointCount);
+        int count = Math.min(pointCount, values.length);
+        int minCount = Math.min(minPointCount, values.length);
+        for (int i = minCount; i < count; i++) {
+            double height = i * HEIGHT_INTERVAL;
+            pointList.add(new double[]{values[i],height});
+        }
+        return pointList;
+    }
+    private static List<String> buildHighList(int MAX_HEIGHT) {
+        List<String> highList = new ArrayList<String>();
+        int count = (int) (MAX_HEIGHT / HEIGHT_INTERVAL) + 1;
+        for (int i = 0; i < count; i++) {
+            highList.add(formatHeight(i * HEIGHT_INTERVAL));
+        }
+        return highList;
+    }
+    private static double[] parseValues(String json, String key) {
+        if (json == null) {
+            return new double[0];
+        }
 
+        String keyToken = "\"" + key + "\":";
+        int keyIndex = json.indexOf(keyToken);
+        if (keyIndex < 0) {
+            return new double[0];
+        }
+
+        int bracketStart = json.indexOf('[', keyIndex + keyToken.length());
+        int bracketEnd = json.indexOf(']', bracketStart + 1);
+        if (bracketStart < 0 || bracketEnd < 0 || bracketEnd - bracketStart <= 1) {
+            return new double[0];
+        }
+
+        String body = json.substring(bracketStart + 1, bracketEnd).trim();
+        if (body.isEmpty()) {
+            return new double[0];
+        }
+
+        String[] parts = body.split(",");
+        double[] values = new double[parts.length];
+        for (int i = 0; i < parts.length; i++) {
+            values[i] = Double.parseDouble(parts[i].trim());
+        }
+        return values;
+    }
+
+    private static String formatHeight(double height) {
+        return BigDecimal.valueOf(height).stripTrailingZeros().toPlainString();
+    }
     private List<double[]> convertSingleRecordToJson(String rawData,int high1,int high2){
         if (rawData == null || rawData.isEmpty()) {
             return new ArrayList<>();

--
Gitblit v1.8.0