From 0eb6c0b3276f8493126dd7ef59bdb07c0a5110ee Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期五, 11 八月 2023 16:10:34 +0800 Subject: [PATCH] 通用光电报警越界侦测无法抓图修复 --- src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 214 ++++++++++++++++++++++++++--------------------------- 1 files changed, 105 insertions(+), 109 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 898dc85..d81cd84 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 @@ -46,26 +46,56 @@ */ @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); + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP);//璁惧IP鍦板潃 + Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort);//璁惧閫氳绔彛 CameraEventInfo info; String sTime;//浜嬩欢鏃堕棿 String url = "";//浜嬩欢鍥剧墖 - Boolean isSnapPic=true; //lCommand鏄紶鐨勬姤璀︾被鍨� - log.debug("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); + //log.debug("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); switch (lCommand) { case HCNetSDK.COMM_ALARM_V30: - log.debug("绉诲姩渚︽祴銆佽棰戜涪澶便�侀伄鎸°�両O淇″彿閲忕瓑鎶ヨ淇℃伅(鏆備笉瑙f瀽)"); - case HCNetSDK.COMM_ALARM_RULE: - log.debug("琛屼负鍒嗘瀽淇℃伅鎶ヨ淇℃伅涓婃姤"); - //region 琛屼负鍒嗘瀽淇℃伅 + //log.debug("绉诲姩渚︽祴"); ArdCameras ardCameras = new ArdCameras(); ardCameras.setIp(sDeviceIP); ardCameras.setPort(wLinkPort); IArdCamerasService ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class); - ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0); + ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(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 + url = savePicture(info); + info.setPicUrl(url); + publishMqtt(info); + break; + } + + case HCNetSDK.COMM_ALARM_RULE: + //log.debug("琛屼负鍒嗘瀽淇℃伅鎶ヨ淇℃伅涓婃姤"); + //region 琛屼负鍒嗘瀽淇℃伅 + ardCameras = new ArdCameras(); + ardCameras.setIp(sDeviceIP); + ardCameras.setPort(wLinkPort); + ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class); + ArdCameras ardCamera = ardCamerasService.selectArdCamerasList(ardCameras).get(0); HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM(); strVcaAlarm.write(); @@ -79,82 +109,82 @@ info = new CameraEventInfo(); info.setAlarmName("浜哄憳琛屼负鍒嗘瀽"); info.setAlarmTime(sTime); - info.setCameraName(ardcamere.getName()); - info.setCameraId(ardcamere.getId()); - info.setCameraIp(ipaddr); - info.setCameraType(ardcamere.getGdtype()); + info.setCameraName(ardCamera.getName()); + info.setCameraId(ardCamera.getId()); + info.setCameraIp(ardCamera.getIp()); + info.setCameraPort(ardCamera.getPort()); + info.setCameraType(ardCamera.getGdtype()); info.setCameraChannel(channel); - info.setLongitude(ardcamere.getLongitude()); - info.setLatitude(ardcamere.getLatitude()); - info.setAlarmType(ardcamere.getGdtype()); + info.setLongitude(ardCamera.getLongitude()); + info.setLatitude(ardCamera.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; - 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 + url = savePicture(info); + info.setPicUrl(url); + publishMqtt(info); //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.debug("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx); - isSnapPic=false; + // log.debug("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx); break; } //endregion - //鍥剧墖瀛樺叆minio - if(isSnapPic) { - url = savePicture(info); - info.setPicUrl(url); - publishMqtt(info); - } - break; - case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: - log.debug("浜鸿劯妫�娴嬩簨浠朵笂鎶�(鏆備笉瑙f瀽)"); - break; - case HCNetSDK.COMM_GISINFO_UPLOAD: - log.debug("GPS鎶ヨ淇℃伅涓婃姤(鏆備笉瑙f瀽)"); - break; +// case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: +// log.debug("浜鸿劯妫�娴嬩簨浠朵笂鎶�(鏆備笉瑙f瀽)"); +// break; +// case HCNetSDK.COMM_GISINFO_UPLOAD: +// log.debug("GPS鎶ヨ淇℃伅涓婃姤(鏆備笉瑙f瀽)"); +// break; case HCNetSDK.COMM_ALARMHOST_CID_ALARM: - log.debug("鎶ヨ涓绘満CID鎶ュ憡鎶ヨ涓婃姤"); + //log.debug("鎶ヨ涓绘満CID鎶ュ憡鎶ヨ涓婃姤"); //region 鎶ヨ涓绘満鎶ヨ澶勭悊 ArdEquipExternal ardEquipExternal = new ArdEquipExternal(); ardEquipExternal.setIp(sDeviceIP); @@ -256,7 +286,7 @@ if (dwMajor != 5) { //鍙幏鍙栦簨浠� - log.debug("闈炰簨浠舵姤璀︽暟鎹笂鎶�(鏆備笉瑙f瀽)"); + // log.debug("闈炰簨浠舵姤璀︽暟鎹笂鎶�(鏆備笉瑙f瀽)"); break; } int dwMinor = strACSInfo.dwMinor; @@ -357,56 +387,22 @@ //endregion break; default: - log.debug("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); + // log.debug("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); break; } return true; } - /** - * @鎻忚堪 淇濆瓨鍥剧墖灏佽鏂规硶 - * @鍙傛暟 [strVcaAlarm, eventName, eventNameEng] - * @杩斿洖鍊� java.lang.String - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/2/17 15:05 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - 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, "image/jpeg"); - if (uploadRes) { - url = MinioClientSingleton.domainUrl + filename; - log.info("鍐欏叆minio鍥剧墖鍦板潃锛�" + url); - } - } catch (Exception ex) { - log.error(eventName + "澶勭悊鍥剧墖寮傚父锛�" + ex.getMessage()); - } - } - return url; - } /** * 鐩告満鎴浘 */ private String savePicture(CameraEventInfo info) { CameraCmd cmd = new CameraCmd(); - ArdCameras Cameras = GlobalVariable.cameraMap.get(info.getCameraIp()); - if(Cameras==null) - { + String key=info.getCameraIp()+":"+info.getCameraPort(); + ArdCameras Cameras = GlobalVariable.cameraMap.get(key); + if (Cameras == null) { return ""; } cmd.setCameraId(Cameras.getId()); @@ -442,9 +438,9 @@ * 鎵撳嵃闂ㄧ浜嬩欢鏃ュ織 */ private void printLog(AccessControlHostEventInfo info) { - log.debug("銆愭姤璀D銆�" + info.getSerialNo() + "銆愯澶囩紪鍙枫��"+ + log.debug("銆愭姤璀D銆�" + info.getSerialNo() + "銆愯澶囩紪鍙枫��" + "銆愰棬缂栧彿銆�" + info.getDoorNo() + "銆愪簨浠剁被鍨嬨��" + info.getAlarmType() + - "銆愰槻鍖虹被鍨嬨��" + info.getDefenseType()+"銆愭椂闂淬��" + info.getAlarmTime() + + "銆愰槻鍖虹被鍨嬨��" + info.getDefenseType() + "銆愭椂闂淬��" + info.getAlarmTime() + "銆愰棬绂佷富鏈篒D銆�" + info.getAcsId()); } @@ -452,7 +448,7 @@ * 閫氱敤鍏夌數鎶ヨ鎺ㄩ�乵qtt */ private void publishMqtt(CameraEventInfo info) { - // printLog(info); + printLog(info); MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info)); } -- Gitblit v1.9.3