From 6474b923d8f6d8ea5e5b63277f18335136c7e33c Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期一, 04 十二月 2023 11:24:16 +0800
Subject: [PATCH] 增加动态客户端备用代码 优化雷达追踪引导 优化打印日志
---
src/main/java/com/ard/utils/tcp/ClientHandler.java | 130 +++++++++++++++++++++++++-----------------
1 files changed, 77 insertions(+), 53 deletions(-)
diff --git a/src/main/java/com/ard/utils/tcp/ClientHandler.java b/src/main/java/com/ard/utils/tcp/ClientHandler.java
index be814de..a032d57 100644
--- a/src/main/java/com/ard/utils/tcp/ClientHandler.java
+++ b/src/main/java/com/ard/utils/tcp/ClientHandler.java
@@ -13,6 +13,7 @@
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;
@@ -20,6 +21,8 @@
import java.util.*;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
+
+import static com.ard.utils.other.ByteUtils.toLittleEndian;
/**
* @Description: 瀹㈡埛绔鐞嗗櫒
@@ -175,7 +178,7 @@
if (!crc32Check) {
log.debug("CRC32鏍¢獙涓嶉�氳繃");
} else {
- log.debug("CRC32鏍¢獙閫氳繃");
+ //log.debug("CRC32鏍¢獙閫氳繃");
}
//endregion
//log.info("鍘熷鏁版嵁:" + DatatypeConverter.printHexBinary(data));
@@ -185,33 +188,38 @@
byte[] type = Arrays.copyOfRange(data, 0, 1);//鍛戒护绫诲瀷
// log.info("鍛戒护绫诲瀷:" + DatatypeConverter.printHexBinary(type));
byte[] cmdId = Arrays.copyOfRange(data, 1, 2);//鍛戒护ID
- // log.info("鍛戒护ID:" + DatatypeConverter.printHexBinary(cmdId));
+ String cmdIdStr=DatatypeConverter.printHexBinary(cmdId);
+ //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<>();
+ List<ArdAlarmRadar> radarFollowInfos = new ArrayList<>();
//鎶芥补鏈虹姸鎬侀浄杈炬帹閫侀泦鍚�
List<ArdAlarmRadar> well = new ArrayList<>();
String alarmTime = "";
Integer targetNum = 0;
+ log.debug("澶勭悊闆疯揪"+radarName+"鏁版嵁-->鍛戒护ID:"+cmdIdStr);
+ //闆疯揪绉诲姩闃茬伀鎶ヨ
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;
}
- log.debug("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
+ //log.debug("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
//瑙f瀽NET_TARGET_UNIT(64鏄疦ET_TARGET_HEAD鐨勫瓧鑺傛暟)
int uintSize = (payloadSizeToDecimal - 64) / targetNum;
@@ -222,14 +230,14 @@
Integer index = 68 + uintSize * i;
byte[] dwID = Arrays.copyOfRange(data, index, index + 4);
// log.info("鐩爣ID:" + DatatypeConverter.printHexBinary(cmdId));
- dwID = ByteUtils.toLittleEndian(dwID);
- int id = ByteUtils.bytesToDecimal(dwID);
- // log.info("鐩爣ID鍙凤細" + id);
+ dwID = toLittleEndian(dwID);
+ int targetId = ByteUtils.bytesToDecimal(dwID);
+ // log.info("鐩爣ID鍙凤細" + targetId);
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);
+ //log.debug("鐩爣褰撳墠鐩寸嚎璺濈(m):" + Distance);
//region 涓嶉渶瑕佺殑瀛楁
// byte[] dwGSum = Arrays.copyOfRange(data, index + 4, index + 8);
@@ -278,9 +286,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;
// 鍒ゆ柇鎻愬彇鐨勫��
@@ -290,34 +296,42 @@
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);
+ //log.debug("鍨傜洿瑙掑害:" + fTy);
// 灏嗚搴﹁浆鎹负寮у害
double thetaRadians = Math.toRadians(fTy + 90);
// 浣跨敤姝e鸡鍑芥暟璁$畻瀵硅竟闀垮害
Distance = Math.sin(thetaRadians) * Distance;
- log.debug("鐩爣鎶曞奖璺濈(m):" + Distance);
+ if(Distance<0)
+ {
+ continue;//杩囨护璺濈灏忎簬0鐨勮剰鏁版嵁
+ }
+ //log.debug("鐩爣鎶曞奖璺濈(m):" + Distance);
Double[] radarXY = {radarLongitude, radarLagitude};
Double[] alarmXY = GisUtils.CalculateCoordinates(radarXY, Distance, (double) fTx);
- log.debug("鎶ヨ淇℃伅锛�" + "銆恑d銆�" + id + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime + "銆恉istance銆�" + Distance + "銆怭銆�" + fTx + "銆怲銆�" + fTy + "銆怷銆�" + alarmXY[0] + "銆怸銆�" + alarmXY[1]);
+ log.debug("鎶ヨ淇℃伅锛�" + "銆恟adarName銆�" + radarName + "銆恡argetId銆�"+ targetId + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime + "銆恘ame銆�" + alarmPointName+"銆怐istance銆�"+Distance);
ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar();
- ardAlarmRadar.setTargetId(id);
+ ardAlarmRadar.setTargetId(targetId);
ardAlarmRadar.setName(alarmPointName);
ardAlarmRadar.setLongitude(alarmXY[0]);
ardAlarmRadar.setLatitude(alarmXY[1]);
ardAlarmRadar.setAlarmType(alarmType);
radarAlarmInfos.add(ardAlarmRadar);
+ int bit1 = (cStat[0] >> 1) & 0x1;
+ //鐩爣鐨凚1=1 閿佸畾
+ if (bit1 == 1) {
+ radarFollowInfos.add(ardAlarmRadar);
+ }
}
//endregion
if (StringUtils.isEmpty(alarmTime)) {
@@ -332,26 +346,33 @@
radarAlarmData.setAlarmTime(alarmTime);
radarAlarmData.setArdAlarmRadars(radarAlarmInfos);
MqttProducer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData));
+ if (radarFollowInfos.size() >0) {
+ radarAlarmData.setArdFollowRadars(radarFollowInfos);
+ //褰撳墠闆疯揪鎵弿瀛樺湪寮曞璺熻釜鏁版嵁锛屽彧淇濈暀鏈�鍚庝竴娆¢攣瀹氱殑鏁版嵁
+ MqttProducer.publish(2, false, "radarFollowGuide", JSON.toJSONString(radarAlarmData));
+ }
//鎶芥补鏈虹姸鎬丮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);
+ //log.debug("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
if (targetNum == 0) {
return;
}
@@ -362,36 +383,36 @@
Integer index = 68 + uintSize * i;
byte[] dwID = Arrays.copyOfRange(data, index, index + 4);
//log.info("鐩爣ID:" + DatatypeConverter.printHexBinary(dwID));
- dwID = ByteUtils.toLittleEndian(dwID);
- int id = ByteUtils.bytesToDecimal(dwID);
- //log.info("鐩爣ID鍙凤細" + id);
+ dwID = toLittleEndian(dwID);
+ int targetId = ByteUtils.bytesToDecimal(dwID);
+ //log.info("鐩爣ID鍙凤細" + targetId);
//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);
+ //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);
+ //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);
+ //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
@@ -399,7 +420,7 @@
//鎶芥补鏈虹姸鎬佸彉閲�
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浣嶅��
@@ -412,9 +433,9 @@
//log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + DatatypeConverter.printHexBinary(szName));
String alarmPointName = ByteUtils.bytesToStringZh(szName);
// log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + alarmPointName);
- log.debug("鎶ヨ淇℃伅锛�" + "銆恑d銆�" + id + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime);
+ log.debug("鎶ヨ淇℃伅锛�"+ "銆恟adarName銆�" + radarName + "銆恡argetId銆�" + targetId + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime);
ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar();
- ardAlarmRadar.setTargetId(id);
+ ardAlarmRadar.setTargetId(targetId);
ardAlarmRadar.setName(alarmPointName);
ardAlarmRadar.setAlarmType(alarmType);
radarAlarmInfos.add(ardAlarmRadar);
@@ -425,9 +446,9 @@
//鎶芥补鏈虹姸鎬侀泦鍚堜腑瑁呭叆鏁版嵁
byte[] szName = Arrays.copyOfRange(data, index + 32, index + 64);
String alarmPointName = ByteUtils.bytesToStringZh(szName);
- log.debug("鎶芥补鏈虹姸鎬佹姤璀︿俊鎭細" + "銆恑d銆�" + id + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + wellType + "銆恆larmTime銆�" + alarmTime);
+ //log.debug("鐘舵�佷俊鎭細" + "銆恟adarName銆�" + radarName + "銆恡argetId銆�" + targetId + "銆恆larmTime銆�" + alarmTime + "銆恘ame銆�" + alarmPointName + "銆恆larmState銆�" + wellType);
ArdAlarmRadar wellAlarm = new ArdAlarmRadar();
- wellAlarm.setTargetId(id);
+ wellAlarm.setTargetId(targetId);
wellAlarm.setName(alarmPointName);
wellAlarm.setAlarmType(wellType);
well.add(wellAlarm);
@@ -449,26 +470,30 @@
radarAlarmData.setArdAlarmRadars(well);
MqttProducer.publish(2, false, "radarWellData", JSON.toJSONString(radarAlarmData));
}
+ //寮哄埗寮曞
if (Arrays.equals(cmdId, new byte[]{0x02})) {
//region 鍛婅鍓嶇鍙戦�佺殑寮哄埗寮曞淇℃伅
byte[] iDistance = Arrays.copyOfRange(data, 4, 8);
- iDistance = ByteUtils.toLittleEndian(iDistance);
+ iDistance = toLittleEndian(iDistance);
long distance = ByteUtils.bytesToDecimal(iDistance);
log.info("鐩爣褰撳墠璺濈(m):" + distance);
byte[] fTx = Arrays.copyOfRange(data, 8, 12);
- fTx = ByteUtils.toLittleEndian(fTx);
+ fTx = 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);
+ 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);
- forceGuideMap.put("radarName",radarName);
+ 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));
}
@@ -476,5 +501,4 @@
log.error("闆疯揪鎶ユ枃瑙f瀽寮傚父:" + ex.getMessage());
}
}
-
-}
+}
\ No newline at end of file
--
Gitblit v1.9.3