‘liusuyi’
2023-11-01 616e0764ed9e61ab8a2e8b523eecbba6b98c5c13
增加告警前端发送的强制引导信息接收并发送mqtt
已修改1个文件
74 ■■■■ 文件已修改
src/main/java/com/ard/utils/tcp/ClientHandler.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/tcp/ClientHandler.java
@@ -17,9 +17,7 @@
import javax.xml.bind.DatatypeConverter;
import java.net.InetSocketAddress;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@@ -145,7 +143,7 @@
            byte[] heart = ByteUtils.appendArrays(header, payload, payloadCrc32, footer);
//            byte[] heart = {0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, (byte) 0x83, (byte) 0x88, 0x5d, 0x71, 0x01, 0x02, 0x00};
            String hexString = DatatypeConverter.printHexBinary(heart);
           // log.debug("发送心跳:" + hexString);
            // log.debug("发送心跳:" + hexString);
            message.writeBytes(heart);
            context.writeAndFlush(message);
@@ -305,7 +303,7 @@
                    float fTy = ByteUtils.bytesToFloat(afTy);
                    log.debug("垂直角度:" + fTy);
                    // 将角度转换为弧度
                    double thetaRadians = Math.toRadians(fTy+90);
                    double thetaRadians = Math.toRadians(fTy + 90);
                    // 使用正弦函数计算对边长度
                    Distance = Math.sin(thetaRadians) * Distance;
                    log.debug("目标投影距离(m):" + Distance);
@@ -322,6 +320,21 @@
                    radarAlarmInfos.add(ardAlarmRadar);
                }
                //endregion
                if (StringUtils.isEmpty(alarmTime)) {
                    return;
                }
                if (targetNum == 0) {
                    return;
                }
                RadarAlarmData radarAlarmData = new RadarAlarmData();
                radarAlarmData.setRadarId(radarId);
                radarAlarmData.setRadarName(radarName);
                radarAlarmData.setAlarmTime(alarmTime);
                radarAlarmData.setArdAlarmRadars(radarAlarmInfos);
                MqttProducer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData));
                //抽油机状态MQTT队列
                radarAlarmData.setArdAlarmRadars(well);
                MqttProducer.publish(2, false, "radarWellData", JSON.toJSONString(radarAlarmData));
            }
            if (Arrays.equals(cmdId, new byte[]{0x04})) {
                //region抽油机AI状态反馈
@@ -420,22 +433,45 @@
                    well.add(wellAlarm);
                }
                //endregion
                if (StringUtils.isEmpty(alarmTime)) {
                    return;
                }
                if (targetNum == 0) {
                    return;
                }
                RadarAlarmData radarAlarmData = new RadarAlarmData();
                radarAlarmData.setRadarId(radarId);
                radarAlarmData.setRadarName(radarName);
                radarAlarmData.setAlarmTime(alarmTime);
                radarAlarmData.setArdAlarmRadars(radarAlarmInfos);
                MqttProducer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData));
                //抽油机状态MQTT队列
                radarAlarmData.setArdAlarmRadars(well);
                MqttProducer.publish(2, false, "radarWellData", JSON.toJSONString(radarAlarmData));
            }
            if (StringUtils.isEmpty(alarmTime)) {
                return;
            if (Arrays.equals(cmdId, new byte[]{0x02})) {
                //region 告警前端发送的强制引导信息
                byte[] iDistance = Arrays.copyOfRange(data, 4, 8);
                iDistance = ByteUtils.toLittleEndian(iDistance);
                long distance = ByteUtils.bytesToDecimal(iDistance);
                log.info("目标当前距离(m):" + distance);
                byte[] fTx = Arrays.copyOfRange(data, 8, 12);
                fTx = ByteUtils.toLittleEndian(fTx);
                float tx = ByteUtils.bytesToFloat(fTx);
                log.debug("方位:" + tx);
                byte[] fTy = Arrays.copyOfRange(data, 12, 16);
                fTy = ByteUtils.toLittleEndian(fTy);
                float ty= ByteUtils.bytesToFloat(fTy);
                log.debug("俯仰:" + ty);
                Map<String,Object>forceGuideMap=new HashMap<>();
                forceGuideMap.put("distance",distance);
                forceGuideMap.put("p",tx);
                forceGuideMap.put("t",ty);
                forceGuideMap.put("radarId",radarId);
                forceGuideMap.put("radarName",radarName);
                //endregion
                MqttProducer.publish(2, false, "radarForceGuide", JSON.toJSONString(forceGuideMap));
            }
            if (targetNum == 0) {
                return;
            }
            RadarAlarmData radarAlarmData = new RadarAlarmData();
            radarAlarmData.setRadarId(radarId);
            radarAlarmData.setRadarName(radarName);
            radarAlarmData.setAlarmTime(alarmTime);
            radarAlarmData.setArdAlarmRadars(radarAlarmInfos);
            MqttProducer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData));
            //抽油机状态MQTT队列
            radarAlarmData.setArdAlarmRadars(well);
            MqttProducer.publish(2, false, "radarWellData", JSON.toJSONString(radarAlarmData));
        } catch (Exception ex) {
            log.error("雷达报文解析异常:" + ex.getMessage());
        }