From 256aa4c5431733e5d166f583f03724cf69ddfaa4 Mon Sep 17 00:00:00 2001
From: cjl <909710561@qq.com>
Date: Thu, 14 May 2026 11:24:54 +0800
Subject: [PATCH] fix:添加雷达数据

---
 screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java        |    1 
 screen-common/src/main/java/com/moral/constant/KafkaConstants.java                        |    5 
 screen-manage/src/main/java/com/moral/api/mapper/HistorySecondRadarMapper.java            |   16 ++
 screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondRadarServiceImpl.java |   92 +++++++++++++++
 screen-manage/src/main/java/com/moral/api/entity/HistorySecondRadar.java                  |   66 +++++++++++
 screen-manage/src/main/java/com/moral/api/util/Method.java                                |   72 ++++++++++++
 screen-manage/src/main/resources/mapper/HistorySecondRadarMapper.xml                      |   16 ++
 screen-manage/src/main/java/com/moral/api/service/HistorySecondRadarService.java          |   18 +++
 screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java              |   25 ++++
 9 files changed, 311 insertions(+), 0 deletions(-)

diff --git a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
index 7ec3107..bd7901a 100644
--- a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
+++ b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
@@ -37,6 +37,11 @@
     * */
     public static final String CRUISER_TOPIC_HOUR = "cruiser_hour_data";
 
+    /*
+     * ������������������
+     * */
+    public static final String RADAR_SECOND= "radar_data";
+
     /**
      * ���������������������������
      */
diff --git a/screen-manage/src/main/java/com/moral/api/entity/HistorySecondRadar.java b/screen-manage/src/main/java/com/moral/api/entity/HistorySecondRadar.java
new file mode 100644
index 0000000..ec79c9e
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/entity/HistorySecondRadar.java
@@ -0,0 +1,66 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author moral
+ * @since 2026-05-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HistorySecondRadar extends Model<HistorySecondRadar> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ������ Date
+     */
+    private LocalDateTime time;
+
+    private LocalDateTime radarTime;
+
+    /**
+     * ������
+     */
+    private String radarData;
+
+    /**
+     * pm2.5���������
+     */
+    private String pm25;
+
+    /**
+     * pm2.5������������
+     */
+    private String highPm25;
+
+    /**
+     * pm10������
+     */
+    private String pm10;
+
+    /**
+     * pm10������
+     */
+    private String highPm10;
+
+    /**
+     * ���������
+     */
+    private String boundaryLayer;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return null;
+    }
+
+}
diff --git a/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java b/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java
index 886bc72..d466874 100644
--- a/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java
+++ b/screen-manage/src/main/java/com/moral/api/kafka/consumer/DeviceConsumer.java
@@ -1,7 +1,9 @@
 package com.moral.api.kafka.consumer;
 
 import com.alibaba.fastjson.JSON;
+import com.moral.api.entity.HistorySecondRadar;
 import com.moral.api.service.*;
+import com.moral.api.util.Method;
 import com.moral.constant.KafkaConstants;
 import com.moral.constant.RedisConstants;
 import lombok.extern.slf4j.Slf4j;
@@ -41,6 +43,8 @@
 
     @Autowired
     private HistorySecondUavService historySecondUavService;
+    @Autowired
+    private HistorySecondRadarService historySecondRadarService;
 
     //������������
     @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, containerFactory = "insertListenerContainerFactory")
@@ -223,4 +227,25 @@
             log.error("param{}" + e);
         }
     }
+
+    @KafkaListener(topics = KafkaConstants.RADAR_SECOND, containerFactory = "insertListenerContainerFactory")
+    public void listenSecondRadar(ConsumerRecord<String, String> record, Acknowledgment ack) {
+        String msg = record.value();
+        try {
+            msg = msg.replaceAll(",", ";");
+            Map<String, Object> data = Method.getDataStore(msg);
+            Object mac = data.get("QN");
+            Object time = data.get("DataTime");
+            if (ObjectUtils.isEmpty(time) || ObjectUtils.isEmpty(mac)) {
+                log.warn("some properties is null, param{}", msg);
+                ack.acknowledge();
+                return;
+            }
+            int i = 0;
+            historySecondRadarService.insertHistorySecond(data);
+            ack.acknowledge();
+        } catch (Exception e) {
+            log.error("param{}" + e);
+        }
+    }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/HistorySecondRadarMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/HistorySecondRadarMapper.java
new file mode 100644
index 0000000..e518357
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/mapper/HistorySecondRadarMapper.java
@@ -0,0 +1,16 @@
+package com.moral.api.mapper;
+
+import com.moral.api.entity.HistorySecondRadar;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2026-05-14
+ */
+public interface HistorySecondRadarMapper extends BaseMapper<HistorySecondRadar> {
+
+}
diff --git a/screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java b/screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java
index fd16504..3c8eff8 100644
--- a/screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java
@@ -29,4 +29,5 @@
 
 
     Map<String,Object> getCruiserCompare(Map<String, Object> params);
+
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/HistorySecondRadarService.java b/screen-manage/src/main/java/com/moral/api/service/HistorySecondRadarService.java
new file mode 100644
index 0000000..778e4ba
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/service/HistorySecondRadarService.java
@@ -0,0 +1,18 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.HistorySecondRadar;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2026-05-14
+ */
+public interface HistorySecondRadarService extends IService<HistorySecondRadar> {
+    void insertHistorySecond(Map<String, Object> data);
+}
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondRadarServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondRadarServiceImpl.java
new file mode 100644
index 0000000..89b25d8
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondRadarServiceImpl.java
@@ -0,0 +1,92 @@
+package com.moral.api.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.moral.api.entity.HistorySecondRadar;
+import com.moral.api.mapper.HistorySecondRadarMapper;
+import com.moral.api.service.HistorySecondRadarService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.IntStream;
+
+/**
+ * <p>
+ *  ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2026-05-14
+ */
+@Service
+public class HistorySecondRadarServiceImpl extends ServiceImpl<HistorySecondRadarMapper, HistorySecondRadar> implements HistorySecondRadarService {
+
+    private final DateTimeFormatter INPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+    private final DateTimeFormatter OUTPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    @Override
+    public void insertHistorySecond(Map<String, Object> data) {
+        Map<String, Object> dataResult = new HashMap<>();
+        HistorySecondRadar historySecondRadar = new HistorySecondRadar();
+        String time = data.get("time").toString();
+        String radarTime = data.get("DataTime").toString();
+        Map<String,Double> a34004 = highMap(data.get("a34004-Avg").toString());
+        historySecondRadar.setPm25(String.valueOf(a34004.get("value")));
+        historySecondRadar.setHighPm25(String.valueOf(a34004.get("high")));
+
+        Map<String,Double> a34002 = highMap(data.get("a34002-Avg").toString());
+        historySecondRadar.setPm10(String.valueOf(a34002.get("value")));
+        historySecondRadar.setHighPm10(String.valueOf(a34002.get("high")));
+
+        Map<String,Double> a01561 = highMap(data.get("a01561-Avg").toString());
+        historySecondRadar.setBoundaryLayer(String.valueOf(a01561.get("value")));
+        LocalDateTime dateTime = LocalDateTime.parse(time, INPUT_FORMATTER);
+        historySecondRadar.setTime(dateTime);
+        dataResult.put("a34004-Avg",data.get("a34004-Avg"));
+        dataResult.put("a34002-Avg",data.get("a34002-Avg"));
+        dataResult.put("a01561-Avg",data.get("a01561-Avg"));
+        dataResult.put("QN",data.get("QN"));
+        dataResult.put("CN",data.get("CN"));
+        dataResult.put("MN",data.get("MN"));
+        dataResult.put("DataTime",data.get("DataTime"));
+        dataResult.put("time",data.get("time"));
+        historySecondRadar.setRadarData(JSON.toJSONString(dataResult));
+        historySecondRadar.setRadarTime(LocalDateTime.parse(radarTime, INPUT_FORMATTER));
+        this.save(historySecondRadar);
+    }
+    private Map<String,Double> highMap(String data){
+        data = data.replace(",", "");
+        Map<String,Double> map = new HashMap<>();
+        double[] values = Arrays.stream(data.split("\\*"))
+                .mapToDouble(Double::parseDouble)
+                .toArray();
+        int maxIndex = IntStream.range(0, values.length)
+                .boxed()
+                .max((i, j) -> Double.compare(values[i], values[j]))
+                .orElse(-1);
+        if (maxIndex != -1) {
+            double maxValue = values[maxIndex];
+            map.put("value",maxValue);
+            // 3. ������������ (���������1������������7.5��������� (index+1)*7.5)
+            double distance = (maxIndex + 1) * 7.5;
+            map.put("high",distance);
+        }else {
+            map.put("value",0d);
+            map.put("high",0d);
+        }
+        return map;
+    }
+
+    public static void main(String[] args) {
+        String inputStr = "20260513110500";
+        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        LocalDateTime dateTime = LocalDateTime.parse(inputStr, inputFormatter);
+        System.out.println(dateTime);
+        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/util/Method.java b/screen-manage/src/main/java/com/moral/api/util/Method.java
new file mode 100644
index 0000000..a7d941c
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/util/Method.java
@@ -0,0 +1,72 @@
+package com.moral.api.util;
+
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class Method {
+
+    public static Map<String, Object> getDataStore(String data) {
+        data = data.replaceFirst("&&",";");
+        Map<String, Object> dataStore = new HashMap<>();
+        String[] commands = data.split(";");
+        List<String> commandList = Arrays.asList(commands);
+        commandList.forEach(command -> {
+            String[] cmds = command.split("=");
+            String key = cmds[0];
+            String value = cmds.length > 1 ? cmds[1] : "";
+            dataStore.put(key, value);
+        });
+        return dataStore;
+    }
+
+    public static Map<String, Object> getCpDataStore(String cp) {
+        String[] dataItems = cp.split(";"); // [array]
+        Map<String, Object> dataStore = new HashMap<>();
+        List<String> dataItemList = Arrays.asList(dataItems);
+        dataItemList.forEach(dataItem -> {
+            String[] itemArr= dataItem.split(";");
+            List<String> itemList = Arrays.asList(itemArr);
+            itemList.forEach(item -> {
+                String[] item1Arr = item.split(",");
+                List<String> item1List = Arrays.asList(item1Arr);
+                item1List.forEach(itemChild -> {
+                    String[] items = itemChild.split("=");
+                    String item1 = items[0];
+                    String item2 = items[1];
+                    if(item1.endsWith("-Rtd")) {
+                        String key = item1.replace("-Rtd", "");
+                        dataStore.put(key, item2);
+                    }else{
+                        String k = item1;
+                        dataStore.put(k, item2);
+                    }
+                });
+            });
+        });
+        return dataStore;
+    }
+
+    public static long getTimeStamp(String time, String format) {
+
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        if (!"".equals(format)) {
+            simpleDateFormat = new SimpleDateFormat(format);
+        }
+
+        long timeStemp = 0;
+        try {
+
+            Date date = simpleDateFormat.parse(time);
+
+            timeStemp = date.getTime();
+
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return timeStemp;
+    }
+}
diff --git a/screen-manage/src/main/resources/mapper/HistorySecondRadarMapper.xml b/screen-manage/src/main/resources/mapper/HistorySecondRadarMapper.xml
new file mode 100644
index 0000000..c19bd5a
--- /dev/null
+++ b/screen-manage/src/main/resources/mapper/HistorySecondRadarMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.moral.api.mapper.HistorySecondRadarMapper">
+
+        <!-- ������������������������ -->
+        <resultMap id="BaseResultMap" type="com.moral.api.entity.HistorySecondRadar">
+                    <result column="time" property="time" />
+                    <result column="radar_data" property="radarData" />
+                    <result column="pm25" property="pm25" />
+                    <result column="high_pm25" property="highPm25" />
+                    <result column="pm10" property="pm10" />
+                    <result column="high_pm10" property="highPm10" />
+                    <result column="boundary_layer" property="boundaryLayer" />
+        </resultMap>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.8.0