From 483f72f5540bdefb3ddd4726113b3c171eb7107d Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期四, 06 七月 2023 17:20:41 +0800 Subject: [PATCH] 增加外联设备报警解析并上传mqtt --- src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 134 +++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 124 insertions(+), 10 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 b2e594c..a8a32c0 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 @@ -5,7 +5,9 @@ import com.ard.alarm.camera.domain.CameraCmd; import com.ard.alarm.camera.service.impl.ArdCamerasServiceImpl; import com.ard.config.MinioClientSingleton; +import com.ard.utils.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; @@ -15,6 +17,7 @@ import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; +import javax.xml.bind.DatatypeConverter; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.ByteBuffer; @@ -43,10 +46,16 @@ @Override public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { ArdCamerasServiceImpl ardCamerasService = SpringTool.getApplicationContext().getBean(ArdCamerasServiceImpl.class); - + String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP); + Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort); + ArdCameras ardCameras = new ArdCameras(); + ardCameras.setIp(sDeviceIP); + ardCameras.setPort(wLinkPort); + ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0); String sTime;//浜嬩欢鏃堕棿 String url;//浜嬩欢鍥剧墖 alarmEventInfo info;//浜嬩欢淇℃伅 + //lCommand鏄紶鐨勬姤璀︾被鍨� switch (lCommand) { case HCNetSDK.COMM_ALARM_RULE: @@ -57,13 +66,10 @@ Pointer pVCAInfo = strVcaAlarm.getPointer(); pVCAInfo.write(0, pAlarmInfo.getByteArray(0, strVcaAlarm.size()), 0, strVcaAlarm.size()); strVcaAlarm.read(); - Integer ruleID = Integer.valueOf(strVcaAlarm.struRuleInfo.byRuleID); + Integer ruleID = Integer.valueOf(strVcaAlarm.struRuleInfo.byRuleID); sTime = DateUtils.parseTime(strVcaAlarm.dwAbsTime);//浜嬩欢鏃堕棿 String ipaddr = new String(strVcaAlarm.struDevInfo.struDevIP.sIpV4).trim();//璁惧ip Integer channel = Integer.valueOf(strVcaAlarm.struDevInfo.byChannel);//閫氶亾 - ArdCameras ardCameras = new ArdCameras(); - ardCameras.setIp(ipaddr); - ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0); info = new alarmEventInfo(); info.setAlarmName("浜哄憳琛屼负鍒嗘瀽"); info.setAlarmTime(sTime); @@ -138,6 +144,85 @@ case HCNetSDK.COMM_GISINFO_UPLOAD: log.info("GPS鎶ヨ淇℃伅涓婃姤"); break; + case HCNetSDK.COMM_ALARMHOST_CID_ALARM: + log.info("鎶ヨ涓绘満 CID 鎶ュ憡鎶ヨ涓婁紶"); + HCNetSDK.NET_DVR_CID_ALARM netDvrCidAlarm = new HCNetSDK.NET_DVR_CID_ALARM(); + netDvrCidAlarm.write(); + Pointer pCIDInfo = netDvrCidAlarm.getPointer(); + pCIDInfo.write(0, pAlarmInfo.getByteArray(0, netDvrCidAlarm.size()), 0, netDvrCidAlarm.size()); + netDvrCidAlarm.read(); + //CID浜嬩欢鍚� + String sCIDCode = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDCode);//CID浜嬩欢鍚� + + //CID浜嬩欢鍚� + //String sCIDDescribe = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDDescribe);//CID浜嬩欢鍚� + int position = ByteUtils.findIndexOfDoubleZero(netDvrCidAlarm.sCIDDescribe); + String sCIDDescribe; + if (position != -1) { + byte[] result = new byte[position]; + System.arraycopy(netDvrCidAlarm.sCIDDescribe, 0, result, 0, position); + sCIDDescribe = ByteUtils.bytesToStringZh(result); + } else { + sCIDDescribe = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDDescribe); + } + //瑙﹀彂鎶ヨ鐨勬椂闂寸偣 + String struTriggerTime = DateUtils.convertDate(parseAlarmTime(netDvrCidAlarm.struTriggerTime), "yyyy-M-d H:m:s"); + //涓婁紶鎶ヨ鐨勬椂闂寸偣 + String struUploadTime = DateUtils.convertDate(parseAlarmTime(netDvrCidAlarm.struUploadTime), "yyyy-M-d H:m:s"); + //鎶ュ憡绫诲瀷 + String byReportType = ""; + switch (netDvrCidAlarm.byReportType) { + case 1: + byReportType = "闃插尯鎶ヨ"; + break; + case 2: + byReportType = "瑙嗛鎶ヨ"; + break; + case 3: + byReportType = "杞槻鍖烘姤璀�"; + break; + case 4: + byReportType = "鎸熸寔鎶ヨ"; + break; + case 5: + byReportType = "闃叉媶鎶ヨ "; + break; + case 6: + byReportType = "鎿嶄綔鎶ュ憡 "; + break; + case 7: + byReportType = "寮傚父鎶ュ憡 "; + break; + } + //瀛愮郴缁熷彿 + Integer bySubSysNo = Integer.valueOf(netDvrCidAlarm.bySubSysNo); + //闃插尯鍙� 璧峰0 + Integer wDefenceNo = Integer.valueOf(netDvrCidAlarm.wDefenceNo); + //闃插尯鍚嶇О + String wDefenceName = ""; + if (!bySubSysNo.equals(-1)) { + CameraCmd cmd = new CameraCmd(); + cmd.setCameraId(ardcamere.getId()); + cmd.setWZoneIndex(wDefenceNo); + wDefenceName = HikClientUtil.getDefenseZoneName(cmd); + } + if (sCIDDescribe.contains("鎭㈠")) { + return true; + } + ExternalAlarmEventInfo externalAlarmEventInfo = new ExternalAlarmEventInfo(); + externalAlarmEventInfo.setAlarmId(sCIDCode); + externalAlarmEventInfo.setAlarmName(sCIDDescribe); + externalAlarmEventInfo.setDefenseId((wDefenceNo + 1) ); + externalAlarmEventInfo.setDefenseName(wDefenceName); + externalAlarmEventInfo.setSubSysNo(bySubSysNo); + externalAlarmEventInfo.setAlarmType(byReportType); + externalAlarmEventInfo.setAlarmTime(struTriggerTime); + externalAlarmEventInfo.setCameraId(ardcamere.getId()); + externalAlarmEventInfo.setCameraName(ardcamere.getName()); + externalAlarmEventInfo.setCameraIp(ardcamere.getIp()); + externalAlarmEventInfo.setCameraType(ardcamere.getGdtype()); + publishMqtt(externalAlarmEventInfo); + break; default: log.info("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); break; @@ -198,19 +283,48 @@ } /** - * 鎵撳嵃鏃ュ織 + * 鎵撳嵃閫氱敤鍏夌數鏃ュ織 */ private void printLog(alarmEventInfo info) { - log.info("銆愯鍒欍��" + info.getAlarmName() +"銆愯鍒檌d銆�" + info.getRuleId() + "銆愮被鍨嬨��" + info.getAlarmType() + + log.info("銆愯鍒欍��" + info.getAlarmName() + "銆愯鍒檌d銆�" + info.getRuleId() + "銆愮被鍨嬨��" + info.getAlarmType() + "銆愭椂闂淬��" + info.getAlarmTime() + "銆愮浉鏈篿d銆�" + info.getCameraId() + "銆愮浉鏈恒��" + info.getCameraName() + - "銆怚P銆�" + info.getCameraIp() + "銆愰�氶亾銆�" + info.getCameraChannel() +"銆愬瀷鍙枫��" + info.getCameraType() + + "銆怚P銆�" + info.getCameraIp() + "銆愰�氶亾銆�" + info.getCameraChannel() + "銆愬瀷鍙枫��" + info.getCameraType() + "銆愬浘鐗囥��" + info.getPicUrl() + "銆愬潗鏍囥��" + info.getLongitude() + "," + info.getLatitude()); } /** - * 鎺ㄩ�乵qtt + * 鎵撳嵃澶栬仈鎶ヨ鏃ュ織 + */ + private void printLog(ExternalAlarmEventInfo info) { + log.info("銆愭姤璀D銆�" + info.getAlarmId() + "銆愭姤璀﹀悕绉般��" + info.getAlarmName() + + "銆愰槻鍖篒D銆�" + info.getDefenseId() + "銆愰槻鍖哄悕绉般��" + info.getDefenseName() + "銆愮被鍨嬨��" + info.getAlarmType() + + "銆愭椂闂淬��" + info.getAlarmTime() + "銆愮浉鏈篒D銆�" + info.getCameraId() + "銆愮浉鏈恒��" + info.getCameraName() + + "銆怚P銆�" + info.getCameraIp() + "銆愬瀷鍙枫��" + info.getCameraType()); + } + + /** + * 閫氱敤鍏夌數鎶ヨ鎺ㄩ�乵qtt */ private void publishMqtt(alarmEventInfo info) { - // printLog(info); + // printLog(info); MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info)); } + /** + * 澶栬仈鎶ヨ鎺ㄩ�乵qtt + */ + private void publishMqtt(ExternalAlarmEventInfo info) { + printLog(info); + MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info)); + } + /** + * 鏃堕棿鏍煎紡鍖� + */ + private String parseAlarmTime(HCNetSDK.NET_DVR_TIME_EX netDvrTimeEx) { + short wYear = netDvrTimeEx.wYear; + byte byMonth = netDvrTimeEx.byMonth; + byte byDay = netDvrTimeEx.byDay; + byte byHour = netDvrTimeEx.byHour; + byte byMinute = netDvrTimeEx.byMinute; + byte bySecond = netDvrTimeEx.bySecond; + return wYear + "-" + byMonth + "-" + byDay + " " + byHour + ":" + byMinute + ":" + bySecond; + } } -- Gitblit v1.9.3