src/main/java/com/ard/hiksdk/service/impl/FMSGCallBack.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/hiksdk/util/DateUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/ByteUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/DateUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/GisUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/LonlatConver.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/SpringTool.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/mqtt/MqttConsumer.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/tcp/MessageParsing.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ard/hiksdk/service/impl/FMSGCallBack.java
@@ -7,9 +7,9 @@ import com.ard.config.MinioClientSingleton; import com.ard.hiksdk.common.GlobalVariable; import com.ard.hiksdk.domain.alarmEventInfo; import com.ard.hiksdk.util.DateUtils; import com.ard.hiksdk.util.hikSdkUtil.HCNetSDK; import com.ard.hiksdk.util.minio.MinioUtils; import com.ard.utils.DateUtils; import com.ard.utils.SpringTool; import com.ard.utils.mqtt.MqttConsumer; import com.sun.jna.Pointer; src/main/java/com/ard/hiksdk/util/DateUtils.java
ÎļþÒÑɾ³ý src/main/java/com/ard/utils/ByteUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,82 @@ package com.ard.utils; import javax.xml.bind.DatatypeConverter; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @Description: åèå·¥å ·ç±» * @ClassName: byteUtils * @Author: åèä¹ * @Date: 2023å¹´07æ03æ¥15:18 * @Version: 1.0 **/ public class ByteUtils { /** * Byteåè转Hex * @param b åè * @return Hex */ public static String byteToHex(byte b) { String hexString = Integer.toHexString(b & 0xFF); //ç±äºåå è¿å¶æ¯ç±0~9ãA~Fæ¥è¡¨ç¤º1~16ï¼æä»¥å¦æByteè½¬æ¢æHexå妿æ¯<16,就伿¯ä¸ä¸ªåç¬¦ï¼æ¯å¦A=10ï¼ï¼é常æ¯ä½¿ç¨ä¸¤ä¸ªå符æ¥è¡¨ç¤º16è¿å¶ä½ç, //åå¦ä¸ä¸ªå符çè¯ï¼éå°å符串11ï¼è¿å°åºæ¯1个åèï¼è¿æ¯1å1两个åèï¼å®¹ææ··æ·ï¼å¦ææ¯è¡¥0ï¼é£ä¹1å1è¡¥å åå°±æ¯0101ï¼11就表示纯粹ç11 if (hexString.length() < 2) { hexString = new StringBuilder(String.valueOf(0)).append(hexString).toString(); } return hexString.toUpperCase(); } /** * byteæ°ç»è½¬float */ public static float bytesToFloat(byte[] bytes) { ByteBuffer buffer = ByteBuffer.wrap(bytes); return buffer.getFloat(); } /** * byteæ°ç»è½¬æ´å */ public static int bytesToDecimal(byte[] byteArray) { int decimalValue = 0; for (int i = 0; i < byteArray.length; i++) { decimalValue = (decimalValue << 8) | (byteArray[i] & 0xFF); } return decimalValue; } /** * byteæ°ç»è½¬Double */ public static double bytesToDouble(byte[] byteArray) { long longBits = 0; // æ ¹æ®åèæ°ç»çé¿åº¦ååè顺åºï¼å°åèæ°ç»è½¬æ¢ä¸ºé¿æ´å for (int i = 0; i < byteArray.length; i++) { longBits |= (long) (byteArray[i] & 0xFF) << (8 * (byteArray.length - 1 - i)); } // 使ç¨Double.longBitsToDoubleæ¹æ³å°é¿æ´å转æ¢ä¸ºDoubleç±»å return Double.longBitsToDouble(longBits); } /** * 大端转å°ç«¯ */ public static byte[] toLittleEndian(byte[] bigEndianBytes) { byte[] littleEndianBytes = new byte[bigEndianBytes.length]; for (int i = 0; i < bigEndianBytes.length; i++) { int j = bigEndianBytes.length - i - 1; littleEndianBytes[i] = bigEndianBytes[j]; } return littleEndianBytes; } } src/main/java/com/ard/utils/DateUtils.java
@@ -1,16 +1,201 @@ package com.ard.utils; import org.apache.commons.lang3.time.DateFormatUtils; import java.time.LocalDateTime; import java.lang.management.ManagementFactory; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; import java.time.format.DateTimeFormatter; import java.util.Date; /** * @Description: æ¶é´å¤çå·¥å · * @ClassName: DateUtils * @Author: åèä¹ * @Date: 2023å¹´06æ06æ¥10:04 * @Version: 1.0 **/ public class DateUtils { * @ClassName DateUtils * @Description: è¿æ¯ä¸ä¸ªæ¶é´å·¥å ·ç±» * @Author åèä¹ * @Date 2023/2/16 21:58 * @Version 1.0 */ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { public static String YYYY = "yyyy"; public static String YYYY_MM = "yyyy-MM"; public static String YYYY_MM_DD = "yyyy-MM-dd"; public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; /** * è·åå½åDate忥æ * * @return Date() å½åæ¥æ */ public static Date getNowDate() { return new Date(); } /** * è·åå½åæ¥æ, é»è®¤æ ¼å¼ä¸ºyyyy-MM-dd * * @return String */ public static String getDate() { return dateTimeNow(YYYY_MM_DD); } public static final String getTime() { return dateTimeNow(YYYY_MM_DD_HH_MM_SS); } public static final String dateTimeNow() { return dateTimeNow(YYYYMMDDHHMMSS); } public static final String dateTimeNow(final String format) { return parseDateToStr(format, new Date()); } public static final String dateTime(final Date date) { return parseDateToStr(YYYY_MM_DD, date); } public static final String parseDateToStr(final String format, final Date date) { return new SimpleDateFormat(format).format(date); } public static final Date dateTime(final String format, final String ts) { try { return new SimpleDateFormat(format).parse(ts); } catch (ParseException e) { throw new RuntimeException(e); } } /** * æ¥æè·¯å¾ å³å¹´/æ/æ¥ å¦2018/08/08 */ public static final String datePath() { Date now = new Date(); return DateFormatUtils.format(now, "yyyy/MM/dd"); } /** * æ¥æè·¯å¾ å³å¹´/æ/æ¥ å¦20180808 */ public static final String dateTime() { Date now = new Date(); return DateFormatUtils.format(now, "yyyyMMdd"); } /** * æ¥æåå符串转åä¸ºæ¥æ æ ¼å¼ */ public static Date parseDate(Object str) { if (str == null) { return null; } try { return parseDate(str.toString(), parsePatterns); } catch (ParseException e) { return null; } } /** * è·åæå¡å¨å¯å¨æ¶é´ */ public static Date getServerStartDate() { long time = ManagementFactory.getRuntimeMXBean().getStartTime(); return new Date(time); } /** * 计ç®ç¸å·®å¤©æ° */ public static int differentDaysByMillisecond(Date date1, Date date2) { return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); } /** * 计ç®ä¸¤ä¸ªæ¶é´å·® */ public static String getDatePoor(Date endDate, Date nowDate) { long nd = 1000 * 24 * 60 * 60; long nh = 1000 * 60 * 60; long nm = 1000 * 60; // long ns = 1000; // è·å¾ä¸¤ä¸ªæ¶é´çæ¯«ç§æ¶é´å·®å¼ long diff = endDate.getTime() - nowDate.getTime(); // 计ç®å·®å¤å°å¤© long day = diff / nd; // 计ç®å·®å¤å°å°æ¶ long hour = diff % nd / nh; // 计ç®å·®å¤å°åé long min = diff % nd % nh / nm; // 计ç®å·®å¤å°ç§//è¾åºç»æ // long sec = diff % nd % nh % nm / ns; return day + "天" + hour + "å°æ¶" + min + "åé"; } /** * å¢å LocalDateTime ==> Date */ public static Date toDate(LocalDateTime temporalAccessor) { ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); return Date.from(zdt.toInstant()); } /** * å¢å LocalDate ==> Date */ public static Date toDate(LocalDate temporalAccessor) { LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); return Date.from(zdt.toInstant()); } //SDKæ¶é´è§£æ public static String parseTime(int time) { int year=(time>>26)+2000; int month=(time>>22)&15; int day=(time>>17)&31; int hour=(time>>12)&31; int min=(time>>6)&63; int second=(time>>0)&63; String sTime=String.format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, min, second); return sTime; } /** * æ¥æåç¬¦ä¸²çææ¥æ¶åç§èªå¨è¡¥é¶,å¹¶å°/æ¿æ¢æ- src/main/java/com/ard/utils/GisUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ard.utils; import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.GeodeticCalculator; import org.gavaghan.geodesy.GlobalCoordinates; /** * @Description: giså·¥å ·ç±» * @ClassName: GisUtils * @Author: åèä¹ * @Date: 2023å¹´07æ03æ¥15:23 * @Version: 1.0 **/ public class GisUtils { /** * éè¿Aç¹åæ ï¼é¿åº¦åYè½´è§åº¦è®¡ç®Bç¹åæ */ public static Double[] CalculateCoordinates(Double[] radarCoordinates, Double distance, Double angle) { double[] to_wgs84 = LonlatConver.gcj02_To_Wgs84(radarCoordinates[0], radarCoordinates[1]); double Ax = to_wgs84[0]; // A ç¹ç X åæ double Ay = to_wgs84[1]; // A ç¹ç Y åæ double AB = distance; // AB çé¿åº¦ double angleWithYAxisDegrees = angle; // AB ä¸ Y è½´çè§åº¦ï¼ä»¥åº¦æ°è¡¨ç¤ºï¼ GeodeticCalculator calculator = new GeodeticCalculator(); GlobalCoordinates globalCoordinates = new GlobalCoordinates(Ay, Ax); GlobalCoordinates globalCoordinates1 = calculator.calculateEndingGlobalCoordinates(Ellipsoid.WGS84, globalCoordinates, angleWithYAxisDegrees, AB); return new Double[]{globalCoordinates1.getLongitude(), globalCoordinates1.getLatitude()}; } } src/main/java/com/ard/utils/LonlatConver.java
@@ -1,6 +1,11 @@ package com.ard.utils; /** * ç»çº¬åº¦è½¬æ¢å·¥å · * åèä¹ * 2023/7/3 15:15 */ public class LonlatConver { /** * a */ src/main/java/com/ard/utils/SpringTool.java
@@ -4,6 +4,9 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; import java.nio.ByteBuffer; /** * @Description: * @ClassName: SpringTool @@ -33,20 +36,4 @@ return getApplicationContext().getBean(name); } /** * Byteåè转Hex * @param b åè * @return Hex */ public static String byteToHex(byte b) { String hexString = Integer.toHexString(b & 0xFF); //ç±äºåå è¿å¶æ¯ç±0~9ãA~Fæ¥è¡¨ç¤º1~16ï¼æä»¥å¦æByteè½¬æ¢æHexå妿æ¯<16,就伿¯ä¸ä¸ªåç¬¦ï¼æ¯å¦A=10ï¼ï¼é常æ¯ä½¿ç¨ä¸¤ä¸ªå符æ¥è¡¨ç¤º16è¿å¶ä½ç, //åå¦ä¸ä¸ªå符çè¯ï¼éå°å符串11ï¼è¿å°åºæ¯1个åèï¼è¿æ¯1å1两个åèï¼å®¹ææ··æ·ï¼å¦ææ¯è¡¥0ï¼é£ä¹1å1è¡¥å åå°±æ¯0101ï¼11就表示纯粹ç11 if (hexString.length() < 2) { hexString = new StringBuilder(String.valueOf(0)).append(hexString).toString(); } return hexString.toUpperCase(); } } src/main/java/com/ard/utils/mqtt/MqttConsumer.java
@@ -75,7 +75,7 @@ // 设置ä¼è¯å¿è·³æ¶é´ options.setKeepAliveInterval(PropertiesUtil.MQTT_KEEP_ALIVE); // æ¯å¦æ¸ é¤session options.setCleanSession(false); options.setCleanSession(true); log.info("--çæmqtté 置对象"); return options; } src/main/java/com/ard/utils/tcp/MessageParsing.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,96 @@ package com.ard.utils.tcp; import javax.xml.bind.DatatypeConverter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @Description: æ¥æè§£æ * @ClassName: MessageParsing * @Author: åèä¹ * @Date: 2023å¹´07æ03æ¥15:30 * @Version: 1.0 **/ public class MessageParsing { // å建ç¼å²åºå表 private static List<Byte> buffer = new ArrayList<>(); /** * æ¥æ¶å®æ´å */ public static byte[] receiveCompletePacket(byte[] receivedData) { // å®ä¹å å°¾åèåºå byte[] packetEnd = {0x01, 0x02, 0x00}; // æ·»å å·²æ¥æ¶çæ°æ®å°ç¼å²åº for (byte data : receivedData) { buffer.add(data); } // æ£æ¥ç¼å²åºä¸çæ°æ®æ¯å¦å å«å®æ´çå while (buffer.size() >= packetEnd.length) { int endIndex = findPacketEndIndex(buffer, packetEnd); if (endIndex != -1) { // æ¾å°å®æ´çå byte[] packet = extractPacketFromBuffer(buffer, endIndex + packetEnd.length); return packet; } else { // æªæ¾å°å å°¾ï¼ç»§ç»æ¥æ¶æ°æ® break; } } // æªæ¾å°å®æ´çå return null; } /** * è·åå ç»æç´¢å¼ */ public static int findPacketEndIndex(List<Byte> buffer, byte[] packetEnd) { for (int i = 0; i <= buffer.size() - packetEnd.length; i++) { boolean isMatch = true; for (int j = 0; j < packetEnd.length; j++) { if (buffer.get(i + j) != packetEnd[j]) { isMatch = false; break; } } if (isMatch) { return i; } } return -1; } /** * ä»ç¼å²åºæåæ°æ®å */ public static byte[] extractPacketFromBuffer(List<Byte> buffer, int endIndex) { byte[] packet = new byte[endIndex]; for (int i = 0; i < endIndex; i++) { packet[i] = buffer.get(i); } buffer.subList(0, endIndex).clear(); return packet; } /** * 廿å 头åå å°¾æ ¡éªåè½¬ä¹ */ public static byte[] transferData(byte[] data) { data = Arrays.copyOfRange(data, 3, data.length); data = Arrays.copyOfRange(data, 0, data.length - 7); String dataStr = DatatypeConverter.printHexBinary(data); if (dataStr.contains("01020201")) {//转ä¹01020201 dataStr = dataStr.replaceAll("01020201", "010201"); } if (dataStr.contains("01020200")) {//转ä¹01020200 dataStr = dataStr.replaceAll("01020200", "010200"); } if (dataStr.contains("01020202")) {//转ä¹01020202 dataStr = dataStr.replaceAll("01020202", "010202"); } data = DatatypeConverter.parseHexBinary(dataStr); return data; } } src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java
@@ -4,18 +4,14 @@ import com.ard.alarm.radar.domain.ArdEquipRadar; import com.ard.alarm.radar.domain.RadarAlarmData; import com.ard.alarm.radar.domain.ArdAlarmRadar; import com.ard.utils.LonlatConver; import com.ard.utils.ByteUtils; import com.ard.utils.GisUtils; import com.ard.utils.mqtt.MqttConsumer; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.GeodeticCalculator; import org.gavaghan.geodesy.GlobalCoordinates; import javax.xml.bind.DatatypeConverter; import java.nio.ByteBuffer; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ScheduledFuture; @@ -35,6 +31,7 @@ private Integer port; private Double longitude; private Double lagitude; private Double altitude; private String name; private String id; @@ -45,6 +42,7 @@ this.lagitude = ardEquipRadar.getLatitude(); this.name = ardEquipRadar.getName(); this.id = ardEquipRadar.getId(); this.altitude = ardEquipRadar.getAltitude(); } private ChannelHandlerContext context; @@ -55,10 +53,8 @@ // å¤çæ¥æ¶å°çæ¶æ¯ byte[] byteArray = new byte[msg.readableBytes()]; msg.getBytes(msg.readerIndex(), byteArray); byte[] bytes = receiveCompletePacket(byteArray); byte[] bytes = MessageParsing.receiveCompletePacket(byteArray); if (bytes != null) { // String hexString = DatatypeConverter.printHexBinary(bytes); // log.info(hexString); processData(bytes); } } @@ -109,7 +105,9 @@ */ public void processData(byte[] data) { try { data = transferData(data);//廿å 头åå å°¾ãæ ¡éªåè½¬ä¹ //log.info("åå§æ°æ®:" + DatatypeConverter.printHexBinary(data)); log.info("é·è¾¾ä¿¡æ¯ï¼" + host + "ãportã" + port + "ãXã" + longitude + "ãYã" + lagitude + "ãZã" + altitude); data = MessageParsing.transferData(data);//廿å 头åå å°¾ãæ ¡éªåè½¬ä¹ byte[] type = Arrays.copyOfRange(data, 0, 1);//å½ä»¤ç±»å // log.info("å½ä»¤ç±»å:" + DatatypeConverter.printHexBinary(type)); @@ -118,40 +116,41 @@ // log.info("å½ä»¤ID:" + DatatypeConverter.printHexBinary(cmdId)); byte[] payloadSize = Arrays.copyOfRange(data, 2, 4);//ææè´è½½å¤§å° payloadSize = toLittleEndian(payloadSize); int payloadSizeToDecimal = byteArrayToDecimal(payloadSize); payloadSize = ByteUtils.toLittleEndian(payloadSize); int payloadSizeToDecimal = ByteUtils.bytesToDecimal(payloadSize); // log.info("ææè´è½½å¤§å°(转æ´å):" + payloadSizeToDecimal); List<ArdAlarmRadar> radarAlarmInfos = new ArrayList<>(); String alarmTime=""; if (Arrays.equals(cmdId, new byte[]{0x01})) { byte[] dwTim = Arrays.copyOfRange(data, 4, 8); dwTim = toLittleEndian(dwTim); dwTim = ByteUtils.toLittleEndian(dwTim); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long l = byteArrayToDecimal(dwTim); String alarmTime = sdf.format(l * 1000); long l = ByteUtils.bytesToDecimal(dwTim); alarmTime = sdf.format(l * 1000); // log.info("å¨è§å¾åçåºç°æ¶é´(转date):" + alarmTime); byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10); wTargetNum = toLittleEndian(wTargetNum); int targetNum = byteArrayToDecimal(wTargetNum); wTargetNum = ByteUtils.toLittleEndian(wTargetNum); int targetNum = ByteUtils.bytesToDecimal(wTargetNum); //log.info("ç®æ æ»ç¹æ°(转æ´å):" + targetNum); //è§£æNET_TARGET_UNIT(64æ¯NET_TARGET_HEADçåèæ°) int uintSize = (payloadSizeToDecimal - 64) / targetNum; // 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); dwID = ByteUtils.toLittleEndian(dwID); int id = ByteUtils.bytesToDecimal(dwID); // log.info("ç®æ IDå·ï¼" + id); byte[] iDistance = Arrays.copyOfRange(data, index + 8, index + 12); iDistance = toLittleEndian(iDistance); int Distance = byteArrayToDecimal(iDistance); iDistance = ByteUtils.toLittleEndian(iDistance); Double Distance = ByteUtils.bytesToDouble(iDistance); // log.info("ç®æ å½åè·ç¦»(m):" + Distance); //region ä¸éè¦çåæ®µ // byte[] dwGSum = Arrays.copyOfRange(data, index + 4, index + 8); @@ -200,7 +199,7 @@ //endregion String alarmType = ""; byte[] cStat = Arrays.copyOfRange(data, index + 23, index + 24); cStat = toLittleEndian(cStat); cStat = ByteUtils.toLittleEndian(cStat); String binaryString = String.format("%8s", Integer.toBinaryString(cStat[0] & 0xFF)).replace(' ', '0'); // log.info("ç®æ å½åç¶æ:" + binaryString); // æå第4ä½è³ç¬¬6ä½çå¼ @@ -215,7 +214,7 @@ byte[] szName = Arrays.copyOfRange(data, index + 64, index + 96); int position = findIndexOfDoubleZero(szName); String alarmPointName = ""; String alarmPointName; if (position != -1) { byte[] result = new byte[position]; System.arraycopy(szName, 0, result, 0, position); @@ -225,16 +224,15 @@ } // log.info("æå±åè¦åºååç§°:" + alarmPointName); byte[] afTx = Arrays.copyOfRange(data, index + 96, index + 100); afTx = toLittleEndian(afTx); float fTx = bytesToFloat(afTx); afTx = ByteUtils.toLittleEndian(afTx); float fTx = ByteUtils.bytesToFloat(afTx); // log.info("æ°´å¹³è§åº¦:" + fTx); byte[] afTy = Arrays.copyOfRange(data, index + 112, index + 116); afTy = toLittleEndian(afTy); float fTy = bytesToFloat(afTy); afTy = ByteUtils.toLittleEndian(afTy); float fTy = ByteUtils.bytesToFloat(afTy); // log.info("åç´è§åº¦:" + fTy); // log.info("é·è¾¾ä¿¡æ¯ï¼" + host + "ãportã" + port + "ãXã" + longitude + "ãYã" + lagitude); Double[] radarXY = {longitude, lagitude}; Double[] alarmXY = CalculateCoordinates(radarXY, Distance, (double) fTx); Double[] alarmXY = GisUtils.CalculateCoordinates(radarXY, Distance, (double) fTx); // 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); @@ -244,134 +242,109 @@ ardAlarmRadar.setAlarmType(alarmType); radarAlarmInfos.add(ardAlarmRadar); } RadarAlarmData radarAlarmData = new RadarAlarmData(); radarAlarmData.setRadarId(id); radarAlarmData.setRadarName(name); radarAlarmData.setAlarmTime(alarmTime); radarAlarmData.setArdAlarmRadars(radarAlarmInfos); MqttConsumer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData)); } } catch (Exception ex) { log.error(ex.getMessage()); } } if (Arrays.equals(cmdId, new byte[]{0x04})) { //String hexString = DatatypeConverter.printHexBinary(data); //log.info(hexString); /** * byteæ°ç»è½¬float */ private float bytesToFloat(byte[] bytes) { ByteBuffer buffer = ByteBuffer.wrap(bytes); return buffer.getFloat(); } byte[] dwTim = Arrays.copyOfRange(data, 4, 8); dwTim = ByteUtils.toLittleEndian(dwTim); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long l = ByteUtils.bytesToDecimal(dwTim); alarmTime = sdf.format(l * 1000); //log.info("å¨è§å¾åçåºç°æ¶é´(转date):" + alarmTime); byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10); wTargetNum = ByteUtils.toLittleEndian(wTargetNum); int targetNum = ByteUtils.bytesToDecimal(wTargetNum); //log.info("ç®æ æ»ç¹æ°(转æ´å):" + targetNum); /** * byteæ°ç»è½¬æ´å */ public int byteArrayToDecimal(byte[] byteArray) { int decimalValue = 0; //è§£æNET_TARGET_UNIT(64æ¯NET_TARGET_HEADçåèæ°) int uintSize = (payloadSizeToDecimal - 64) / targetNum; //log.info("åæ¡æ¥è¦å¤§å°:" + uintSize); 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(dwID)); dwID = ByteUtils.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); int Tw = ByteUtils.bytesToDecimal(iTw); // log.info("ç®æ å½åçåç´ å®½åº¦:" + Tw); for (int i = 0; i < byteArray.length; i++) { decimalValue = (decimalValue << 8) | (byteArray[i] & 0xFF); } byte[] iTh = Arrays.copyOfRange(data, index + 8, index + 12); iTh = ByteUtils.toLittleEndian(iTh); int Th = ByteUtils.bytesToDecimal(iTh); //log.info("ç®æ å½åçåç´ é«åº¦:" + Th); return decimalValue; } byte[] fTx = Arrays.copyOfRange(data, index + 12, index + 16); fTx = ByteUtils.toLittleEndian(fTx); float fTxAngle = ByteUtils.bytesToFloat(fTx); //log.info("pè§åº¦:" + fTxAngle); byte[] fTy = Arrays.copyOfRange(data, index + 16, index + 20); fTy = ByteUtils.toLittleEndian(fTy); float fTyAngle = ByteUtils.bytesToFloat(fTy); //log.info("tè§åº¦:" + fTyAngle); /** * 大端转å°ç«¯ */ public byte[] toLittleEndian(byte[] bigEndianBytes) { byte[] littleEndianBytes = new byte[bigEndianBytes.length]; byte[] sAreaNo = Arrays.copyOfRange(data, index + 20, index + 22); sAreaNo = ByteUtils.toLittleEndian(sAreaNo); int AreaNo = ByteUtils.bytesToDecimal(sAreaNo); //log.info("ç®æ å½å±çåè¦åºåå·:" + AreaNo); for (int i = 0; i < bigEndianBytes.length; i++) { int j = bigEndianBytes.length - i - 1; littleEndianBytes[i] = bigEndianBytes[j]; } byte[] cGrp = Arrays.copyOfRange(data, index + 22, index + 23); cGrp = ByteUtils.toLittleEndian(cGrp); int Grp = ByteUtils.bytesToDecimal(cGrp); //log.info("æå±ç»:" + Grp); //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); // æå第0ä½å¼ // 使ç¨ä½è¿ç®æä½å¤æç¬¬0使¯å¦ä¸º1 boolean isBitSet = (cStat[0] & 0x01) == 0x00; // 夿æåçå¼ if (isBitSet) { alarmType = "é·è¾¾æ½æ²¹æºåæº"; } else { continue; } //log.info("æ¥è¦ç±»å:" + alarmType); return littleEndianBytes; } // å建ç¼å²åºå表 List<Byte> buffer = new ArrayList<>(); /** * æ¥æ¶å®æ´å */ public byte[] receiveCompletePacket(byte[] receivedData) { // å®ä¹å å°¾åèåºå byte[] packetEnd = {0x01, 0x02, 0x00}; // æ·»å å·²æ¥æ¶çæ°æ®å°ç¼å²åº for (byte data : receivedData) { buffer.add(data); } // æ£æ¥ç¼å²åºä¸çæ°æ®æ¯å¦å å«å®æ´çå while (buffer.size() >= packetEnd.length) { int endIndex = findPacketEndIndex(buffer, packetEnd); if (endIndex != -1) { // æ¾å°å®æ´çå byte[] packet = extractPacketFromBuffer(buffer, endIndex + packetEnd.length); return packet; } else { // æªæ¾å°å å°¾ï¼ç»§ç»æ¥æ¶æ°æ® break; } } // æªæ¾å°å®æ´çå return null; } /** * è·åå ç»æç´¢å¼ */ public int findPacketEndIndex(List<Byte> buffer, byte[] packetEnd) { for (int i = 0; i <= buffer.size() - packetEnd.length; i++) { boolean isMatch = true; for (int j = 0; j < packetEnd.length; j++) { if (buffer.get(i + j) != packetEnd[j]) { isMatch = false; break; byte[] szName = Arrays.copyOfRange(data, index + 32, index + 64); //log.info("æå±åè¦åºååç§°:" + DatatypeConverter.printHexBinary(szName)); int position = findIndexOfDoubleZero(szName); String alarmPointName; if (position != -1) { byte[] result = new byte[position]; System.arraycopy(szName, 0, result, 0, position); alarmPointName = new String(result, "GBK"); } else { alarmPointName = new String(szName, "GBK"); } // log.info("æå±åè¦åºååç§°:" + alarmPointName); //log.info("æ¥è¦ä¿¡æ¯ï¼" + "ãidã" + id + "ãnameã" + alarmPointName + "ãalarmTypeã" + alarmType + "ãalarmTimeã" + alarmTime); ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar(); ardAlarmRadar.setTargetId(id); ardAlarmRadar.setName(alarmPointName); ardAlarmRadar.setAlarmType(alarmType); radarAlarmInfos.add(ardAlarmRadar); } } if (isMatch) { return i; } RadarAlarmData radarAlarmData = new RadarAlarmData(); radarAlarmData.setRadarId(id); radarAlarmData.setRadarName(name); radarAlarmData.setAlarmTime(alarmTime); radarAlarmData.setArdAlarmRadars(radarAlarmInfos); MqttConsumer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData)); } catch (Exception ex) { log.error("é·è¾¾æ¥æè§£æå¼å¸¸:" + ex.getMessage()); } return -1; } /** * ä»ç¼å²åºæåæ°æ®å */ public byte[] extractPacketFromBuffer(List<Byte> buffer, int endIndex) { byte[] packet = new byte[endIndex]; for (int i = 0; i < endIndex; i++) { packet[i] = buffer.get(i); } buffer.subList(0, endIndex).clear(); return packet; } /** * 廿å 头åå å°¾æ ¡éªåè½¬ä¹ */ public byte[] transferData(byte[] data) { data = Arrays.copyOfRange(data, 3, data.length); data = Arrays.copyOfRange(data, 0, data.length - 7); String dataStr = DatatypeConverter.printHexBinary(data); if (dataStr.contains("01020201")) {//转ä¹01020201 dataStr = dataStr.replaceAll("01020201", "010201"); } if (dataStr.contains("01020200")) {//转ä¹01020200 dataStr = dataStr.replaceAll("01020200", "010200"); } if (dataStr.contains("01020202")) {//转ä¹01020202 dataStr = dataStr.replaceAll("01020202", "010202"); } data = DatatypeConverter.parseHexBinary(dataStr); return data; } /** @@ -384,21 +357,6 @@ } } return -1; } /** * éè¿Aç¹åæ ï¼é¿åº¦åYè½´è§åº¦è®¡ç®Bç¹åæ */ public Double[] CalculateCoordinates(Double[] radarCoordinates, Integer distance, Double angle) { double[] to_wgs84 = LonlatConver.gcj02_To_Wgs84(radarCoordinates[0], radarCoordinates[1]); double Ax = to_wgs84[0]; // A ç¹ç X åæ double Ay = to_wgs84[1]; // A ç¹ç Y åæ double AB = distance; // AB çé¿åº¦ double angleWithYAxisDegrees = angle; // AB ä¸ Y è½´çè§åº¦ï¼ä»¥åº¦æ°è¡¨ç¤ºï¼ GeodeticCalculator calculator = new GeodeticCalculator(); GlobalCoordinates globalCoordinates = new GlobalCoordinates(Ay, Ax); GlobalCoordinates globalCoordinates1 = calculator.calculateEndingGlobalCoordinates(Ellipsoid.WGS84, globalCoordinates, angleWithYAxisDegrees, AB); return new Double[]{globalCoordinates1.getLongitude(), globalCoordinates1.getLatitude()}; } } src/main/resources/application.yml
@@ -9,7 +9,7 @@ enabled: true mqtt: host: tcp://192.168.1.15:1883 clientId: c3 clientId: cc3 username: admin password: xzx12345 topic: tube @@ -20,12 +20,12 @@ url: http://iot.zhdk.net:8090/Warning/GetWarning?userName=cy4oil datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://111.40.46.199:15432/ry-vue?stringtype=unspecified username: postgres password: Yykj.2021 # url: jdbc:postgresql://192.168.1.15:5432/ry-vue?stringtype=unspecified # url: jdbc:postgresql://111.40.46.199:15432/ry-vue?stringtype=unspecified # username: postgres # password: postgres # password: Yykj.2021 url: jdbc:postgresql://192.168.1.15:5432/ry-vue?stringtype=unspecified username: postgres password: postgres mybatis: typeAliasesPackage: com.ard.alarm.**.domain mapperLocations: classpath:/mapper/*.xml