From 6474b923d8f6d8ea5e5b63277f18335136c7e33c Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期一, 04 十二月 2023 11:24:16 +0800 Subject: [PATCH] 增加动态客户端备用代码 优化雷达追踪引导 优化打印日志 --- src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 638 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 493 insertions(+), 145 deletions(-) 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 f01a88e..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,31 +3,27 @@ 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.config.MinioClientSingleton; -import com.ard.utils.ByteUtils; +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.ExternalAlarmEventInfo; -import com.ard.utils.hiksdk.domain.alarmEventInfo; import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK; -import com.ard.utils.hiksdk.util.minio.MinioUtils; -import com.ard.utils.DateUtils; -import com.ard.utils.SpringTool; -import com.ard.utils.mqtt.MqttConsumer; +import com.ard.utils.other.DateUtils; +import com.ard.utils.mqtt.MqttProducer; +import com.ard.utils.uuid.IdUtils; import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import javax.xml.bind.DatatypeConverter; -import java.io.ByteArrayInputStream; -import java.io.InputStream; +import java.io.*; import java.nio.ByteBuffer; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Optional; + +import static com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK.*; /** * @ClassName: FMSGCallBack @@ -36,7 +32,7 @@ * @Date: 2023骞�02鏈�15鏃� 12:16 * @Version: 1.0 **/ -@Slf4j(topic = "hiksdk") +@Slf4j(topic = "hikSdk") public class FMSGCallBack implements HCNetSDK.FMSGCallBack_V31 { /** @@ -50,116 +46,348 @@ */ @Override public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { - - String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP); - Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort); - - String sTime;//浜嬩欢鏃堕棿 - String url;//浜嬩欢鍥剧墖 - alarmEventInfo info;//浜嬩欢淇℃伅 - + 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 alarmTime;//浜嬩欢鏃堕棿 + String alarmType = "";//鎶ヨ绫诲瀷 + String picUrl = "";//浜嬩欢鍥剧墖 + String facePicUrl = "";//浜鸿劯鍥剧墖 //lCommand鏄紶鐨勬姤璀︾被鍨� + log.debug("銆�" + sDeviceIP + ":" + wLinkPort + "銆戞姤璀︿簨浠剁被鍨�:lCommand:" + Integer.toHexString(lCommand)); switch (lCommand) { - case HCNetSDK.COMM_ALARM_RULE: - //region 琛屼负鍒嗘瀽淇℃伅 - ArdCameras ardCameras = new ArdCameras(); - ardCameras.setIp(sDeviceIP); - ardCameras.setPort(wLinkPort); - IArdCamerasService ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class); - ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0); - log.info("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); + 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(); + 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 COMM_ALARM_RULE: + log.debug("寮傚父琛屼负璇嗗埆淇℃伅鎶ヨ淇℃伅涓婃姤"); + //region 寮傚父琛屼负璇嗗埆淇℃伅 HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM(); strVcaAlarm.write(); Pointer pVCAInfo = strVcaAlarm.getPointer(); 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 alarmEventInfo(); + info = new CameraEventInfo(); info.setAlarmName("浜哄憳琛屼负鍒嗘瀽"); - info.setAlarmTime(sTime); - info.setCameraName(ardcamere.getName()); - info.setCameraId(ardcamere.getId()); - info.setCameraIp(ipaddr); - info.setCameraType(ardcamere.getGdtype()); + 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(ardcamere.getLongitude()); - info.setLatitude(ardcamere.getLatitude()); - info.setAlarmType(ardcamere.getGdtype()); + 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); - //endregion - break; - case 3: //region 鐩爣绂诲紑鍖哄煙 - info.setAlarmType("鐩爣绂诲紑鍖哄煙鎶ヨ"); - strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class); - //endregion - break; +// case 2: //region 鐩爣杩涘叆鍖哄煙 +// info.setAlarmType("鐩爣杩涘叆鍖哄煙鎶ヨ"); +// strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class); +// //endregion +// break; +// case 3: //region 鐩爣绂诲紑鍖哄煙 +// info.setAlarmType("鐩爣绂诲紑鍖哄煙鎶ヨ"); +// 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 + picUrl = snapPicture(info); + info.setPicUrl(picUrl); + publishMqtt(info, "camera"); //endregion break; - case 5: //region 寰樺緤 - info.setAlarmType("寰樺緤浜嬩欢鎶ヨ"); - //endregion - break; - case 8: //region 蹇�熺Щ鍔�(濂旇窇) - info.setAlarmType("蹇�熺Щ鍔�(濂旇窇)浜嬩欢鎶ヨ"); - //endregion - break; - case 13: //region 鐗╁搧閬楃暀浜嬩欢 - info.setAlarmType("鐗╁搧閬楃暀浜嬩欢鎶ヨ"); - //endregion - break; - case 14: //region 鐗╁搧鎷垮彇浜嬩欢 - info.setAlarmType("鐗╁搧鎷垮彇浜嬩欢浜嬩欢鎶ヨ"); - //endregion - break; - case 20: //region 鍊掑湴妫�娴� - info.setAlarmType("鍊掑湴浜嬩欢瑙﹀彂"); - //endregion - break; - case 44: //region 鐜╂墜鏈� - info.setAlarmType("鐜╂墜鏈烘姤璀︿簨浠�"); - //endregion - break; +// case 5: //region 寰樺緤 +// info.setAlarmType("寰樺緤浜嬩欢鎶ヨ"); +// //endregion +// break; +// case 8: //region 蹇�熺Щ鍔�(濂旇窇) +// info.setAlarmType("蹇�熺Щ鍔�(濂旇窇)浜嬩欢鎶ヨ"); +// //endregion +// break; +// case 13: //region 鐗╁搧閬楃暀浜嬩欢 +// info.setAlarmType("鐗╁搧閬楃暀浜嬩欢鎶ヨ"); +// //endregion +// break; +// case 14: //region 鐗╁搧鎷垮彇浜嬩欢 +// info.setAlarmType("鐗╁搧鎷垮彇浜嬩欢浜嬩欢鎶ヨ"); +// //endregion +// break; +// case 20: //region 鍊掑湴妫�娴� +// info.setAlarmType("鍊掑湴浜嬩欢瑙﹀彂"); +// //endregion +// break; +// case 44: //region 鐜╂墜鏈� +// info.setAlarmType("鐜╂墜鏈烘姤璀︿簨浠�"); +// //endregion +// break; default: - log.info("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx); - printLog(info); + log.debug("鏈煡寮傚父琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx); break; } //endregion - //鍥剧墖瀛樺叆minio - url = savePicture(info); - info.setPicUrl(url); - publishMqtt(info); break; - case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: - log.info("浜鸿劯妫�娴嬩簨浠朵笂鎶�"); + 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.info("GPS鎶ヨ淇℃伅涓婃姤"); - break; - case HCNetSDK.COMM_ALARMHOST_CID_ALARM: - log.info("鎶ヨ涓绘満 CID 鎶ュ憡鎶ヨ涓婁紶"); - ArdEquipExternal ardEquipExternal = new ArdEquipExternal(); - ardEquipExternal.setIp(sDeviceIP); - ardEquipExternal.setPort(wLinkPort); - IArdEquipExternalService ardEquipExternalService = SpringTool.getApplicationContext().getBean(IArdEquipExternalService.class); - ardEquipExternal = ardEquipExternalService.selectArdEquipExternalList(ardEquipExternal).get(0); + 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寮�鏀惧钩鍙版帴鍏ワ紝涓婁紶瑙嗛妫�娴嬫暟鎹�(鏆備笉瑙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 鎶ヨ涓绘満鎶ヨ澶勭悊 HCNetSDK.NET_DVR_CID_ALARM netDvrCidAlarm = new HCNetSDK.NET_DVR_CID_ALARM(); netDvrCidAlarm.write(); Pointer pCIDInfo = netDvrCidAlarm.getPointer(); @@ -167,7 +395,6 @@ netDvrCidAlarm.read(); //CID浜嬩欢鍚� String sCIDCode = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDCode);//CID浜嬩欢鍚� - //CID浜嬩欢鍚� //String sCIDDescribe = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDDescribe);//CID浜嬩欢鍚� int position = ByteUtils.findIndexOfDoubleZero(netDvrCidAlarm.sCIDDescribe); @@ -233,10 +460,119 @@ 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 闂ㄧ涓绘満鎶ヨ澶勭悊 + 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; + } + + switch (dwMinor) { + case 104: + alarmType = "鐪熶汉妫�娴嬪け璐�"; + break; + case 80: + alarmType = "浜鸿劯鎶撴媿澶辫触"; + break; + } + log.debug("闂ㄧ涓绘満鎶ヨ涓婁紶:" + alarmType); + alarmTime = DateUtils.convertDate(parseAlarmTime(strACSInfo.struTime), "yyyy-M-d H:m:s"); + + //浜嬩欢鍥剧墖澶勭悊 + int dwPicDataLen = strACSInfo.dwPicDataLen; + if (dwPicDataLen > 0) { + try { + //灏嗗瓧鑺傚啓鍏ユ枃浠� + long offset = 0; + ByteBuffer buffers = strACSInfo.pPicData.getByteBuffer(offset, strACSInfo.dwPicDataLen); + byte[] bytes = new byte[strACSInfo.dwPicDataLen]; + buffers.rewind(); + buffers.get(bytes); + InputStream input = new ByteArrayInputStream(bytes); + 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("鍥剧墖淇濆瓨澶辫触"); + } + } + HCNetSDK.NET_DVR_ACS_EVENT_INFO struAcsEventInfo = strACSInfo.struAcsEventInfo; + int byType = struAcsEventInfo.byType; + String defenseType = ""; + switch (byType) { + case 0: + defenseType = "鍗虫椂闃插尯"; + break; + case 1: + defenseType = "24灏忔椂闃插尯"; + break; + case 2: + defenseType = "寤舵椂闃插尯"; + break; + case 3: + defenseType = "鍐呴儴闃插尯"; + break; + case 4: + defenseType = "閽ュ寵闃插尯"; + break; + case 5: + defenseType = "鐏闃插尯"; + break; + case 6: + defenseType = "鍛ㄧ晫闃插尯"; + break; + case 7: + defenseType = "24灏忔椂鏃犲0闃插尯"; + break; + case 8: + defenseType = "24灏忔椂杈呭姪闃插尯"; + break; + case 9: + defenseType = "24灏忔椂闇囧姩闃插尯"; + break; + case 10: + defenseType = "闂ㄧ绱ф�ュ紑闂ㄩ槻鍖�"; + break; + case 11: + defenseType = "闂ㄧ绱ф�ュ叧闂ㄩ槻鍖�"; + break; + default: + defenseType = "鏃�"; + break; + } + AccessControlHostEventInfo accessControlHostEventInfo = new AccessControlHostEventInfo(); + accessControlHostEventInfo.setSerialNo(struAcsEventInfo.dwSerialNo); + accessControlHostEventInfo.setAlarmType(alarmType); + accessControlHostEventInfo.setDoorNo(struAcsEventInfo.dwDoorNo); + accessControlHostEventInfo.setDefenseType(defenseType); + accessControlHostEventInfo.setAlarmTime(alarmTime); + accessControlHostEventInfo.setPicUrl(picUrl); + accessControlHostEventInfo.setAcsId(ardEquipExternal.getId()); + publishMqtt(accessControlHostEventInfo, "accessControl"); + //endregion break; default: - log.info("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); + log.debug("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); break; } @@ -244,51 +580,46 @@ } /** - * @鎻忚堪 淇濆瓨鍥剧墖灏佽鏂规硶 - * @鍙傛暟 [strVcaAlarm, eventName, eventNameEng] - * @杩斿洖鍊� java.lang.String - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/17 15:05 - * @淇敼浜哄拰鍏跺畠淇℃伅 + * 鏍规嵁缁欏畾鐨処P鍦板潃鍜岀鍙f煡鎵続rdEquipExternal瀵硅薄 + * + * @param ip IP鍦板潃 + * @param port 绔彛 + * @return ArdEquipExternal瀵硅薄鐨凮ptional锛屽鏋滄壘鍒板垯鏈夊�硷紝鍚﹀垯涓虹┖ */ - private String savePicture(HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm, String eventName, String eventNameEng) { - String url = ""; - if ((strVcaAlarm.dwPicDataLen > 0) && (strVcaAlarm.byPicTransType == 0)) { - String currentTime = new SimpleDateFormat("yyyyMMdd").format(new Date()); - try { - //瀛樺叆minio - long offset = 0; - ByteBuffer buffers = strVcaAlarm.pImage.getByteBuffer(offset, strVcaAlarm.dwPicDataLen); - byte[] bytes = new byte[strVcaAlarm.dwPicDataLen]; - buffers.rewind(); - buffers.get(bytes); - InputStream inputStream = new ByteArrayInputStream(bytes); - String ipaddr = new String(strVcaAlarm.struDevInfo.struDevIP.sIpV4).trim();//璁惧ip - String UUID = java.util.UUID.randomUUID().toString().replace("-", ""); - String filename = ipaddr + "/" + currentTime + "/" + eventNameEng + "/" + UUID + ".jpg"; - boolean uploadRes = MinioUtils.uploadObject("pic", filename, inputStream, inputStream.available(), "image/jpeg"); - if (uploadRes) { - url = MinioClientSingleton.domainUrl + filename; - log.info("鍐欏叆minio鍥剧墖鍦板潃锛�" + url); - } - } catch (Exception ex) { - log.error(eventName + "澶勭悊鍥剧墖寮傚父锛�" + ex.getMessage()); - } - } - return url; + 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锛屽鏋滄壘涓嶅埌鍒欎负绌� */ - private String savePicture(alarmEventInfo info) { + 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 snapPicture(CameraEventInfo info) { CameraCmd cmd = new CameraCmd(); - ArdCameras Cameras = GlobalVariable.cameraMap.get(info.getCameraIp()); + String key = info.getCameraIp() + ":" + info.getCameraPort(); + ArdCameras Cameras = GlobalVariable.cameraMap.get(key); + if (Cameras == null) { + return ""; + } cmd.setCameraId(Cameras.getId()); cmd.setChannelNum(info.getCameraChannel()); cmd.setBucketName("pic"); - String UUID = java.util.UUID.randomUUID().toString().replace("-", ""); - String filename = info.getCameraName() + "/" + info.getAlarmType() + "/" + UUID + ".jpg"; + String filename = "alarm" + "/" + IdUtils.simpleUUID() + ".jpg"; cmd.setObjectName(filename); String url = HikClientUtil.picCutCate(cmd); return url; @@ -297,36 +628,40 @@ /** * 鎵撳嵃閫氱敤鍏夌數鏃ュ織 */ - private void printLog(alarmEventInfo info) { - log.info("銆愯鍒欍��" + info.getAlarmName() + "銆愯鍒檌d銆�" + info.getRuleId() + "銆愮被鍨嬨��" + info.getAlarmType() + + private void printLog(CameraEventInfo info) { + log.debug("銆愯鍒欍��" + info.getAlarmName() + "銆愯鍒檌d銆�" + info.getRuleId() + "銆愮被鍨嬨��" + info.getAlarmType() + "銆愭椂闂淬��" + info.getAlarmTime() + "銆愮浉鏈篿d銆�" + info.getCameraId() + "銆愮浉鏈恒��" + info.getCameraName() + "銆怚P銆�" + info.getCameraIp() + "銆愰�氶亾銆�" + info.getCameraChannel() + "銆愬瀷鍙枫��" + info.getCameraType() + "銆愬浘鐗囥��" + info.getPicUrl() + "銆愬潗鏍囥��" + info.getLongitude() + "," + info.getLatitude()); } /** - * 鎵撳嵃澶栬仈鎶ヨ鏃ュ織 + * 鎵撳嵃鎶ヨ涓绘満浜嬩欢鏃ュ織 */ private void printLog(ExternalAlarmEventInfo info) { - log.info("銆愭姤璀D銆�" + info.getAlarmId() + "銆愭姤璀﹀悕绉般��" + info.getAlarmName() + + log.debug("銆愭姤璀D銆�" + info.getAlarmId() + "銆愭姤璀﹀悕绉般��" + info.getAlarmName() + "銆愰槻鍖篒D銆�" + info.getDefenseId() + "銆愰槻鍖哄悕绉般��" + info.getDefenseName() + "銆愮被鍨嬨��" + info.getAlarmType() + "銆愭椂闂淬��" + info.getAlarmTime() + "銆愭姤璀︿富鏈篒D銆�" + info.getAlarmHostId()); } /** - * 閫氱敤鍏夌數鎶ヨ鎺ㄩ�乵qtt + * 鎵撳嵃闂ㄧ浜嬩欢鏃ュ織 */ - private void publishMqtt(alarmEventInfo info) { - // printLog(info); - MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info)); + private void printLog(AccessControlHostEventInfo info) { + log.debug("銆愭姤璀D銆�" + info.getSerialNo() + "銆愯澶囩紪鍙枫��" + + "銆愰棬缂栧彿銆�" + info.getDoorNo() + "銆愪簨浠剁被鍨嬨��" + info.getAlarmType() + + "銆愰槻鍖虹被鍨嬨��" + info.getDefenseType() + "銆愭椂闂淬��" + info.getAlarmTime() + + "銆愰棬绂佷富鏈篒D銆�" + info.getAcsId()); } /** - * 澶栬仈鎶ヨ鎺ㄩ�乵qtt + * 鍙戝竷MQTT娑堟伅 + * + * @param info 娑堟伅鍐呭 + * @param topic 涓婚 */ - private void publishMqtt(ExternalAlarmEventInfo info) { - printLog(info); - MqttConsumer.publish(2, false, "external", JSON.toJSONString(info)); + private <T> void publishMqtt(T info, String topic) { + MqttProducer.publish(2, false, topic, JSON.toJSONString(info)); } /** @@ -341,4 +676,17 @@ byte bySecond = netDvrTimeEx.bySecond; return wYear + "-" + byMonth + "-" + byDay + " " + byHour + ":" + byMinute + ":" + bySecond; } + + /** + * 鏃堕棿鏍煎紡鍖� + */ + private String parseAlarmTime(HCNetSDK.NET_DVR_TIME netDvrTimeEx) { + int wYear = netDvrTimeEx.dwYear; + int byMonth = netDvrTimeEx.dwMonth; + int byDay = netDvrTimeEx.dwDay; + int byHour = netDvrTimeEx.dwHour; + int byMinute = netDvrTimeEx.dwMinute; + int bySecond = netDvrTimeEx.dwSecond; + return wYear + "-" + byMonth + "-" + byDay + " " + byHour + ":" + byMinute + ":" + bySecond; + } } -- Gitblit v1.9.3