Dockerfile | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/hiksdk/domain/FaceMatchEventInfo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/hiksdk/domain/FaceSnapEventInfo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ard/utils/tcp/ClientHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Dockerfile
ÎļþÒÑɾ³ý pom.xml
@@ -139,17 +139,6 @@ </configuration> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <repository>${docker.image.prefix}/${project.artifactId}</repository> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.1</version> src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java
@@ -12,13 +12,7 @@ * @date 2023-03-13 */ public interface IArdEquipExternalService { /** * æ¥è¯¢external * * @param id externalä¸»é® * @return external */ public ArdEquipExternal selectArdEquipExternalById(String id); /** * æ¥è¯¢external @@ -29,11 +23,11 @@ public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal); /** * æ¥è¯¢externalå表 * æ¥è¯¢externalå表æç±»åå表 * * @param ardEquipExternal external * @param types ç±»åå表 * @return externaléå */ public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal); public List<ArdEquipExternal> selectArdEquipExternalListByTypes(List<String> types); } src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java
@@ -35,35 +35,17 @@ private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); public static List<ArdEquipExternal> ardAlarmHostList = new ArrayList<>(); public static List<ArdEquipExternal> ardAccessHostList = new ArrayList<>(); public static List<ArdEquipExternal> ardSuperBrainHostList = new ArrayList<>(); public static List<ArdEquipExternal> ardEquipExternalList = new ArrayList<>(); @Resource private ArdEquipExternalMapper ardEquipExternalMapper; @Override public void run(ApplicationArguments args) { //è·åå ¨é¨æµ·åº·æ¥è¦ä¸»æºå°è¯ç»å½ ArdEquipExternal alarmHost = new ArdEquipExternal(); alarmHost.setFactory("1"); alarmHost.setType("1"); ardAlarmHostList = selectArdEquipExternalList(alarmHost); HikClientUtil.loginAllAlarmHost(ardAlarmHostList); log.debug("æ¥è¦ä¸»æºå°è¯ç»å½"); //è·åå ¨é¨é¨ç¦ä¸»æºå°è¯ç»å½ ArdEquipExternal accessControlHost = new ArdEquipExternal(); accessControlHost.setFactory("1"); accessControlHost.setType("6"); ardAccessHostList = selectArdEquipExternalList(accessControlHost); HikClientUtil.loginAllAccessControlHost(ardAccessHostList); log.debug("é¨ç¦ä¸»æºå°è¯ç»å½"); //è·åå ¨é¨è¶ èå°è¯ç»å½ ArdEquipExternal superBrainHost = new ArdEquipExternal(); superBrainHost.setFactory("1"); superBrainHost.setType("5"); ardSuperBrainHostList = selectArdEquipExternalList(superBrainHost); HikClientUtil.loginAllSuperBrainHost(ardSuperBrainHostList); log.debug("è¶ èå°è¯ç»å½"); List<String> targetTypes = Arrays.asList("1", "5", "6"); List<ArdEquipExternal> ardEquipExternals = selectArdEquipExternalListByTypes(targetTypes); HikClientUtil.loginAllArdEquipExternals(ardEquipExternals); ardEquipExternalList.addAll(ardEquipExternals); log.debug("å¤è设å¤å°è¯ç»å½"); //åæ¥ä»»å¡ syncTask(); } @@ -76,94 +58,31 @@ private void syncTask() { scheduler.scheduleAtFixedRate(() -> { try { //region 宿¶åæ¥æ¥è¦ä¸»æº ArdEquipExternal alarmHost = new ArdEquipExternal(); alarmHost.setFactory("1"); alarmHost.setType("1"); List<ArdEquipExternal> newAlarmHostList = selectArdEquipExternalList(alarmHost); //region 宿¶åæ¥å¤èè®¾å¤ List<String> targetTypes = Arrays.asList("1", "5", "6"); List<ArdEquipExternal> ardEquipExternalsNew = selectArdEquipExternalListByTypes(targetTypes); //éè¦æ´æ°çæ°æ® List<ArdEquipExternal> updateList = sameListWithDifferent(ardAlarmHostList, newAlarmHostList); List<ArdEquipExternal> updateList = sameListWithDifferent(ardEquipExternalList, ardEquipExternalsNew); if (updateList.size() > 0) { HikClientUtil.logoutAllAlarmHost(updateList); HikClientUtil.loginAllAlarmHost(updateList); ardAlarmHostList.clear(); ardAlarmHostList.addAll(newAlarmHostList); HikClientUtil.logoutAllArdEquipExternals(updateList); HikClientUtil.loginAllArdEquipExternals(updateList); ardEquipExternalList.clear(); ardEquipExternalList.addAll(ardEquipExternalsNew); } //éè¦å é¤çæ°æ® List<ArdEquipExternal> delList = diffList(ardAlarmHostList, newAlarmHostList); List<ArdEquipExternal> delList = diffList(ardEquipExternalList, ardEquipExternalsNew); if (delList.size() > 0) { HikClientUtil.logoutAllAlarmHost(delList); HikClientUtil.logoutAllArdEquipExternals(delList); for (ArdEquipExternal ardEquipExternal : delList) { ardAlarmHostList.remove(ardEquipExternal); ardEquipExternalList.remove(ardEquipExternal); } } //éè¦æ°å¢çæ°æ® List<ArdEquipExternal> inserList = diffList(newAlarmHostList, ardAlarmHostList); List<ArdEquipExternal> inserList = diffList(ardEquipExternalsNew, ardEquipExternalList); if (inserList.size() > 0) { HikClientUtil.loginAllAlarmHost(inserList); HikClientUtil.loginAllArdEquipExternals(inserList); for (ArdEquipExternal ardEquipExternal : inserList) { ardAlarmHostList.add(ardEquipExternal); } } //endregion //region 宿¶åæ¥é¨ç¦ä¸»æº ArdEquipExternal accessHost = new ArdEquipExternal(); accessHost.setFactory("1"); accessHost.setType("6"); List<ArdEquipExternal> newAccessHostList = selectArdEquipExternalList(accessHost); //éè¦æ´æ°çæ°æ® updateList = sameListWithDifferent(ardAccessHostList, newAccessHostList); if (updateList.size() > 0) { HikClientUtil.logoutAllAlarmHost(updateList); HikClientUtil.loginAllAlarmHost(updateList); ardAccessHostList.clear(); ardAccessHostList.addAll(newAccessHostList); } //éè¦å é¤çæ°æ® delList = diffList(ardAccessHostList, newAccessHostList); if (delList.size() > 0) { HikClientUtil.logoutAllAccessControlHost(delList); for (ArdEquipExternal ardEquipExternal : delList) { ardAccessHostList.remove(ardEquipExternal); } } //éè¦æ°å¢çæ°æ® inserList = diffList(newAccessHostList, ardAccessHostList); if (inserList.size() > 0) { HikClientUtil.loginAllAccessControlHost(inserList); for (ArdEquipExternal ardEquipExternal : inserList) { ardAccessHostList.add(ardEquipExternal); } } //endregion //region 宿¶åæ¥è¶ è ArdEquipExternal superBrainHost = new ArdEquipExternal(); superBrainHost.setFactory("1"); superBrainHost.setType("5"); List<ArdEquipExternal> newSuperBrainList = selectArdEquipExternalList(superBrainHost); //éè¦æ´æ°çæ°æ® updateList = sameListWithDifferent(ardSuperBrainHostList, newSuperBrainList); if (updateList.size() > 0) { HikClientUtil.logoutAllSuperBrainHost(updateList); HikClientUtil.loginAllSuperBrainHost(updateList); ardSuperBrainHostList.clear(); ardSuperBrainHostList.addAll(newSuperBrainList); } //éè¦å é¤çæ°æ® delList = diffList(ardSuperBrainHostList, newSuperBrainList); if (delList.size() > 0) { HikClientUtil.logoutAllSuperBrainHost(delList); for (ArdEquipExternal ardEquipExternal : delList) { ardSuperBrainHostList.remove(ardEquipExternal); } } //éè¦æ°å¢çæ°æ® inserList = diffList(newSuperBrainList, ardSuperBrainHostList); if (inserList.size() > 0) { HikClientUtil.loginAllSuperBrainHost(inserList); for (ArdEquipExternal ardEquipExternal : inserList) { ardSuperBrainHostList.add(ardEquipExternal); ardEquipExternalList.add(ardEquipExternal); } } //endregion @@ -173,18 +92,12 @@ }, 10, 10, TimeUnit.SECONDS); } /** * æ¥è¯¢external * * @param id externalä¸»é® * @return external * @param ardEquipExternal external * @return externaléå */ @Override public ArdEquipExternal selectArdEquipExternalById(String id) { return ardEquipExternalMapper.selectById(id); } @Override public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) { QueryWrapper<ArdEquipExternal> queryWrapper = new QueryWrapper<>(ardEquipExternal); @@ -192,17 +105,17 @@ } /** * æ¥è¯¢externalå表 * æç±»åå表æ¥è¯¢externalå表 * * @param ardEquipExternal external * @param types ç±»åå表 * @return external */ @Override public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) { QueryWrapper<ArdEquipExternal> queryWrapper = new QueryWrapper<>(ardEquipExternal); public List<ArdEquipExternal> selectArdEquipExternalListByTypes(List<String> types) { QueryWrapper<ArdEquipExternal> queryWrapper = new QueryWrapper<>(); queryWrapper.in("type", types); return ardEquipExternalMapper.selectList(queryWrapper); } //æ±ä¸¤ä¸ªå¯¹è±¡Listç交éåæ®µä¸åIdç¸å private List<ArdEquipExternal> sameListWithDifferent(List<ArdEquipExternal> oldList, List<ArdEquipExternal> newList) { @@ -224,8 +137,6 @@ return differentFieldsList; } // æ±ä¸¤ä¸ªå¯¹è±¡Listçå·®é private List<ArdEquipExternal> diffList(List<ArdEquipExternal> oldArrayList, List<ArdEquipExternal> newArrayList) { List<ArdEquipExternal> resultList = oldArrayList.stream() src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java
@@ -17,4 +17,5 @@ String radarName; String alarmTime; List<ArdAlarmRadar> ardAlarmRadars; List<ArdAlarmRadar> ardFollowRadars; } src/main/java/com/ard/utils/hiksdk/domain/FaceMatchEventInfo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ard.utils.hiksdk.domain; import lombok.Data; /** * @Description: äººè¸æ¯å¯¹äºä»¶ä¿¡æ¯ * @Version: 1.0 * @ClassName: FaceSnapEventInfo * @Author: åèä¹ * @Date: 2023å¹´11æ10æ¥13:03:22 **/ @Data public class FaceMatchEventInfo { private String alarmType; private String status; private String alarmTime; private String picUrl; } src/main/java/com/ard/utils/hiksdk/domain/FaceSnapEventInfo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ard.utils.hiksdk.domain; import lombok.Data; /** * @Description: * @ClassName: FaceSnapEventInfo * @Author: åèä¹ * @Date: 2023å¹´11æ10æ¥13:03:22 **/ @Data public class FaceSnapEventInfo { private String eventId; private String alarmTime; private String picUrl; } src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
@@ -3,19 +3,16 @@ import com.alibaba.fastjson2.JSON; import com.ard.alarm.camera.domain.ArdCameras; import com.ard.alarm.camera.domain.CameraCmd; import com.ard.alarm.camera.service.IArdCamerasService; import com.ard.alarm.camera.service.impl.ArdCamerasServiceImpl; import com.ard.alarm.external.domain.ArdEquipExternal; import com.ard.alarm.external.service.IArdEquipExternalService; import com.ard.alarm.external.service.impl.ArdEquipExternalServiceImpl; import com.ard.utils.hiksdk.domain.*; import com.ard.utils.minio.MinioUtil; import com.ard.utils.other.ByteUtils; import com.ard.utils.hiksdk.common.GlobalVariable; import com.ard.utils.hiksdk.domain.AccessControlHostEventInfo; import com.ard.utils.hiksdk.domain.CameraEventInfo; import com.ard.utils.hiksdk.domain.ExternalAlarmEventInfo; import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK; import com.ard.utils.other.DateUtils; import com.ard.utils.mqtt.MqttProducer; import com.ard.utils.spring.SpringUtils; import com.ard.utils.uuid.IdUtils; import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; @@ -24,7 +21,9 @@ import java.nio.ByteBuffer; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Optional; import static com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK.*; /** * @ClassName: FMSGCallBack @@ -50,27 +49,41 @@ SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP).trim();//设å¤IPå°å Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort);//设å¤éè®¯ç«¯å£ //éè¿ipåç«¯å£æ¥è¯¢è®¾å¤ Optional<ArdCameras> foundCamera = findArdCameraByIpAndPort(sDeviceIP, wLinkPort); Optional<ArdEquipExternal> foundExternal = findArdEquipExternalByIpAndPort(sDeviceIP, wLinkPort); ArdCameras camera = null; ArdEquipExternal ardEquipExternal = null; if (foundCamera.isPresent()) { camera = foundCamera.get(); } else { if (foundExternal.isPresent()) { ardEquipExternal = foundExternal.get(); } } //å¦ææ²¡ææ¾å°è®¾å¤ï¼ç´æ¥è¿å if (camera == null && ardEquipExternal == null) { return false; } CameraEventInfo info; String sTime;//äºä»¶æ¶é´ String url = "";//äºä»¶å¾ç String alarmTime;//äºä»¶æ¶é´ String alarmType = "";//æ¥è¦ç±»å String picUrl = "";//äºä»¶å¾ç String facePicUrl = "";//人è¸å¾ç //lCommandæ¯ä¼ çæ¥è¦ç±»å log.debug("æ¥è¦äºä»¶ç±»å:lCommand:" + Integer.toHexString(lCommand)); ArdCameras ardCameras = new ArdCameras(); ardCameras.setIp(sDeviceIP); ardCameras.setPort(wLinkPort); IArdCamerasService ardCamerasService = SpringUtils.getBean(IArdCamerasService.class); List<ArdCameras> ardCamerasList = ardCamerasService.selectArdCamerasList(ardCameras); log.debug("ã" + sDeviceIP + ":" + wLinkPort + "ãæ¥è¦äºä»¶ç±»å:lCommand:" + Integer.toHexString(lCommand)); switch (lCommand) { //region ç§»å¨ä¾¦æµãè§é¢ä¸¢å¤±ã鮿¡ãIOä¿¡å·éçæ¥è¦ä¿¡æ¯(V3.0以ä¸çæ¬æ¯æç设å¤) case HCNetSDK.COMM_ALARM_V30: case COMM_ALARM_V30: log.debug("ç§»å¨ä¾¦æµæ¥è¦ä¿¡æ¯ä¸æ¥"); if (camera == null) { return false; } //region ç§»å¨ä¾¦æµãè§é¢ä¸¢å¤±ã鮿¡ãIOä¿¡å·éçæ¥è¦ä¿¡æ¯(V3.0以ä¸çæ¬æ¯æç设å¤) HCNetSDK.NET_DVR_ALARMINFO_V30 netDvrAlarminfoV30 = new HCNetSDK.NET_DVR_ALARMINFO_V30(); netDvrAlarminfoV30.write(); Pointer pNDAInfo = netDvrAlarminfoV30.getPointer(); pNDAInfo.write(0, pAlarmInfo.getByteArray(0, netDvrAlarminfoV30.size()), 0, netDvrAlarminfoV30.size()); netDvrAlarminfoV30.read(); if (ardCamerasList.size() > 0) { ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(0); switch (netDvrAlarminfoV30.dwAlarmType) { case 3: info = new CameraEventInfo(); @@ -86,16 +99,15 @@ info.setLatitude(camera.getLatitude()); info.setAlarmType("ç§»å¨ä¾¦æµ"); //å¾çåå ¥minio url = savePicture(info); info.setPicUrl(url); publishMqtt(info); picUrl = snapPicture(info); info.setPicUrl(picUrl); publishMqtt(info, "camera"); break; } } //endregion break; case HCNetSDK.COMM_ALARM_RULE: //log.debug("è¡ä¸ºåæä¿¡æ¯æ¥è¦ä¿¡æ¯ä¸æ¥"); case COMM_ALARM_RULE: log.debug("å¼å¸¸è¡ä¸ºè¯å«ä¿¡æ¯æ¥è¦ä¿¡æ¯ä¸æ¥"); //region å¼å¸¸è¡ä¸ºè¯å«ä¿¡æ¯ HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM(); strVcaAlarm.write(); @@ -103,14 +115,11 @@ pVCAInfo.write(0, pAlarmInfo.getByteArray(0, strVcaAlarm.size()), 0, strVcaAlarm.size()); strVcaAlarm.read(); Integer ruleID = Integer.valueOf(strVcaAlarm.struRuleInfo.byRuleID); sTime = DateUtils.parseTime(strVcaAlarm.dwAbsTime);//äºä»¶æ¶é´ String ipaddr = new String(strVcaAlarm.struDevInfo.struDevIP.sIpV4).trim();//设å¤ip alarmTime = DateUtils.parseTime(strVcaAlarm.dwAbsTime);//äºä»¶æ¶é´ Integer channel = Integer.valueOf(strVcaAlarm.struDevInfo.byChannel);//éé info = new CameraEventInfo(); info.setAlarmName("人åè¡ä¸ºåæ"); info.setAlarmTime(sTime); if (ardCamerasList.size() > 0) { ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(0); info.setAlarmTime(alarmTime); info.setCameraName(camera.getName()); info.setCameraId(camera.getId()); info.setCameraIp(camera.getIp()); @@ -125,9 +134,9 @@ info.setAlarmType("è¶çä¾¦æµæ¥è¦"); strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_TRAVERSE_PLANE.class); //å¾çåå ¥minio url = savePicture(info); info.setPicUrl(url); publishMqtt(info); picUrl = snapPicture(info); info.setPicUrl(picUrl); publishMqtt(info, "camera"); //endregion break; // case 2: //region ç®æ è¿å ¥åºå @@ -144,9 +153,9 @@ info.setAlarmType("å¨çå ¥ä¾µæ¥è¦"); strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_INTRUSION.class); //å¾çåå ¥minio url = savePicture(info); info.setPicUrl(url); publishMqtt(info); picUrl = snapPicture(info); info.setPicUrl(picUrl); publishMqtt(info, "camera"); //endregion break; // case 5: //region å¾å¾ @@ -174,27 +183,211 @@ // //endregion // break; default: // log.debug("æªç¥è¡ä¸ºäºä»¶ç±»å:" + strVcaAlarm.struRuleInfo.wEventTypeEx); log.debug("æªç¥å¼å¸¸è¡ä¸ºäºä»¶ç±»å:" + strVcaAlarm.struRuleInfo.wEventTypeEx); break; } } //endregion break; case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: //log.debug("äººè¸æ£æµäºä»¶ä¸æ¥(æä¸è§£æ)"); case COMM_UPLOAD_FACESNAP_RESULT: log.debug("äººè¸æææ¥è¦ä¿¡æ¯(æä¸è§£æ)"); //region äººè¸æææ¥è¦ä¿¡æ¯ HCNetSDK.NET_VCA_FACESNAP_RESULT struFaceSnap = new HCNetSDK.NET_VCA_FACESNAP_RESULT(); struFaceSnap.write(); Pointer vcaInfo = struFaceSnap.getPointer(); vcaInfo.write(0, pAlarmInfo.getByteArray(0, struFaceSnap.size()), 0, struFaceSnap.size()); struFaceSnap.read(); alarmTime = DateUtils.parseTime(struFaceSnap.dwAbsTime); String facePicTyp; switch (struFaceSnap.byUploadEventDataType) { case 0: facePicTyp = "äºè¿å¶æ°æ®"; break; case HCNetSDK.COMM_GISINFO_UPLOAD: //log.debug("GPSæ¥è¦ä¿¡æ¯ä¸æ¥(æä¸è§£æ)"); case 1: facePicTyp = "URL"; break; case HCNetSDK.COMM_ALARMHOST_CID_ALARM: default: facePicTyp = ""; break; } if (struFaceSnap.dwFacePicLen > 0 && struFaceSnap.pBuffer1 != null) { //å°åèåå ¥æä»¶ long offset = 0; ByteBuffer buffers = struFaceSnap.pBuffer1.getByteBuffer(offset, struFaceSnap.dwBackgroundPicLen); byte[] bytes = new byte[struFaceSnap.dwBackgroundPicLen]; buffers.rewind(); buffers.get(bytes); InputStream input = new ByteArrayInputStream(bytes); try { String bucketName = "pic"; String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); if (uploadObject) { facePicUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); //log.debug("ä¸ä¼ æä»¶æå!" + url); } } catch (Exception e) { log.error("äººè¸æææ¥è¦ä¿¡æ¯å¾çä¿å失败" + e.getMessage()); } } if (struFaceSnap.dwBackgroundPicLen > 0 && struFaceSnap.pBuffer2 != null) { //å°åèåå ¥æä»¶ long offset = 0; ByteBuffer buffers = struFaceSnap.pBuffer2.getByteBuffer(offset, struFaceSnap.dwBackgroundPicLen); byte[] bytes = new byte[struFaceSnap.dwBackgroundPicLen]; buffers.rewind(); buffers.get(bytes); InputStream input = new ByteArrayInputStream(bytes); try { String bucketName = "pic"; String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); if (uploadObject) { picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); //log.debug("ä¸ä¼ æä»¶æå!" + url); } } catch (Exception e) { log.error("äººè¸æææ¥è¦ä¿¡æ¯å¾çä¿å失败" + e.getMessage()); } } log.debug("ãäººè¸æææ¥è¦ä¿¡æ¯ã: alarmTime:" + alarmTime + " picUrl:" + picUrl + " facePicType:" + facePicTyp + " facePicUrl:" + facePicUrl); FaceSnapEventInfo faceSnapEventInfo = new FaceSnapEventInfo(); faceSnapEventInfo.setAlarmTime(alarmTime); faceSnapEventInfo.setPicUrl(picUrl); publishMqtt(faceSnapEventInfo, "superbrain"); //endregion break; case COMM_SNAP_MATCH_ALARM: log.debug("äººè¸æ¯å¯¹æ¥è¦ä¿¡æ¯"); //region äººè¸æ¯å¯¹æ¥è¦ä¿¡æ¯ HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM struFaceMatchAlarm = new HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM(); struFaceMatchAlarm.write(); Pointer fmaInfo = struFaceMatchAlarm.getPointer(); fmaInfo.write(0, pAlarmInfo.getByteArray(0, struFaceMatchAlarm.size()), 0, struFaceMatchAlarm.size()); struFaceMatchAlarm.read(); alarmTime = DateUtils.parseTime(struFaceMatchAlarm.struSnapInfo.dwAbsTime);//æ¥è¦æ¶é´ int byMatchPicNum = struFaceMatchAlarm.byMatchPicNum;//å¹é å¾çæ°é String picTransType = ""; switch (struFaceMatchAlarm.byPicTransType) { case 0: picTransType = "äºè¿å¶å¾ç"; break; case 1: picTransType = "URLè·¯å¾å¾ç"; break; } String contrastStatus = ""; switch (struFaceMatchAlarm.byContrastStatus) { case 1: contrastStatus = "æ¯å¯¹æå"; break; case 2: contrastStatus = "æ¯å¯¹å¤±è´¥"; break; default: contrastStatus = "æªç¥"; break; } switch (struFaceMatchAlarm.struBlockListInfo.struBlockListInfo.byType) { case 1: alarmType = "éç人æ¥è¦"; break; case 2: alarmType = "äººè¸æ¯å¯¹æ¥è¦"; break; default: alarmType = "æªç¥"; break; } if (struFaceMatchAlarm.dwSnapPicLen > 0 && struFaceMatchAlarm.pSnapPicBuffer != null && struFaceMatchAlarm.byPicTransType == 0) { //å°åèåå ¥æä»¶ long offset = 0; ByteBuffer buffers = struFaceMatchAlarm.pSnapPicBuffer.getByteBuffer(offset, struFaceMatchAlarm.dwSnapPicLen); byte[] bytes = new byte[struFaceMatchAlarm.dwSnapPicLen]; buffers.rewind(); buffers.get(bytes); InputStream input = new ByteArrayInputStream(bytes); try { String bucketName = "pic"; String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); if (uploadObject) { picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); //log.debug("ä¸ä¼ æä»¶æå!" + url); } } catch (Exception e) { log.error("äººè¸æææ¥è¦ä¿¡æ¯å¾çä¿å失败" + e.getMessage()); } } if (struFaceMatchAlarm.struBlockListInfo.dwBlockListPicLen > 0 && struFaceMatchAlarm.struBlockListInfo.pBuffer1 != null) { //å°åèåå ¥æä»¶ long offset = 0; ByteBuffer buffers = struFaceMatchAlarm.struBlockListInfo.pBuffer1.getByteBuffer(offset, struFaceMatchAlarm.struBlockListInfo.dwBlockListPicLen); byte[] bytes = new byte[struFaceMatchAlarm.struBlockListInfo.dwBlockListPicLen]; buffers.rewind(); buffers.get(bytes); InputStream input = new ByteArrayInputStream(bytes); try { String bucketName = "pic"; String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); if (uploadObject) { picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); //log.debug("ä¸ä¼ æä»¶æå!" + url); } } catch (Exception e) { log.error("äººè¸æææ¥è¦ä¿¡æ¯å¾çä¿å失败" + e.getMessage()); } } String sAlarmType = ""; try { sAlarmType = "人è¸é»å忝坹æ¥è¦ï¼ç¸è¯åº¦ï¼" + struFaceMatchAlarm.fSimilarity + "ï¼é»ååå§åï¼" + new String(struFaceMatchAlarm.struBlockListInfo.struBlockListInfo.struAttribute.byName, "GBK").trim() + "ï¼é»ååè¯ä»¶ä¿¡æ¯ï¼" + new String(struFaceMatchAlarm.struBlockListInfo.struBlockListInfo.struAttribute.byCertificateNumber).trim(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } log.debug(sAlarmType); log.debug("ãäººè¸æ¯å¯¹æ¥è¦ä¿¡æ¯ã:" + " æ¯å¯¹ç»æ:" + contrastStatus + " æ¯å¯¹ç±»å:" + alarmType + " æ¥è¦æ¶é´:" + alarmTime + " å¹é å¾çæ°éï¼" + byMatchPicNum + " å¾çç±»åï¼" + picTransType + " æ¯å¯¹å¾ç:" + picUrl); FaceMatchEventInfo faceMatchEventInfo = new FaceMatchEventInfo(); faceMatchEventInfo.setAlarmTime(alarmTime); faceMatchEventInfo.setStatus(contrastStatus); faceMatchEventInfo.setAlarmType(alarmType); publishMqtt(faceMatchEventInfo, "faceMatch"); //endregion break; case COMM_UPLOAD_AIOP_VIDEO: log.debug("è®¾å¤æ¯æAI弿¾å¹³å°æ¥å ¥ï¼ä¸ä¼ è§é¢æ£æµæ°æ®(æä¸è§£æ)"); break; case COMM_ISAPI_ALARM: log.debug("å®å ¨å¸½æ£æµæ¥è¦ä¿¡æ¯"); //region å®å ¨å¸½æ£æµæ¥è¦ä¿¡æ¯ HCNetSDK.NET_DVR_ALARM_ISAPI_INFO struEventISAPI = new HCNetSDK.NET_DVR_ALARM_ISAPI_INFO(); struEventISAPI.write(); Pointer pEventISAPI = struEventISAPI.getPointer(); pEventISAPI.write(0, pAlarmInfo.getByteArray(0, struEventISAPI.size()), 0, struEventISAPI.size()); struEventISAPI.read(); int dwAlarmDataLen = struEventISAPI.dwAlarmDataLen; int byDataType = struEventISAPI.byDataType; int byPicturesNumber = struEventISAPI.byPicturesNumber; //å¤çå®å ¨å¸½æ£æµä¸ä¼ çç §çæ°æ® HCNetSDK.NET_DVR_ALARM_ISAPI_PICDATA struPicData = new HCNetSDK.NET_DVR_ALARM_ISAPI_PICDATA(); struPicData.write(); Pointer pPicData = struPicData.getPointer(); pPicData.write(0, struEventISAPI.pPicPackData.getByteArray(0, struPicData.size()), 0, struPicData.size()); struPicData.read(); log.debug("æ£æµå°å®å ¨å¸½äºä»¶"); //endregion break; case COMM_GISINFO_UPLOAD: log.debug("GPSæ¥è¦ä¿¡æ¯ä¸æ¥(æä¸è§£æ)"); break; case COMM_ALARMHOST_CID_ALARM: log.debug("æ¥è¦ä¸»æºCIDæ¥åæ¥è¦ä¸æ¥"); //region æ¥è¦ä¸»æºæ¥è¦å¤ç ArdEquipExternal ardEquipExternal = new ArdEquipExternal(); ardEquipExternal.setIp(sDeviceIP); ardEquipExternal.setPort(wLinkPort); IArdEquipExternalService ardEquipExternalService = SpringUtils.getBean(IArdEquipExternalService.class); ardEquipExternal = ardEquipExternalService.selectArdEquipExternal(ardEquipExternal); HCNetSDK.NET_DVR_CID_ALARM netDvrCidAlarm = new HCNetSDK.NET_DVR_CID_ALARM(); netDvrCidAlarm.write(); Pointer pCIDInfo = netDvrCidAlarm.getPointer(); @@ -267,36 +460,29 @@ externalAlarmEventInfo.setAlarmType(byReportType); externalAlarmEventInfo.setAlarmTime(struTriggerTime); externalAlarmEventInfo.setAlarmHostId(ardEquipExternal.getId()); publishMqtt(externalAlarmEventInfo); publishMqtt(externalAlarmEventInfo, "external"); //endregion break; case HCNetSDK.COMM_ALARM_ACS: log.debug("é¨ç¦ä¸»æºæ¥è¦ä¸æ¥"); //region é¨ç¦ä¸»æºæ¥è¦å¤ç ArdEquipExternal accessControlHost = new ArdEquipExternal(); accessControlHost.setIp(sDeviceIP); accessControlHost.setPort(wLinkPort); ardEquipExternalService = SpringUtils.getBean(IArdEquipExternalService.class); accessControlHost = ardEquipExternalService.selectArdEquipExternal(accessControlHost); HCNetSDK.NET_DVR_ACS_ALARM_INFO strACSInfo = new HCNetSDK.NET_DVR_ACS_ALARM_INFO(); strACSInfo.write(); Pointer acsInfo = strACSInfo.getPointer(); acsInfo.write(0, pAlarmInfo.getByteArray(0, strACSInfo.size()), 0, strACSInfo.size()); strACSInfo.read(); int dwMajor = strACSInfo.dwMajor; if (dwMajor != 5) { //åªè·åäºä»¶ // log.debug("éäºä»¶æ¥è¦æ°æ®ä¸æ¥(æä¸è§£æ)"); break; } int dwMinor = strACSInfo.dwMinor; if (dwMinor != 80 && dwMinor != 104) { //åªè§£æçäººæ£æµå¤±è´¥åäººè¸ææå¤±è´¥ç次类åäºä»¶ break; } String alarmType = ""; switch (dwMinor) { case 104: alarmType = "çäººæ£æµå¤±è´¥"; @@ -306,7 +492,7 @@ break; } log.debug("é¨ç¦ä¸»æºæ¥è¦ä¸ä¼ :" + alarmType); String alarmTime = DateUtils.convertDate(parseAlarmTime(strACSInfo.struTime), "yyyy-M-d H:m:s"); alarmTime = DateUtils.convertDate(parseAlarmTime(strACSInfo.struTime), "yyyy-M-d H:m:s"); //äºä»¶å¾çå¤ç int dwPicDataLen = strACSInfo.dwPicDataLen; @@ -323,7 +509,7 @@ String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); if (uploadObject) { url = MinioUtil.getBucketObjectUrl(bucketName, objectName); picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); //log.debug("ä¸ä¼ æä»¶æå!" + url); } } catch (Exception e) { @@ -380,9 +566,9 @@ accessControlHostEventInfo.setDoorNo(struAcsEventInfo.dwDoorNo); accessControlHostEventInfo.setDefenseType(defenseType); accessControlHostEventInfo.setAlarmTime(alarmTime); accessControlHostEventInfo.setPicUrl(url); accessControlHostEventInfo.setAcsId(accessControlHost.getId()); publishMqtt(accessControlHostEventInfo); accessControlHostEventInfo.setPicUrl(picUrl); accessControlHostEventInfo.setAcsId(ardEquipExternal.getId()); publishMqtt(accessControlHostEventInfo, "accessControl"); //endregion break; default: @@ -393,11 +579,37 @@ return true; } /** * æ ¹æ®ç»å®çIPå°ååç«¯å£æ¥æ¾ArdEquipExternal对象 * * @param ip IPå°å * @param port ç«¯å£ * @return ArdEquipExternal对象çOptionalï¼å¦ææ¾å°åæå¼ï¼å¦å为空 */ public static Optional<ArdEquipExternal> findArdEquipExternalByIpAndPort(String ip, int port) { return ArdEquipExternalServiceImpl.ardEquipExternalList.stream() .filter(equip -> equip.getIp().equals(ip) && equip.getPort() == port) .findFirst(); } /** * æ ¹æ®IPå°ååç«¯å£æ¥æ¾ArdCamera对象ã * * @param ip IPå°å * @param port ç«¯å£ * @return ArdCamera对象çOptionalï¼å¦ææ¾ä¸å°å为空 */ public static Optional<ArdCameras> findArdCameraByIpAndPort(String ip, int port) { return ArdCamerasServiceImpl.ardCameraList.stream() .filter(camera -> camera.getIp().equals(ip) && camera.getPort() == port) .findFirst(); } /** * ç¸æºæªå¾ */ private String savePicture(CameraEventInfo info) { private String snapPicture(CameraEventInfo info) { CameraCmd cmd = new CameraCmd(); String key = info.getCameraIp() + ":" + info.getCameraPort(); ArdCameras Cameras = GlobalVariable.cameraMap.get(key); @@ -443,27 +655,13 @@ } /** * éç¨å çµæ¥è¦æ¨émqtt * åå¸MQTTæ¶æ¯ * * @param info æ¶æ¯å 容 * @param topic ä¸»é¢ */ private void publishMqtt(CameraEventInfo info) { printLog(info); MqttProducer.publish(2, false, "camera", JSON.toJSONString(info)); } /** * æ¥è¦ä¸»æºäºä»¶æ¨émqtt */ private void publishMqtt(ExternalAlarmEventInfo info) { printLog(info); MqttProducer.publish(2, false, "external", JSON.toJSONString(info)); } /** * é¨ç¦äºä»¶æ¨émqtt */ private void publishMqtt(AccessControlHostEventInfo info) { printLog(info); MqttProducer.publish(2, false, "accessControl", JSON.toJSONString(info)); private <T> void publishMqtt(T info, String topic) { MqttProducer.publish(2, false, topic, JSON.toJSONString(info)); } /** src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
@@ -265,9 +265,6 @@ info.setUsername(accessControlHost.getUsername()); info.setPassword(accessControlHost.getPassword()); login(info); // // String key=accessControlHost.getIp()+":"+accessControlHost.getPort(); // GlobalVariable.accessHostMap.put(key, accessControlHost); } } catch (Exception ex) { log.error("ç»å½ææé¨ç¦ä¸»æºå¼å¸¸ï¼" + ex.getMessage()); @@ -290,13 +287,12 @@ info.setUsername(accessControlHost.getUsername()); info.setPassword(accessControlHost.getPassword()); logout(info); // String key=accessControlHost.getIp()+":"+accessControlHost.getPort(); // GlobalVariable.accessHostMap.remove(key); } } catch (Exception ex) { log.error("ç»åºææé¨ç¦ä¸»æºå¼å¸¸ï¼" + ex.getMessage()); } } /** * @æè¿° ç»å½ææè¶ è * @å建人 åèä¹ @@ -313,9 +309,6 @@ info.setUsername(superBrainHost.getUsername()); info.setPassword(superBrainHost.getPassword()); login(info); // // String key=accessControlHost.getIp()+":"+accessControlHost.getPort(); // GlobalVariable.accessHostMap.put(key, accessControlHost); } } catch (Exception ex) { log.error("ç»å½ææè¶ èå¼å¸¸ï¼" + ex.getMessage()); @@ -345,6 +338,50 @@ log.error("ç»åºææè¶ èå¼å¸¸ï¼" + ex.getMessage()); } } /** * @æè¿° ç»å½ææå¤èè®¾å¤ * @å建人 åèä¹ * @å建æ¶é´ 2023/2/3 10:10 */ public static void loginAllArdEquipExternals(List<ArdEquipExternal> ardEquipExternals) { try { for (ArdEquipExternal ardEquipExternal : ardEquipExternals) { Thread.sleep(100); DeviceInfo info = new DeviceInfo(); info.setDeviceId(ardEquipExternal.getId()); info.setIp(ardEquipExternal.getIp()); info.setPort(ardEquipExternal.getPort()); info.setUsername(ardEquipExternal.getUsername()); info.setPassword(ardEquipExternal.getPassword()); login(info); } } catch (Exception ex) { log.error("ç»å½ææå¤è设å¤å¼å¸¸ï¼" + ex.getMessage()); } } /** * @æè¿° ç»åºææå¤èè®¾å¤ * @å建人 åèä¹ * @å建æ¶é´ 2023/2/3 10:10 */ public static void logoutAllArdEquipExternals(List<ArdEquipExternal> ardEquipExternals) { try { for (ArdEquipExternal ardEquipExternal : ardEquipExternals) { Thread.sleep(100); DeviceInfo info = new DeviceInfo(); info.setDeviceId(ardEquipExternal.getId()); info.setIp(ardEquipExternal.getIp()); info.setPort(ardEquipExternal.getPort()); info.setUsername(ardEquipExternal.getUsername()); info.setPassword(ardEquipExternal.getPassword()); logout(info); } } catch (Exception ex) { log.error("ç»åºææè¶ èå¼å¸¸ï¼" + ex.getMessage()); } } /** * 建ç«å¸é²ä¸ä¼ ééï¼ç¨äºä¼ è¾æ°æ® @@ -375,6 +412,8 @@ m_strAlarmInfo.byAlarmInfoType = 1; // å¸é²ç±»å(ä» é对é¨ç¦ä¸»æºã人è¯è®¾å¤)ï¼0 - 客æ·ç«¯å¸é²(伿ç½ç»ä¼ )ï¼1 - 宿¶å¸é²(åªä¸ä¼ 宿¶æ°æ®) m_strAlarmInfo.byDeployType = 1; //äººè¸æ¥è¦ä¿¡æ¯ç±»åï¼1- 人è¸ä¾¦æµæ¥è¦ 0- äººè¸æææ¥è¦ m_strAlarmInfo.byFaceAlarmDetection = 0; m_strAlarmInfo.write(); // å¸é²æåï¼è¿åå¸é²æåçæ°æ®ä¼ è¾ééå· lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo); src/main/java/com/ard/utils/tcp/ClientHandler.java
@@ -21,6 +21,8 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import static com.ard.utils.other.ByteUtils.toLittleEndian; /** * @Description: 客æ·ç«¯å¤çå¨ * @ClassName: ClientHandler @@ -187,27 +189,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<>(); List<ArdAlarmRadar> radarFollowInfos = new ArrayList<>(); //æ½æ²¹æºç¶æé·è¾¾æ¨ééå 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("å¨è§å¾åçåºç°æ¶é´(转date):" + alarmTime); byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10); wTargetNum = ByteUtils.toLittleEndian(wTargetNum); wTargetNum = toLittleEndian(wTargetNum); targetNum = ByteUtils.bytesToDecimal(wTargetNum); if (targetNum == 0) { return; @@ -223,12 +227,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); @@ -279,9 +283,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; // 夿æåçå¼ @@ -291,16 +293,15 @@ 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); // å°è§åº¦è½¬æ¢ä¸ºå¼§åº¦ @@ -319,6 +320,12 @@ ardAlarmRadar.setLatitude(alarmXY[1]); ardAlarmRadar.setAlarmType(alarmType); radarAlarmInfos.add(ardAlarmRadar); int bit1 = (cStat[0]>>1) & 0x1;; //ç®æ çB1=1 éå® if(bit1==1) { //å°éå®ç®æ æ¾å ¥éå®list radarFollowInfos.add(ardAlarmRadar); } } //endregion if (StringUtils.isEmpty(alarmTime)) { @@ -333,24 +340,30 @@ 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)); } //æ½æ²¹æºç¶æMQTTéå radarAlarmData.setArdAlarmRadars(well); MqttProducer.publish(2, false, "radarWellData", JSON.toJSONString(radarAlarmData)); } //æ½æ²¹æºAIç¶æåé¦ if (Arrays.equals(cmdId, new byte[]{0x04})) { //regionæ½æ²¹æºAIç¶æåé¦ 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("å¨è§å¾åçåºç°æ¶é´(转date):" + 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) { @@ -363,36 +376,36 @@ 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 @@ -400,7 +413,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ä½å¼ @@ -450,18 +463,19 @@ 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); fTy = toLittleEndian(fTy); float ty = ByteUtils.bytesToFloat(fTy); if (ty < 0) { ty += 360;