‘liusuyi’
2023-06-29 192dbdd92c69895a05dee3b59635d5a5204affe6
增加雷达ID推送mqtt
已添加1个文件
已重命名1个文件
已修改1个文件
108 ■■■■■ 文件已修改
src/main/java/com/ard/alarm/radar/domain/ArdAlarmRadar.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/radar/domain/ArdAlarmRadar.java
ÎļþÃû´Ó src/main/java/com/ard/alarm/radar/domain/RadarAlarmInfo.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;
}
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;
}
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("周视图像的出现时间(转date):" + alarmTime);
                // log.info("周视图像的出现时间(转date):" + alarmTime);
                byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10);
                wTargetNum = toLittleEndian(wTargetNum);
                int targetNum = byteArrayToDecimal(wTargetNum);
                log.info("目标总点数(转整型):" + targetNum);
                //log.info("目标总点数(转整型):" + targetNum);
                //解析NET_TARGET_UNIT(64是NET_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 + "【port】" + port + "【X】" + longitude + "【Y】" + lagitude);
                    //  log.info("雷达信息:" + host + "【port】" + port + "【X】" + longitude + "【Y】" + lagitude);
                    Double[] radarXY = {longitude, lagitude};
                    Double[] alarmXY = CalculateCoordinates(radarXY, Distance, (double) fTx);
                    log.info("报警信息:" + "【id】" + id + "【name】" + alarmPointName + "【alarmTime】" + alarmTime + "【distance】" + Distance + "【P】" + fTx + "【T】" + fTy + "【X】" + alarmXY[0] + "【Y】" + 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("报警信息:" + "【id】" + id + "【name】" + alarmPointName + "【alarmType】" + alarmType + "【alarmTime】" + alarmTime + "【distance】" + Distance + "【P】" + fTx + "【T】" + fTy + "【X】" + alarmXY[0] + "【Y】" + 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数组转float
     */