From 192dbdd92c69895a05dee3b59635d5a5204affe6 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期四, 29 六月 2023 11:51:16 +0800
Subject: [PATCH] 增加雷达ID推送mqtt

---
 src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java |   19 +++++++++
 src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java   |   78 +++++++++++++++++++++++---------------
 src/main/java/com/ard/alarm/radar/domain/ArdAlarmRadar.java  |   11 ++---
 3 files changed, 70 insertions(+), 38 deletions(-)

diff --git a/src/main/java/com/ard/alarm/radar/domain/RadarAlarmInfo.java b/src/main/java/com/ard/alarm/radar/domain/ArdAlarmRadar.java
similarity index 67%
rename from src/main/java/com/ard/alarm/radar/domain/RadarAlarmInfo.java
rename to src/main/java/com/ard/alarm/radar/domain/ArdAlarmRadar.java
index 4fcd6e6..f1d9fac 100644
--- a/src/main/java/com/ard/alarm/radar/domain/RadarAlarmInfo.java
+++ b/src/main/java/com/ard/alarm/radar/domain/ArdAlarmRadar.java
@@ -2,8 +2,6 @@
 
 import lombok.Data;
 
-import java.util.Date;
-
 /**
  * @Description:
  * @ClassName: RadarAlarmInfo
@@ -12,12 +10,11 @@
  * @Version: 1.0
  **/
 @Data
-public class RadarAlarmInfo {
+public class ArdAlarmRadar {
 
-    Integer id;
+    Integer targetId;
     String name;
-    String alarmTime;
     Double longitude;
-    Double lagitude;
-
+    Double latitude;
+    String alarmType;
 }
diff --git a/src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java b/src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java
new file mode 100644
index 0000000..ce011af
--- /dev/null
+++ b/src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java
@@ -0,0 +1,19 @@
+package com.ard.alarm.radar.domain;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @ClassName: RadarAlarmData
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�06鏈�28鏃�13:42
+ * @Version: 1.0
+ **/
+@Data
+public class RadarAlarmData {
+    String radarId;
+    String alarmTime;
+    List<ArdAlarmRadar> ardAlarmRadars;
+}
diff --git a/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java b/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java
index 5a0c7fa..b1f74a4 100644
--- a/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java
+++ b/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java
@@ -2,10 +2,9 @@
 
 import com.alibaba.fastjson2.JSON;
 import com.ard.alarm.radar.domain.ArdEquipRadar;
-import com.ard.alarm.radar.domain.RadarAlarmInfo;
-import com.ard.hiksdk.domain.alarmEventInfo;
+import com.ard.alarm.radar.domain.RadarAlarmData;
+import com.ard.alarm.radar.domain.ArdAlarmRadar;
 import com.ard.utils.LonlatConver;
-import com.ard.utils.SpringTool;
 import com.ard.utils.mqtt.MqttConsumer;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;
@@ -14,13 +13,9 @@
 import org.gavaghan.geodesy.Ellipsoid;
 import org.gavaghan.geodesy.GeodeticCalculator;
 import org.gavaghan.geodesy.GlobalCoordinates;
-import sun.nio.cs.ext.GBK;
 
 import javax.xml.bind.DatatypeConverter;
-import java.io.UnsupportedEncodingException;
 import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.ScheduledFuture;
@@ -41,13 +36,15 @@
     private Double longitude;
     private Double lagitude;
     private String name;
+    private String id;
 
     public NettyTcpClientHandler(ArdEquipRadar ardEquipRadar) {
         this.host = ardEquipRadar.getIp();
         this.port = ardEquipRadar.getPort();
         this.longitude = ardEquipRadar.getLongitude();
         this.lagitude = ardEquipRadar.getLatitude();
-        this.name=ardEquipRadar.getName();
+        this.name = ardEquipRadar.getName();
+        this.id = ardEquipRadar.getId();
     }
 
     private ChannelHandlerContext context;
@@ -60,8 +57,8 @@
         msg.getBytes(msg.readerIndex(), byteArray);
         byte[] bytes = receiveCompletePacket(byteArray);
         if (bytes != null) {
-          //  String hexString = DatatypeConverter.printHexBinary(bytes);
-          //  log.info(hexString);
+            //  String hexString = DatatypeConverter.printHexBinary(bytes);
+            //  log.info(hexString);
             processData(bytes);
         }
     }
@@ -115,15 +112,15 @@
             data = transferData(data);//鍘绘帀鍖呭ご鍜屽寘灏俱�佹牎楠屽強杞箟
 
             byte[] type = Arrays.copyOfRange(data, 0, 1);//鍛戒护绫诲瀷
-            log.info("鍛戒护绫诲瀷:" + DatatypeConverter.printHexBinary(type));
+            //  log.info("鍛戒护绫诲瀷:" + DatatypeConverter.printHexBinary(type));
 
             byte[] cmdId = Arrays.copyOfRange(data, 1, 2);//鍛戒护ID
-            log.info("鍛戒护ID:" + DatatypeConverter.printHexBinary(cmdId));
+            //  log.info("鍛戒护ID:" + DatatypeConverter.printHexBinary(cmdId));
 
             byte[] payloadSize = Arrays.copyOfRange(data, 2, 4);//鏈夋晥璐熻浇澶у皬
             payloadSize = toLittleEndian(payloadSize);
             int payloadSizeToDecimal = byteArrayToDecimal(payloadSize);
-            log.info("鏈夋晥璐熻浇澶у皬(杞暣鍨�):" + payloadSizeToDecimal);
+            // log.info("鏈夋晥璐熻浇澶у皬(杞暣鍨�):" + payloadSizeToDecimal);
 
             if (Arrays.equals(cmdId, new byte[]{0x01})) {
                 byte[] dwTim = Arrays.copyOfRange(data, 4, 8);
@@ -131,22 +128,25 @@
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 long l = byteArrayToDecimal(dwTim);
                 String alarmTime = sdf.format(l * 1000);
-                log.info("鍛ㄨ鍥惧儚鐨勫嚭鐜版椂闂�(杞琩ate):" + alarmTime);
+                // log.info("鍛ㄨ鍥惧儚鐨勫嚭鐜版椂闂�(杞琩ate):" + alarmTime);
 
                 byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10);
                 wTargetNum = toLittleEndian(wTargetNum);
                 int targetNum = byteArrayToDecimal(wTargetNum);
-                log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
+                //log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
 
                 //瑙f瀽NET_TARGET_UNIT(64鏄疦ET_TARGET_HEAD鐨勫瓧鑺傛暟)
                 int uintSize = (payloadSizeToDecimal - 64) / targetNum;
-                log.info("鍗曟潯鎶ヨ澶у皬:" + uintSize);
+                // log.info("鍗曟潯鎶ヨ澶у皬:" + uintSize);
+                List<ArdAlarmRadar> radarAlarmInfos = new ArrayList<>();
                 for (int i = 0; i < targetNum; i++) {
 
                     Integer index = 68 + uintSize * i;
                     byte[] dwID = Arrays.copyOfRange(data, index, index + 4);
+                    // log.info("鐩爣ID:" + DatatypeConverter.printHexBinary(cmdId));
                     dwID = toLittleEndian(dwID);
                     int id = byteArrayToDecimal(dwID);
+
                     // log.info("鐩爣ID鍙凤細" + id);
 
                     byte[] iDistance = Arrays.copyOfRange(data, index + 8, index + 12);
@@ -177,12 +177,7 @@
 //                    cTrkNum = toLittleEndian(cTrkNum);
 //                    int TrkNum = byteArrayToDecimal(cTrkNum);
 //                    log.info("杞ㄨ抗鐐规暟:" + TrkNum);
-//
-//                    byte[] cStat = Arrays.copyOfRange(data, index + 23, index + 24);
-//                    cStat = toLittleEndian(cStat);
-//                    int Stat = byteArrayToDecimal(cStat);
-//                    log.info("鐩爣褰撳墠鐘舵��:" + Stat);
-//
+
 //                    byte[] sVx = Arrays.copyOfRange(data, index + 24, index + 26);
 //                    sVx = toLittleEndian(sVx);
 //                    int Vx = byteArrayToDecimal(sVx);
@@ -203,6 +198,21 @@
 //                    int Grp = byteArrayToDecimal(cGrp);
 //                    log.info("鎵�灞炵粍:" + Grp);
                     //endregion
+                    String alarmType = "";
+                    byte[] cStat = Arrays.copyOfRange(data, index + 23, index + 24);
+                    cStat = toLittleEndian(cStat);
+                    String binaryString = String.format("%8s", Integer.toBinaryString(cStat[0] & 0xFF)).replace(' ', '0');
+                    // log.info("鐩爣褰撳墠鐘舵��:" + binaryString);
+                    // 鎻愬彇绗�4浣嶈嚦绗�6浣嶇殑鍊�
+                    int extractedValue = (cStat[0] >> 4) & 0b00001111;
+                    // 鍒ゆ柇鎻愬彇鐨勫��
+                    if (extractedValue == 0b0000) {
+                        alarmType = "杩愬姩鐩爣妫�娴�";
+                    } else if (extractedValue == 0b0001) {
+                        alarmType = "鐑簮妫�娴�";
+                    }
+                    // log.info("鎶ヨ绫诲瀷:" + alarmType);
+
                     byte[] szName = Arrays.copyOfRange(data, index + 64, index + 96);
                     int position = findIndexOfDoubleZero(szName);
                     String alarmPointName = "";
@@ -222,23 +232,29 @@
                     afTy = toLittleEndian(afTy);
                     float fTy = bytesToFloat(afTy);
                     //  log.info("鍨傜洿瑙掑害:" + fTy);
-                    log.info("闆疯揪淇℃伅锛�" + host + "銆恜ort銆�" + port + "銆怷銆�" + longitude + "銆怸銆�" + lagitude);
+                    //  log.info("闆疯揪淇℃伅锛�" + host + "銆恜ort銆�" + port + "銆怷銆�" + longitude + "銆怸銆�" + lagitude);
                     Double[] radarXY = {longitude, lagitude};
                     Double[] alarmXY = CalculateCoordinates(radarXY, Distance, (double) fTx);
-                    log.info("鎶ヨ淇℃伅锛�" + "銆恑d銆�" + id + "銆恘ame銆�" + alarmPointName + "銆恆larmTime銆�" + alarmTime + "銆恉istance銆�" + Distance + "銆怭銆�" + fTx + "銆怲銆�" + fTy + "銆怷銆�" + alarmXY[0] + "銆怸銆�" + alarmXY[1]);
-                    RadarAlarmInfo alarmInfo=new RadarAlarmInfo();
-                    alarmInfo.setId(id);
-                    alarmInfo.setAlarmTime(alarmTime);
-                    alarmInfo.setName(alarmPointName+"("+name+")");
-                    alarmInfo.setLongitude(alarmXY[0]);
-                    alarmInfo.setLagitude(alarmXY[1]);
-                    MqttConsumer.publish(2, false, "radar", JSON.toJSONString(alarmInfo));
+                    //  log.info("鎶ヨ淇℃伅锛�" + "銆恑d銆�" + id + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime + "銆恉istance銆�" + Distance + "銆怭銆�" + fTx + "銆怲銆�" + fTy + "銆怷銆�" + alarmXY[0] + "銆怸銆�" + alarmXY[1]);
+                    ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar();
+                    ardAlarmRadar.setTargetId(id);
+                    ardAlarmRadar.setName(alarmPointName + "(" + name + ")");
+                    ardAlarmRadar.setLongitude(alarmXY[0]);
+                    ardAlarmRadar.setLatitude(alarmXY[1]);
+                    ardAlarmRadar.setAlarmType(alarmType);
+                    radarAlarmInfos.add(ardAlarmRadar);
                 }
+                RadarAlarmData radarAlarmData = new RadarAlarmData();
+                radarAlarmData.setRadarId(id);
+                radarAlarmData.setAlarmTime(alarmTime);
+                radarAlarmData.setArdAlarmRadars(radarAlarmInfos);
+                MqttConsumer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData));
             }
         } catch (Exception ex) {
             log.error(ex.getMessage());
         }
     }
+
     /**
      * byte鏁扮粍杞琭loat
      */

--
Gitblit v1.9.3