From 2574db703fa175765394dba9d4e0d623a1bcd16a Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期三, 29 十一月 2023 17:19:57 +0800 Subject: [PATCH] 修复bug --- src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java | 59 +++ /dev/null | 7 src/main/java/com/ard/utils/tcp/ClientHandler.java | 62 ++- src/main/java/com/ard/utils/hiksdk/domain/FaceSnapEventInfo.java | 16 + src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java | 143 ++-------- src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 446 ++++++++++++++++++++++++--------- src/main/java/com/ard/utils/hiksdk/domain/FaceMatchEventInfo.java | 19 + src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java | 14 src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java | 1 pom.xml | 11 10 files changed, 476 insertions(+), 302 deletions(-) diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index f798222..0000000 --- a/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM openjdk:8-jdk-alpine -ARG JAR_FILE=target/*.jar -COPY ${JAR_FILE} ard_alarm.jar -ENV TimeZone=Asia/Shanghai -# 浣跨敤杞繛鎺ワ紝骞朵笖灏嗘椂鍖洪厤缃鐩�/etc/timezone -RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone -ENTRYPOINT ["java","-jar","/ard_alarm.jar"] \ No newline at end of file diff --git a/pom.xml b/pom.xml index 13ace48..4ddcd2e 100644 --- a/pom.xml +++ b/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> diff --git a/src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java b/src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java index db2b2e0..d670221 100644 --- a/src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java +++ b/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); } diff --git a/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java b/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java index 411eaf2..782a1c9 100644 --- a/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java +++ b/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鍒楄〃 + * 鎸夌被鍨嬪垪琛ㄦ煡璇xternal鍒楄〃 * - * @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); } - //姹備袱涓璞ist鐨勪氦闆嗗瓧娈典笉鍚孖d鐩稿悓 private List<ArdEquipExternal> sameListWithDifferent(List<ArdEquipExternal> oldList, List<ArdEquipExternal> newList) { @@ -224,8 +137,6 @@ return differentFieldsList; } - - // 姹備袱涓璞ist鐨勫樊闆� private List<ArdEquipExternal> diffList(List<ArdEquipExternal> oldArrayList, List<ArdEquipExternal> newArrayList) { List<ArdEquipExternal> resultList = oldArrayList.stream() diff --git a/src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java b/src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java index 192c4a3..8cf17ec 100644 --- a/src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java +++ b/src/main/java/com/ard/alarm/radar/domain/RadarAlarmData.java @@ -17,4 +17,5 @@ String radarName; String alarmTime; List<ArdAlarmRadar> ardAlarmRadars; + List<ArdAlarmRadar> ardFollowRadars; } diff --git a/src/main/java/com/ard/utils/hiksdk/domain/FaceMatchEventInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/FaceMatchEventInfo.java new file mode 100644 index 0000000..3044d2c --- /dev/null +++ b/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; +} diff --git a/src/main/java/com/ard/utils/hiksdk/domain/FaceSnapEventInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/FaceSnapEventInfo.java new file mode 100644 index 0000000..9976726 --- /dev/null +++ b/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; +} diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java index 6e3ca3c..0295348 100644 --- a/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java +++ b/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,52 +49,65 @@ 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鍜岀鍙f煡璇㈣澶� + 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 绉诲姩渚︽祴銆佽棰戜涪澶便�侀伄鎸°�両O淇″彿閲忕瓑鎶ヨ淇℃伅(V3.0浠ヤ笂鐗堟湰鏀寔鐨勮澶�) - case HCNetSDK.COMM_ALARM_V30: + case COMM_ALARM_V30: + log.debug("绉诲姩渚︽祴鎶ヨ淇℃伅涓婃姤"); + if (camera == null) { + return false; + } //region 绉诲姩渚︽祴銆佽棰戜涪澶便�侀伄鎸°�両O淇″彿閲忕瓑鎶ヨ淇℃伅(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(); - info.setAlarmName("绉诲姩渚︽祴"); - info.setAlarmTime(fmt.format(new Date())); - info.setCameraName(camera.getName()); - info.setCameraId(camera.getId()); - info.setCameraIp(camera.getIp()); - info.setCameraPort(camera.getPort()); - info.setCameraType(camera.getGdType()); - info.setCameraChannel(Integer.valueOf(netDvrAlarminfoV30.byChannel[0])); - info.setLongitude(camera.getLongitude()); - info.setLatitude(camera.getLatitude()); - info.setAlarmType("绉诲姩渚︽祴"); - //鍥剧墖瀛樺叆minio - url = savePicture(info); - info.setPicUrl(url); - publishMqtt(info); - break; - } + switch (netDvrAlarminfoV30.dwAlarmType) { + case 3: + info = new CameraEventInfo(); + info.setAlarmName("绉诲姩渚︽祴"); + info.setAlarmTime(fmt.format(new Date())); + info.setCameraName(camera.getName()); + info.setCameraId(camera.getId()); + info.setCameraIp(camera.getIp()); + info.setCameraPort(camera.getPort()); + info.setCameraType(camera.getGdType()); + info.setCameraChannel(Integer.valueOf(netDvrAlarminfoV30.byChannel[0])); + info.setLongitude(camera.getLongitude()); + info.setLatitude(camera.getLatitude()); + info.setAlarmType("绉诲姩渚︽祴"); + //鍥剧墖瀛樺叆minio + 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,33 +115,30 @@ 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.setCameraName(camera.getName()); - info.setCameraId(camera.getId()); - info.setCameraIp(camera.getIp()); - info.setCameraPort(camera.getPort()); - info.setCameraType(camera.getGdType()); - info.setCameraChannel(channel); - info.setLongitude(camera.getLongitude()); - info.setLatitude(camera.getLatitude()); - info.setRuleId(ruleID); - switch (strVcaAlarm.struRuleInfo.wEventTypeEx) { - case 1: //region绌胯秺璀︽垝闈� (瓒婄晫渚︽祴) - info.setAlarmType("瓒婄晫渚︽祴鎶ヨ"); - strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_TRAVERSE_PLANE.class); - //鍥剧墖瀛樺叆minio - url = savePicture(info); - info.setPicUrl(url); - publishMqtt(info); - //endregion - break; + info.setAlarmTime(alarmTime); + info.setCameraName(camera.getName()); + info.setCameraId(camera.getId()); + info.setCameraIp(camera.getIp()); + info.setCameraPort(camera.getPort()); + info.setCameraType(camera.getGdType()); + info.setCameraChannel(channel); + info.setLongitude(camera.getLongitude()); + info.setLatitude(camera.getLatitude()); + info.setRuleId(ruleID); + switch (strVcaAlarm.struRuleInfo.wEventTypeEx) { + case 1: //region绌胯秺璀︽垝闈� (瓒婄晫渚︽祴) + info.setAlarmType("瓒婄晫渚︽祴鎶ヨ"); + strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_TRAVERSE_PLANE.class); + //鍥剧墖瀛樺叆minio + picUrl = snapPicture(info); + info.setPicUrl(picUrl); + publishMqtt(info, "camera"); + //endregion + break; // case 2: //region 鐩爣杩涘叆鍖哄煙 // info.setAlarmType("鐩爣杩涘叆鍖哄煙鎶ヨ"); // strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class); @@ -140,15 +149,15 @@ // strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class); // //endregion // break; - case 4: //region 鍛ㄧ晫鍏ヤ镜 - info.setAlarmType("鍛ㄧ晫鍏ヤ镜鎶ヨ"); - strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_INTRUSION.class); - //鍥剧墖瀛樺叆minio - url = savePicture(info); - info.setPicUrl(url); - publishMqtt(info); - //endregion - break; + case 4: //region 鍛ㄧ晫鍏ヤ镜 + info.setAlarmType("鍛ㄧ晫鍏ヤ镜鎶ヨ"); + strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_INTRUSION.class); + //鍥剧墖瀛樺叆minio + picUrl = snapPicture(info); + info.setPicUrl(picUrl); + publishMqtt(info, "camera"); + //endregion + break; // case 5: //region 寰樺緤 // info.setAlarmType("寰樺緤浜嬩欢鎶ヨ"); // //endregion @@ -173,28 +182,212 @@ // info.setAlarmType("鐜╂墜鏈烘姤璀︿簨浠�"); // //endregion // break; - default: - // log.debug("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx); - break; - } + default: + log.debug("鏈煡寮傚父琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx); + break; } //endregion break; - case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: - //log.debug("浜鸿劯妫�娴嬩簨浠朵笂鎶�(鏆備笉瑙f瀽)"); + case COMM_UPLOAD_FACESNAP_RESULT: + log.debug("浜鸿劯鎶撴媿鎶ヨ淇℃伅(鏆備笉瑙f瀽)"); + //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 1: + facePicTyp = "URL"; + break; + 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 HCNetSDK.COMM_GISINFO_UPLOAD: - //log.debug("GPS鎶ヨ淇℃伅涓婃姤(鏆備笉瑙f瀽)"); + 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 HCNetSDK.COMM_ALARMHOST_CID_ALARM: + case COMM_UPLOAD_AIOP_VIDEO: + log.debug("璁惧鏀寔AI寮�鏀惧钩鍙版帴鍏ワ紝涓婁紶瑙嗛妫�娴嬫暟鎹�(鏆備笉瑙f瀽)"); + 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鎶ヨ淇℃伅涓婃姤(鏆備笉瑙f瀽)"); + 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("闈炰簨浠舵姤璀︽暟鎹笂鎶�(鏆備笉瑙f瀽)"); 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; } + /** + * 鏍规嵁缁欏畾鐨処P鍦板潃鍜岀鍙f煡鎵続rdEquipExternal瀵硅薄 + * + * @param ip IP鍦板潃 + * @param port 绔彛 + * @return ArdEquipExternal瀵硅薄鐨凮ptional锛屽鏋滄壘鍒板垯鏈夊�硷紝鍚﹀垯涓虹┖ + */ + public static Optional<ArdEquipExternal> findArdEquipExternalByIpAndPort(String ip, int port) { + return ArdEquipExternalServiceImpl.ardEquipExternalList.stream() + .filter(equip -> equip.getIp().equals(ip) && equip.getPort() == port) + .findFirst(); + } + + /** + * 鏍规嵁IP鍦板潃鍜岀鍙f煡鎵続rdCamera瀵硅薄銆� + * + * @param ip IP鍦板潃 + * @param port 绔彛 + * @return ArdCamera瀵硅薄鐨凮ptional锛屽鏋滄壘涓嶅埌鍒欎负绌� + */ + 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 @@ } /** - * 閫氱敤鍏夌數鎶ヨ鎺ㄩ�乵qtt + * 鍙戝竷MQTT娑堟伅 + * + * @param info 娑堟伅鍐呭 + * @param topic 涓婚 */ - private void publishMqtt(CameraEventInfo info) { - printLog(info); - MqttProducer.publish(2, false, "camera", JSON.toJSONString(info)); - } - - /** - * 鎶ヨ涓绘満浜嬩欢鎺ㄩ�乵qtt - */ - private void publishMqtt(ExternalAlarmEventInfo info) { - printLog(info); - MqttProducer.publish(2, false, "external", JSON.toJSONString(info)); - } - - /** - * 闂ㄧ浜嬩欢鎺ㄩ�乵qtt - */ - 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)); } /** diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java index 24e4662..c992f8e 100644 --- a/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java +++ b/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); @@ -440,10 +479,10 @@ InputStream input = new ByteArrayInputStream(array); String url = ""; try { - boolean b = MinioUtil.uploadObject(cmd.getBucketName(), cmd.getObjectName(), input,input.available(), ContentType); + boolean b = MinioUtil.uploadObject(cmd.getBucketName(), cmd.getObjectName(), input, input.available(), ContentType); if (b) { url = MinioUtil.getBucketObjectUrl(cmd.getBucketName(), cmd.getObjectName()); - // log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); + // log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); } } catch (Exception ex) { log.error("涓婁紶鏂囦欢寮傚父锛�" + ex.getMessage()); diff --git a/src/main/java/com/ard/utils/tcp/ClientHandler.java b/src/main/java/com/ard/utils/tcp/ClientHandler.java index 0063611..7065348 100644 --- a/src/main/java/com/ard/utils/tcp/ClientHandler.java +++ b/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("鍛ㄨ鍥惧儚鐨勫嚭鐜版椂闂�(杞琩ate):" + 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;; + //鐩爣鐨凚1=1 閿佸畾 + if(bit1==1) { + //灏嗛攣瀹氱洰鏍囨斁鍏ラ攣瀹歭ist + 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)); + } //鎶芥补鏈虹姸鎬丮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) { @@ -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; -- Gitblit v1.9.3