From ef1e469fd3e885b9238bc1ef5e8d82b3a43bd55b Mon Sep 17 00:00:00 2001
From: liusuyi <13324259@qq.com>
Date: 星期三, 29 十一月 2023 20:07:29 +0800
Subject: [PATCH] 增加雷达跟踪引导上传
---
src/main/java/com/ard/utils/tcp/ClientHandler.java | 156 +++++++++++++++++++++++++++++++++++-----------------
1 files changed, 105 insertions(+), 51 deletions(-)
diff --git a/src/main/java/com/ard/utils/tcp/ClientHandler.java b/src/main/java/com/ard/utils/tcp/ClientHandler.java
index e4c4479..8956726 100644
--- a/src/main/java/com/ard/utils/tcp/ClientHandler.java
+++ b/src/main/java/com/ard/utils/tcp/ClientHandler.java
@@ -6,22 +6,23 @@
import com.ard.alarm.radar.domain.RadarAlarmData;
import com.ard.utils.other.ByteUtils;
import com.ard.utils.other.GisUtils;
-import com.ard.utils.mqtt.MqttConsumer;
+import com.ard.utils.mqtt.MqttProducer;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelId;
import io.netty.channel.SimpleChannelInboundHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
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;
+
+import static com.ard.utils.other.ByteUtils.toLittleEndian;
/**
* @Description: 瀹㈡埛绔鐞嗗櫒
@@ -43,7 +44,7 @@
* @throws Exception
*/
@Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ public void channelActive(ChannelHandlerContext ctx) {
context = ctx;
startHeartbeatTask();//寮�濮嬪彂閫佸績璺�
}
@@ -145,7 +146,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);
@@ -177,7 +178,7 @@
if (!crc32Check) {
log.debug("CRC32鏍¢獙涓嶉�氳繃");
} else {
- log.debug("CRC32鏍¢獙閫氳繃");
+ //log.debug("CRC32鏍¢獙閫氳繃");
}
//endregion
//log.info("鍘熷鏁版嵁:" + DatatypeConverter.printHexBinary(data));
@@ -189,26 +190,29 @@
byte[] cmdId = Arrays.copyOfRange(data, 1, 2);//鍛戒护ID
// log.info("鍛戒护ID:" + DatatypeConverter.printHexBinary(cmdId));
byte[] payloadSize = Arrays.copyOfRange(data, 2, 4);//鏈夋晥璐熻浇澶у皬
- payloadSize = ByteUtils.toLittleEndian(payloadSize);
+ payloadSize = toLittleEndian(payloadSize);
+ //log.info("payloadSize:" + DatatypeConverter.printHexBinary(payloadSize));
int payloadSizeToDecimal = ByteUtils.bytesToDecimal(payloadSize);
// log.info("鏈夋晥璐熻浇澶у皬(杞暣鍨�):" + payloadSizeToDecimal);
//endregion
List<ArdAlarmRadar> radarAlarmInfos = new ArrayList<>();
- //鎶芥补鏈烘柊鎺ㄩ�侀泦鍚�
+ ArdAlarmRadar radarFollowInfo = null;
+ //鎶芥补鏈虹姸鎬侀浄杈炬帹閫侀泦鍚�
List<ArdAlarmRadar> well = new ArrayList<>();
String alarmTime = "";
Integer targetNum = 0;
+ //闆疯揪绉诲姩闃茬伀鎶ヨ
if (Arrays.equals(cmdId, new byte[]{0x01})) {
//region 鍛婅淇℃伅鍙嶉
byte[] dwTim = Arrays.copyOfRange(data, 4, 8);
- dwTim = ByteUtils.toLittleEndian(dwTim);
+ dwTim = toLittleEndian(dwTim);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long l = ByteUtils.bytesToDecimal(dwTim);
alarmTime = sdf.format(l * 1000);
// log.info("鍛ㄨ鍥惧儚鐨勫嚭鐜版椂闂�(杞琩ate):" + alarmTime);
byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10);
- wTargetNum = ByteUtils.toLittleEndian(wTargetNum);
+ wTargetNum = toLittleEndian(wTargetNum);
targetNum = ByteUtils.bytesToDecimal(wTargetNum);
if (targetNum == 0) {
return;
@@ -224,12 +228,12 @@
Integer index = 68 + uintSize * i;
byte[] dwID = Arrays.copyOfRange(data, index, index + 4);
// log.info("鐩爣ID:" + DatatypeConverter.printHexBinary(cmdId));
- dwID = ByteUtils.toLittleEndian(dwID);
+ dwID = toLittleEndian(dwID);
int id = ByteUtils.bytesToDecimal(dwID);
// log.info("鐩爣ID鍙凤細" + id);
byte[] iDistance = Arrays.copyOfRange(data, index + 8, index + 12);
- iDistance = ByteUtils.toLittleEndian(iDistance);
+ iDistance = toLittleEndian(iDistance);
double Distance = ByteUtils.bytesToDecimal(iDistance);
log.debug("鐩爣褰撳墠鐩寸嚎璺濈(m):" + Distance);
@@ -280,9 +284,7 @@
//endregion
String alarmType = "";
byte[] cStat = Arrays.copyOfRange(data, index + 23, index + 24);
- cStat = ByteUtils.toLittleEndian(cStat);
- String binaryString = String.format("%8s", Integer.toBinaryString(cStat[0] & 0xFF)).replace(' ', '0');
- // log.info("鐩爣褰撳墠鐘舵��:" + binaryString);
+ cStat = toLittleEndian(cStat);
// 鎻愬彇绗�4浣嶈嚦绗�6浣嶇殑鍊�
int extractedValue = (cStat[0] >> 4) & 0b00001111;
// 鍒ゆ柇鎻愬彇鐨勫��
@@ -292,20 +294,19 @@
alarmType = "鐑簮妫�娴�";
}
// log.info("鎶ヨ绫诲瀷:" + alarmType);
-
byte[] szName = Arrays.copyOfRange(data, index + 64, index + 96);
String alarmPointName = ByteUtils.bytesToStringZh(szName);
// log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + alarmPointName);
byte[] afTx = Arrays.copyOfRange(data, index + 96, index + 100);
- afTx = ByteUtils.toLittleEndian(afTx);
+ afTx = toLittleEndian(afTx);
float fTx = ByteUtils.bytesToFloat(afTx);
// log.info("姘村钩瑙掑害:" + fTx);
byte[] afTy = Arrays.copyOfRange(data, index + 112, index + 116);
- afTy = ByteUtils.toLittleEndian(afTy);
+ afTy = toLittleEndian(afTy);
float fTy = ByteUtils.bytesToFloat(afTy);
log.debug("鍨傜洿瑙掑害:" + fTy);
// 灏嗚搴﹁浆鎹负寮у害
- double thetaRadians = Math.toRadians(fTy+90);
+ double thetaRadians = Math.toRadians(fTy + 90);
// 浣跨敤姝e鸡鍑芥暟璁$畻瀵硅竟闀垮害
Distance = Math.sin(thetaRadians) * Distance;
log.debug("鐩爣鎶曞奖璺濈(m):" + Distance);
@@ -320,23 +321,51 @@
ardAlarmRadar.setLatitude(alarmXY[1]);
ardAlarmRadar.setAlarmType(alarmType);
radarAlarmInfos.add(ardAlarmRadar);
+ int bit1 = (cStat[0] >> 1) & 0x1;
+ //鐩爣鐨凚1=1 閿佸畾
+ if (bit1 == 1) {
+ radarFollowInfo = ardAlarmRadar;
+ //灏嗚拷韪攣瀹氱殑鎶ヨ瀵硅薄灞炴�у鍒剁粰radarFollowInfo瀵硅薄
+ //BeanUtils.copyProperties(ardAlarmRadar, radarFollowInfo);
+ }
}
//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));
+ if (radarFollowInfo != null) {
+ //褰撳墠闆疯揪鎵弿瀛樺湪寮曞璺熻釜鏁版嵁锛屽彧淇濈暀鏈�鍚庝竴娆¢攣瀹氱殑鏁版嵁
+ MqttProducer.publish(2, false, "radarFollowGuide", JSON.toJSONString(radarFollowInfo));
+ }
+ //鎶芥补鏈虹姸鎬丮QTT闃熷垪
+ radarAlarmData.setArdAlarmRadars(well);
+ MqttProducer.publish(2, false, "radarWellData", JSON.toJSONString(radarAlarmData));
+
}
+ //鎶芥补鏈篈I鐘舵�佸弽棣�
if (Arrays.equals(cmdId, new byte[]{0x04})) {
//region鎶芥补鏈篈I鐘舵�佸弽棣�
String hexString = DatatypeConverter.printHexBinary(data);
//log.info(hexString);
byte[] dwTim = Arrays.copyOfRange(data, 4, 8);
- dwTim = ByteUtils.toLittleEndian(dwTim);
+ dwTim = toLittleEndian(dwTim);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long l = ByteUtils.bytesToDecimal(dwTim);
alarmTime = sdf.format(l * 1000);
//log.info("鍛ㄨ鍥惧儚鐨勫嚭鐜版椂闂�(杞琩ate):" + alarmTime);
byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10);
- wTargetNum = ByteUtils.toLittleEndian(wTargetNum);
+ wTargetNum = toLittleEndian(wTargetNum);
targetNum = ByteUtils.bytesToDecimal(wTargetNum);
log.debug("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
if (targetNum == 0) {
@@ -349,44 +378,44 @@
Integer index = 68 + uintSize * i;
byte[] dwID = Arrays.copyOfRange(data, index, index + 4);
//log.info("鐩爣ID:" + DatatypeConverter.printHexBinary(dwID));
- dwID = ByteUtils.toLittleEndian(dwID);
+ dwID = toLittleEndian(dwID);
int id = ByteUtils.bytesToDecimal(dwID);
//log.info("鐩爣ID鍙凤細" + id);
//region 涓嶉渶瑕佺殑瀛楁
byte[] iTw = Arrays.copyOfRange(data, index + 4, index + 8);
- iTw = ByteUtils.toLittleEndian(iTw);
+ iTw = toLittleEndian(iTw);
int Tw = ByteUtils.bytesToDecimal(iTw);
// log.info("鐩爣褰撳墠鐨勫儚绱犲搴�:" + Tw);
byte[] iTh = Arrays.copyOfRange(data, index + 8, index + 12);
- iTh = ByteUtils.toLittleEndian(iTh);
+ iTh = toLittleEndian(iTh);
int Th = ByteUtils.bytesToDecimal(iTh);
//log.info("鐩爣褰撳墠鐨勫儚绱犻珮搴�:" + Th);
byte[] fTx = Arrays.copyOfRange(data, index + 12, index + 16);
- fTx = ByteUtils.toLittleEndian(fTx);
+ fTx = toLittleEndian(fTx);
float fTxAngle = ByteUtils.bytesToFloat(fTx);
log.debug("p瑙掑害:" + fTxAngle);
byte[] fTy = Arrays.copyOfRange(data, index + 16, index + 20);
- fTy = ByteUtils.toLittleEndian(fTy);
+ fTy = toLittleEndian(fTy);
float fTyAngle = ByteUtils.bytesToFloat(fTy);
log.debug("t瑙掑害:" + fTyAngle);
byte[] sAreaNo = Arrays.copyOfRange(data, index + 20, index + 22);
- sAreaNo = ByteUtils.toLittleEndian(sAreaNo);
+ sAreaNo = toLittleEndian(sAreaNo);
int AreaNo = ByteUtils.bytesToDecimal(sAreaNo);
log.debug("鐩爣褰掑睘鐨勫憡璀﹀尯鍩熷彿:" + AreaNo);
byte[] cGrp = Arrays.copyOfRange(data, index + 22, index + 23);
- cGrp = ByteUtils.toLittleEndian(cGrp);
+ cGrp = toLittleEndian(cGrp);
int Grp = ByteUtils.bytesToDecimal(cGrp);
//log.info("鎵�灞炵粍:" + Grp);
//endregion
String alarmType;
- //鏂伴泦鍚堜腑杩愯鍙橀噺
- String wellType = "杩愯";
+ //鎶芥补鏈虹姸鎬佸彉閲�
+ String wellType;
byte[] cStat = Arrays.copyOfRange(data, index + 23, index + 24);
- cStat = ByteUtils.toLittleEndian(cStat);
+ cStat = toLittleEndian(cStat);
//String binaryString = String.format("%8s", Integer.toBinaryString(cStat[0] & 0xFF)).replace(' ', '0');
//log.info("鐩爣褰撳墠鐘舵��:" + binaryString);
// 鎻愬彇绗�0浣嶅��
@@ -408,12 +437,11 @@
wellType = "鍋滄満";
} else {
wellType = "杩愯";
-// continue;
}
- //鏂扮殑闆嗗悎涓鍏ユ暟鎹�
+ //鎶芥补鏈虹姸鎬侀泦鍚堜腑瑁呭叆鏁版嵁
byte[] szName = Arrays.copyOfRange(data, index + 32, index + 64);
String alarmPointName = ByteUtils.bytesToStringZh(szName);
- //log.info("鎶ヨ绫诲瀷:" + alarmType);
+ log.debug("鎶芥补鏈虹姸鎬佹姤璀︿俊鎭細" + "銆恑d銆�" + id + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + wellType + "銆恆larmTime銆�" + alarmTime);
ArdAlarmRadar wellAlarm = new ArdAlarmRadar();
wellAlarm.setTargetId(id);
wellAlarm.setName(alarmPointName);
@@ -421,25 +449,51 @@
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));
+ //鎶芥补鏈虹姸鎬丮QTT闃熷垪
+ 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 = toLittleEndian(iDistance);
+ long distance = ByteUtils.bytesToDecimal(iDistance);
+ log.info("鐩爣褰撳墠璺濈(m):" + distance);
+ byte[] fTx = Arrays.copyOfRange(data, 8, 12);
+ fTx = toLittleEndian(fTx);
+ float tx = ByteUtils.bytesToFloat(fTx);
+ log.debug("鏂逛綅:" + tx);
+ byte[] fTy = Arrays.copyOfRange(data, 12, 16);
+ fTy = toLittleEndian(fTy);
+ float ty = ByteUtils.bytesToFloat(fTy);
+ if (ty < 0) {
+ ty += 360;
+ }
+ 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);
+ log.debug("寮哄埗寮曞淇℃伅" + forceGuideMap);
+ //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);
- MqttConsumer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData));
- //鏂扮殑MQTT闃熷垪
- radarAlarmData.setArdAlarmRadars(well);
- MqttConsumer.publish(2, false, "well", JSON.toJSONString(radarAlarmData));
} catch (Exception ex) {
log.error("闆疯揪鎶ユ枃瑙f瀽寮傚父:" + ex.getMessage());
}
}
-
-}
+}
\ No newline at end of file
--
Gitblit v1.9.3