From 2607eb0f1105f753d48d8eafe7799b6efb2c66ba Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期一, 10 七月 2023 16:03:05 +0800 Subject: [PATCH] 增加门禁主机报警事件解析上传mqtt --- src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 161 insertions(+), 19 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..7fe8ac7 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 @@ -4,15 +4,14 @@ 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.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.domain.alarmEventInfo; import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK; import com.ard.utils.hiksdk.util.minio.MinioUtils; import com.ard.utils.DateUtils; @@ -20,11 +19,8 @@ import com.ard.utils.mqtt.MqttConsumer; 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; @@ -55,9 +51,7 @@ Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort); String sTime;//浜嬩欢鏃堕棿 - String url;//浜嬩欢鍥剧墖 - alarmEventInfo info;//浜嬩欢淇℃伅 - + String url = "";//浜嬩欢鍥剧墖 //lCommand鏄紶鐨勬姤璀︾被鍨� switch (lCommand) { case HCNetSDK.COMM_ALARM_RULE: @@ -77,7 +71,7 @@ sTime = DateUtils.parseTime(strVcaAlarm.dwAbsTime);//浜嬩欢鏃堕棿 String ipaddr = new String(strVcaAlarm.struDevInfo.struDevIP.sIpV4).trim();//璁惧ip Integer channel = Integer.valueOf(strVcaAlarm.struDevInfo.byChannel);//閫氶亾 - info = new alarmEventInfo(); + CameraEventInfo info = new CameraEventInfo(); info.setAlarmName("浜哄憳琛屼负鍒嗘瀽"); info.setAlarmTime(sTime); info.setCameraName(ardcamere.getName()); @@ -153,11 +147,12 @@ break; case HCNetSDK.COMM_ALARMHOST_CID_ALARM: log.info("鎶ヨ涓绘満 CID 鎶ュ憡鎶ヨ涓婁紶"); + //region 鎶ヨ涓绘満鎶ヨ澶勭悊 ArdEquipExternal ardEquipExternal = new ArdEquipExternal(); ardEquipExternal.setIp(sDeviceIP); ardEquipExternal.setPort(wLinkPort); IArdEquipExternalService ardEquipExternalService = SpringTool.getApplicationContext().getBean(IArdEquipExternalService.class); - ardEquipExternal = ardEquipExternalService.selectArdEquipExternalList(ardEquipExternal).get(0); + ardEquipExternal = ardEquipExternalService.selectArdEquipExternal(ardEquipExternal); HCNetSDK.NET_DVR_CID_ALARM netDvrCidAlarm = new HCNetSDK.NET_DVR_CID_ALARM(); @@ -234,6 +229,122 @@ externalAlarmEventInfo.setAlarmTime(struTriggerTime); externalAlarmEventInfo.setAlarmHostId(ardEquipExternal.getId()); publishMqtt(externalAlarmEventInfo); + //endregion + break; + case HCNetSDK.COMM_ALARM_ACS: + //region 闂ㄧ涓绘満鎶ヨ澶勭悊 + ArdEquipExternal accessControlHost = new ArdEquipExternal(); + accessControlHost.setIp(sDeviceIP); + accessControlHost.setPort(wLinkPort); + ardEquipExternalService = SpringTool.getApplicationContext().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) { + //鍙幏鍙栦簨浠� + break; + } + int dwMinor = strACSInfo.dwMinor; + if (dwMinor != 80 && dwMinor != 104) { + //鍙В鏋愮湡浜烘娴嬪け璐ュ拰浜鸿劯鎶撴媿澶辫触鐨勬绫诲瀷浜嬩欢 + break; + } +// log.info("闂ㄧ涓绘満鎶ヨ涓婁紶"); +// log.info("銆愪富绫诲瀷銆戜簨浠�"); + String alarmType = ""; + switch (dwMinor) { + case 104: + alarmType = "鐪熶汉妫�娴嬪け璐�"; + break; + case 80: + alarmType = "浜鸿劯鎶撴媿澶辫触"; + break; + } + String alarmTime = DateUtils.convertDate(parseAlarmTime(strACSInfo.struTime), "yyyy-M-d H:m:s"); + + //浜嬩欢鍥剧墖澶勭悊 + int dwPicDataLen = strACSInfo.dwPicDataLen; + if (dwPicDataLen > 0) { + SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String newName = sf.format(new Date()); + 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_" + newName + ".jpeg"; + boolean uploadObject = MinioUtils.uploadObject(bucketName, objectName, input, "image/JPEG"); + if (uploadObject) { + url = MinioClientSingleton.domainUrl + "/" + 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(url); + accessControlHostEventInfo.setAcsId(accessControlHost.getId()); + publishMqtt(accessControlHostEventInfo); + //endregion break; default: log.info("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); @@ -266,7 +377,7 @@ 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"); + boolean uploadRes = MinioUtils.uploadObject("pic", filename, inputStream, "image/jpeg"); if (uploadRes) { url = MinioClientSingleton.domainUrl + filename; log.info("鍐欏叆minio鍥剧墖鍦板潃锛�" + url); @@ -279,9 +390,9 @@ } /** - * 鎵撲繚瀛樺浘鐗� + * 鐩告満鎴浘 */ - private String savePicture(alarmEventInfo info) { + private String savePicture(CameraEventInfo info) { CameraCmd cmd = new CameraCmd(); ArdCameras Cameras = GlobalVariable.cameraMap.get(info.getCameraIp()); cmd.setCameraId(Cameras.getId()); @@ -297,7 +408,7 @@ /** * 鎵撳嵃閫氱敤鍏夌數鏃ュ織 */ - private void printLog(alarmEventInfo info) { + private void printLog(CameraEventInfo info) { log.info("銆愯鍒欍��" + info.getAlarmName() + "銆愯鍒檌d銆�" + info.getRuleId() + "銆愮被鍨嬨��" + info.getAlarmType() + "銆愭椂闂淬��" + info.getAlarmTime() + "銆愮浉鏈篿d銆�" + info.getCameraId() + "銆愮浉鏈恒��" + info.getCameraName() + "銆怚P銆�" + info.getCameraIp() + "銆愰�氶亾銆�" + info.getCameraChannel() + "銆愬瀷鍙枫��" + info.getCameraType() + @@ -305,7 +416,7 @@ } /** - * 鎵撳嵃澶栬仈鎶ヨ鏃ュ織 + * 鎵撳嵃鎶ヨ涓绘満浜嬩欢鏃ュ織 */ private void printLog(ExternalAlarmEventInfo info) { log.info("銆愭姤璀D銆�" + info.getAlarmId() + "銆愭姤璀﹀悕绉般��" + info.getAlarmName() + @@ -314,19 +425,37 @@ } /** + * 鎵撳嵃闂ㄧ浜嬩欢鏃ュ織 + */ + private void printLog(AccessControlHostEventInfo info) { + log.info("銆愭姤璀D銆�" + info.getSerialNo() + "銆愯澶囩紪鍙枫��"+ + "銆愰棬缂栧彿銆�" + info.getDoorNo() + "銆愪簨浠剁被鍨嬨��" + info.getAlarmType() + + "銆愰槻鍖虹被鍨嬨��" + info.getDefenseType()+"銆愭椂闂淬��" + info.getAlarmTime() + + "銆愰棬绂佷富鏈篒D銆�" + info.getAcsId()); + } + + /** * 閫氱敤鍏夌數鎶ヨ鎺ㄩ�乵qtt */ - private void publishMqtt(alarmEventInfo info) { + private void publishMqtt(CameraEventInfo info) { // printLog(info); MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info)); } /** - * 澶栬仈鎶ヨ鎺ㄩ�乵qtt + * 鎶ヨ涓绘満浜嬩欢鎺ㄩ�乵qtt */ private void publishMqtt(ExternalAlarmEventInfo info) { printLog(info); MqttConsumer.publish(2, false, "external", JSON.toJSONString(info)); + } + + /** + * 闂ㄧ浜嬩欢鎺ㄩ�乵qtt + */ + private void publishMqtt(AccessControlHostEventInfo info) { + printLog(info); + MqttConsumer.publish(2, false, "accessControl", JSON.toJSONString(info)); } /** @@ -341,4 +470,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