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