From 084fcff73e6858862544c3901361adfe5742016c Mon Sep 17 00:00:00 2001
From: cjl <909710561@qq.com>
Date: Wed, 09 Sep 2026 15:32:15 +0800
Subject: [PATCH] fix:雷达调整

---
 screen-job/src/main/java/com/moral/api/vo/RadarHourlySummaryVO.java                    |   64 +++++++++
 screen-job/src/main/java/com/moral/api/controller/RadarProcessController.java          |   50 ++++++
 screen-job/src/main/java/com/moral/api/service/impl/RadarHourlySummaryServiceImpl.java |   62 ++++++++
 screen-job/src/main/java/com/moral/api/vo/HourlyItemVO.java                            |   22 +++
 screen-job/src/main/java/com/moral/api/vo/DailyDropHeightVO.java                       |   20 ++
 screen-job/src/main/java/com/moral/api/vo/HourlyResponse.java                          |   31 ++++
 screen-job/src/main/resources/mapper/RadarHourlySummaryMapper.xml                      |   28 ++++
 screen-job/src/main/java/com/moral/api/controller/PubController.java                   |   12 
 screen-job/src/main/java/com/moral/api/service/RadarHourlySummaryService.java          |   18 ++
 screen-job/src/main/java/com/moral/api/mapper/RadarHourlySummaryMapper.java            |   36 +++++
 screen-job/src/main/java/com/moral/api/vo/ComparisonResponse.java                      |   31 ++++
 11 files changed, 365 insertions(+), 9 deletions(-)

diff --git a/screen-job/src/main/java/com/moral/api/controller/PubController.java b/screen-job/src/main/java/com/moral/api/controller/PubController.java
index cb46262..d789a08 100644
--- a/screen-job/src/main/java/com/moral/api/controller/PubController.java
+++ b/screen-job/src/main/java/com/moral/api/controller/PubController.java
@@ -175,18 +175,18 @@
 
     @GetMapping("secondCruiserSort")
     @ApiOperation(value = "���������������", notes = "���������������")
-    public ResultMessage secondCruiserSort() {
-        String startTime ="2024-11-13 00:00:00";
-        String endTime ="2024-11-14 00:00:00";
+    public ResultMessage secondCruiserSort(String time) {
+         String startTime = time+" 00:08:01";
+         String endTime = time+" 23:23:00";
         historySecondCruiserService.sort(startTime,endTime);
         return new ResultMessage();
     }
 
     @GetMapping("insertCoordinateDetail")
     @ApiOperation(value = "������������", notes = "������������")
-    public ResultMessage insertCoordinateDetail() {
-        String startTime ="2024-06-06 00:07:01";
-        String endTime ="2024-06-06 23:07:01";
+    public ResultMessage insertCoordinateDetail(String startTime,String endTime) {
+        startTime = startTime+" 00:08:01";
+        endTime = endTime+" 23:23:00";
         manageCoordinateDetailService.insertCoordinateDetail(startTime,endTime);
         return new ResultMessage();
     }
diff --git a/screen-job/src/main/java/com/moral/api/controller/RadarProcessController.java b/screen-job/src/main/java/com/moral/api/controller/RadarProcessController.java
index bb8e51f..b3266fb 100644
--- a/screen-job/src/main/java/com/moral/api/controller/RadarProcessController.java
+++ b/screen-job/src/main/java/com/moral/api/controller/RadarProcessController.java
@@ -1,8 +1,12 @@
 package com.moral.api.controller;
 
 import com.moral.api.service.RadarHourlySummaryService;
+import com.moral.api.vo.ComparisonResponse;
+import com.moral.api.vo.HourlyResponse;
 import com.moral.constant.ResultMessage;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -46,8 +50,8 @@
      */
     @GetMapping("/process")
     public ResultMessage processHour() {
-        String startStr = "2026-05-31 23:00:00";
-        String endStr = "2026-09-08 14:00:00";
+        String startStr = "2026-09-08 14:00:00";
+        String endStr = "2026-09-09 13:00:00";
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         LocalDateTime startTime = LocalDateTime.parse(startStr, formatter);
         LocalDateTime endTime = LocalDateTime.parse(endStr, formatter);
@@ -68,4 +72,46 @@
         hourlySummaryService.processHour(startStr);
         return new ResultMessage();
     }
+
+    /**
+     * ���������������������������
+     * GET /radar/comparison?location=������&amp;time=2026-09-09 09:00:00
+     *
+     * @param location ������������
+     * @param time     ������������������������������������ current
+     */
+    @GetMapping("/comparison")
+    @ApiOperation("���������������������������")
+    public ResultMessage getComparison(@RequestParam @ApiParam(value = "location",name = "������") String location,
+                                            @RequestParam @ApiParam(value = "time",name = "������ yyyy-MM-dd HH:mm:ss") String time) {
+        if(!location.equals("������")){
+            return ResultMessage.ok("���������������������������");
+        }
+        ComparisonResponse comparisonResponse = hourlySummaryService.getComparison(location, time);
+
+        return ResultMessage.ok(comparisonResponse);
+    }
+
+    /**
+     * ���������������������������������������������������
+     * GET /radar/hourly?location=������&amp;startTime=2026-09-04 09:00:00&amp;endTime=2026-09-09 09:00:00
+     *
+     * @param location  ������������
+     * @param startTime ������������������������
+     * @param endTime   ���������������������������
+     */
+    @GetMapping("/hourly")
+    @ApiOperation("���������5���������������������������")
+    public ResultMessage getHourly5Days(@RequestParam  @ApiParam(value = "location",name = "������")  String location,
+                                         @RequestParam  @ApiParam(value = "startTime",name = "������������")  String startTime,
+                                         @RequestParam  @ApiParam(value = "endTime",name = "������������")  String endTime) {
+        if(!location.equals("������")){
+            return ResultMessage.ok("���������������������������");
+        }
+
+        HourlyResponse getHourly5Days =  hourlySummaryService.getHourly5Days(location, startTime, endTime);
+
+        return ResultMessage.ok(getHourly5Days);
+    }
+
 }
diff --git a/screen-job/src/main/java/com/moral/api/mapper/RadarHourlySummaryMapper.java b/screen-job/src/main/java/com/moral/api/mapper/RadarHourlySummaryMapper.java
index 7317c90..e2acbc2 100644
--- a/screen-job/src/main/java/com/moral/api/mapper/RadarHourlySummaryMapper.java
+++ b/screen-job/src/main/java/com/moral/api/mapper/RadarHourlySummaryMapper.java
@@ -2,6 +2,11 @@
 
 import com.moral.api.entity.RadarHourlySummary;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.moral.api.vo.DailyDropHeightVO;
+import com.moral.api.vo.RadarHourlySummaryVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -15,10 +20,39 @@
 
 
 
+    /**
+     * ��������������������� a34004_drop_height ������������
+     *
+     * @param start ������������������������
+     * @param end   ���������������������������
+     */
+
+    Double getAvgDropHeightInRange(@Param("start") String start, @Param("end") String end);
 
     /**
-     * ���������������������������������������
+     * ��������������������������� a34004_drop_height ���������������������������
+     *
+     * @param start ������������������������
+     * @param end   ���������������������������
      */
+    List<DailyDropHeightVO> getDailyAvgDropHeight(@Param("start") String start, @Param("end") String end);
+
+
+    /**
+     * ������������������������������������������
+     *
+     * @param time ��������������������� yyyy-MM-dd HH:mm:ss
+     */
+    RadarHourlySummaryVO getByTime(@Param("time") String time);
+
+    /**
+     * ���������������������������������������������������
+     *
+     * @param start ������������������������
+     * @param end   ���������������������������
+     */
+
+    List<RadarHourlySummaryVO> queryHourlyByRange(@Param("start") String start, @Param("end") String end);
 
 
 }
diff --git a/screen-job/src/main/java/com/moral/api/service/RadarHourlySummaryService.java b/screen-job/src/main/java/com/moral/api/service/RadarHourlySummaryService.java
index 7e3f432..355e833 100644
--- a/screen-job/src/main/java/com/moral/api/service/RadarHourlySummaryService.java
+++ b/screen-job/src/main/java/com/moral/api/service/RadarHourlySummaryService.java
@@ -2,6 +2,8 @@
 
 import com.moral.api.entity.RadarHourlySummary;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.vo.ComparisonResponse;
+import com.moral.api.vo.HourlyResponse;
 
 /**
  * <p>
@@ -24,4 +26,20 @@
      */
     void processLastHour();
 
+    /**
+     * ���������������������30���������������
+     *
+     * @param location ������������"������"
+     * @param time     ������������������"2026-09-09 09:00:00"���������������������8:00��������� current
+     */
+    ComparisonResponse getComparison(String location, String time);
+
+    /**
+     * ���������������������������������������������������
+     *
+     * @param location  ������
+     * @param startTime ������������������������
+     * @param endTime   ���������������������������
+     */
+    HourlyResponse getHourly5Days(String location, String startTime, String endTime);
 }
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/RadarHourlySummaryServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/RadarHourlySummaryServiceImpl.java
index d438529..e873cac 100644
--- a/screen-job/src/main/java/com/moral/api/service/impl/RadarHourlySummaryServiceImpl.java
+++ b/screen-job/src/main/java/com/moral/api/service/impl/RadarHourlySummaryServiceImpl.java
@@ -5,6 +5,8 @@
 import com.moral.api.service.HistorySecondRadarService;
 import com.moral.api.service.RadarHourlySummaryService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.vo.*;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -34,6 +36,7 @@
     private static final int PEAK_SEARCH_LIMIT = 200;
 
     private static final DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00");
+    private static final DateTimeFormatter DT_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
 
 
@@ -45,6 +48,65 @@
     }
 
     @Override
+    public ComparisonResponse getComparison(String location, String time) {
+        // ������������ ��� ��������������� = current ������
+        LocalDateTime inputTime = LocalDateTime.parse(time, DT_FMT);
+        LocalDateTime prevHour = inputTime.minusHours(1).withMinute(0).withSecond(0).withNano(0);
+        String currentTime = prevHour.format(DT_FMT);
+
+        // 30 ������������currentTime��������������������� 30 ���
+        String endStr = currentTime;
+        String startStr = prevHour.minusDays(30).format(DT_FMT);
+
+        ComparisonResponse resp = new ComparisonResponse();
+        resp.setLocation(location);
+        resp.setTime(time);
+
+        // current: ������������������ a34004_drop_height
+        RadarHourlySummaryVO cur = this.baseMapper.getByTime(currentTime);
+        resp.setCurrent(cur != null && cur.getA34004DropHeight() != null ? cur.getA34004DropHeight().doubleValue() : 0.0);
+
+        // avg30: 720 ������������
+        Double avg = this.baseMapper.getAvgDropHeightInRange(startStr, endStr);
+        resp.setAvg30(avg != null ? avg : 0.0);
+
+        // daily30: ���������������������������
+        List<DailyDropHeightVO> rows = this.baseMapper.getDailyAvgDropHeight(startStr, endStr);
+        if(CollectionUtils.isEmpty(rows)){
+            List<DailyDropHeightVO> daily = new ArrayList<>();
+            String todayStr = prevHour.toLocalDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            DailyDropHeightVO dropHeightVO  = new DailyDropHeightVO();
+            dropHeightVO.setDate(todayStr);
+            dropHeightVO.setDropHeight(0d);
+            daily.add(dropHeightVO);
+            resp.setDaily30(daily);
+        }else {
+            resp.setDaily30(rows);
+        }
+        return resp;
+    }
+
+    @Override
+    public HourlyResponse getHourly5Days(String location, String startTime, String endTime) {
+        HourlyResponse resp = new HourlyResponse();
+        resp.setLocation(location);
+        resp.setStartTime(startTime);
+        resp.setEndTime(endTime);
+
+        List<RadarHourlySummaryVO> list = this.baseMapper.queryHourlyByRange(startTime, endTime);
+        List<HourlyItemVO> items = new ArrayList<>();
+        for (RadarHourlySummaryVO s : list) {
+            HourlyItemVO item = new HourlyItemVO();
+            item.setTime(s.getTimeStr());
+            item.setA34004DropHeight(s.getA34004DropHeight().doubleValue());
+            items.add(item);
+        }
+        resp.setCount(items.size());
+        resp.setHourly(items);
+        return resp;
+    }
+
+    @Override
     public void processHour(String hourStart) {
         String hourEnd = nextHour(hourStart);
         List<String> rawList = radarService.queryRawDataByHour(hourStart, hourEnd);
diff --git a/screen-job/src/main/java/com/moral/api/vo/ComparisonResponse.java b/screen-job/src/main/java/com/moral/api/vo/ComparisonResponse.java
new file mode 100644
index 0000000..7d432a6
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/vo/ComparisonResponse.java
@@ -0,0 +1,31 @@
+package com.moral.api.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * /radar/comparison ������������������
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ComparisonResponse {
+
+    /** ������������������"������" */
+    private String location;
+
+    /** ������������������������������ */
+    private String time;
+
+    /** ��������������������� a34004_drop_height */
+    private Double current;
+
+    /** ���30������720���������a34004_drop_height ��������� */
+    private Double avg30;
+
+    /** ���30������������������������������ */
+    private List<DailyDropHeightVO> daily30;
+
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/vo/DailyDropHeightVO.java b/screen-job/src/main/java/com/moral/api/vo/DailyDropHeightVO.java
new file mode 100644
index 0000000..f4b7648
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/vo/DailyDropHeightVO.java
@@ -0,0 +1,20 @@
+package com.moral.api.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * daily30 ���������������������
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DailyDropHeightVO {
+
+    /** ��������������� yyyy-MM-dd */
+    private String date;
+
+    /** ������ a34004_drop_height ��������� */
+    private Double dropHeight;
+
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/vo/HourlyItemVO.java b/screen-job/src/main/java/com/moral/api/vo/HourlyItemVO.java
new file mode 100644
index 0000000..c46268d
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/vo/HourlyItemVO.java
@@ -0,0 +1,22 @@
+package com.moral.api.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * /radar/hourly ������������������������������
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HourlyItemVO {
+
+    /** ��������������������� yyyy-MM-dd HH:mm:ss */
+    private String time;
+
+
+    /** a34004-Avg ������������������/���������(m) */
+    private Double a34004DropHeight;
+
+
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/vo/HourlyResponse.java b/screen-job/src/main/java/com/moral/api/vo/HourlyResponse.java
new file mode 100644
index 0000000..f1c5899
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/vo/HourlyResponse.java
@@ -0,0 +1,31 @@
+package com.moral.api.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * /radar/hourly ������������������
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HourlyResponse {
+
+    /** ������������������"������" */
+    private String location;
+
+    /** ������������������ */
+    private String startTime;
+
+    /** ��������������������������������� */
+    private String endTime;
+
+    /** ������������ */
+    private int count;
+
+    /** ��������������������� */
+    private List<HourlyItemVO> hourly;
+
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/vo/RadarHourlySummaryVO.java b/screen-job/src/main/java/com/moral/api/vo/RadarHourlySummaryVO.java
new file mode 100644
index 0000000..96b20e4
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/vo/RadarHourlySummaryVO.java
@@ -0,0 +1,64 @@
+package com.moral.api.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * ���������������������
+ * </p>
+ *
+ * @author moral
+ * @since 2026-09-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class RadarHourlySummaryVO {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * ������������������������������
+     */
+    private String timeStr;
+
+    /**
+     * ������������������ {"a34004-Avg": [...], "a34002-Avg": [...]}
+     */
+    private String radarData;
+
+    /**
+     * a34004-Avg ���������������������(m)
+     */
+    private BigDecimal a34004PeakHeight;
+
+    /**
+     * a34004-Avg ������������������(m)���������������
+     */
+    private BigDecimal a34004DropHeight;
+
+    /**
+     * a34002-Avg ���������������������(m)
+     */
+    private BigDecimal a34002PeakHeight;
+
+    /**
+     * a34002-Avg ������������������(m)���������������
+     */
+    private BigDecimal a34002DropHeight;
+
+    private String createTime;
+
+
+
+}
diff --git a/screen-job/src/main/resources/mapper/RadarHourlySummaryMapper.xml b/screen-job/src/main/resources/mapper/RadarHourlySummaryMapper.xml
index ae5ccec..d5901da 100644
--- a/screen-job/src/main/resources/mapper/RadarHourlySummaryMapper.xml
+++ b/screen-job/src/main/resources/mapper/RadarHourlySummaryMapper.xml
@@ -13,5 +13,33 @@
                     <result column="a34002_drop_height" property="a34002DropHeight" />
                     <result column="create_time" property="createTime" />
         </resultMap>
+    <select id="getAvgDropHeightInRange" resultType="java.lang.Double">
+        SELECT COALESCE(ROUND(AVG(a34004_drop_height)), 0) as a34004 FROM radar_hourly_summary
+         WHERE  time &gt;= #{start} AND time &lt; #{end}
+    </select>
+
+    <select id="getByTime" resultType="com.moral.api.vo.RadarHourlySummaryVO">
+        SELECT id, DATE_FORMAT(time, '%Y-%m-%d %H:%i:%s') timeStr, radar_data, a34004_peak_height, a34004_drop_height, a34002_peak_height, a34002_drop_height FROM radar_hourly_summary WHERE time = #{time}
+
+    </select>
+
+    <select id="getDailyAvgDropHeight" resultType="com.moral.api.vo.DailyDropHeightVO">
+        SELECT DATE_FORMAT(time, '%Y-%m-%d') as date, ROUND(AVG(a34004_drop_height)) AS dropHeight
+         FROM radar_hourly_summary
+        WHERE time &gt;= #{start} AND time &lt; #{end}
+         GROUP BY DATE(time) ORDER BY date ASC
+
+    </select>
+
+<select id="queryHourlyByRange" resultType="com.moral.api.vo.RadarHourlySummaryVO">
+    SELECT DATE_FORMAT(time, '%Y-%m-%d %H:%i:%s') timeStr, a34004_peak_height, a34004_drop_height,
+    a34002_peak_height, a34002_drop_height
+    FROM radar_hourly_summary
+    WHERE time &gt;= #{start} AND time &lt; #{end}
+     ORDER BY time ASC
+</select>
+
+
+
 
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0