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