From a0a1b5499e458c7b0a2a091608718df9aef448c7 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期四, 10 八月 2023 10:20:44 +0800 Subject: [PATCH] 优化日志 --- src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 232 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 194 insertions(+), 38 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 a8a32c0..b041298 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,23 +3,24 @@ 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.impl.ArdCamerasServiceImpl; +import com.ard.alarm.camera.service.IArdCamerasService; +import com.ard.alarm.external.domain.ArdEquipExternal; +import com.ard.alarm.external.service.IArdEquipExternalService; import com.ard.config.MinioClientSingleton; -import com.ard.utils.ByteUtils; +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.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.other.DateUtils; +import com.ard.utils.other.SpringTool; import com.ard.utils.mqtt.MqttConsumer; 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.io.*; import java.nio.ByteBuffer; import java.text.SimpleDateFormat; import java.util.Date; @@ -45,21 +46,21 @@ */ @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;//浜嬩欢淇℃伅 + String sTime;//浜嬩欢鏃堕棿 + String url = "";//浜嬩欢鍥剧墖 //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)); HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM(); strVcaAlarm.write(); @@ -70,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()); @@ -128,7 +129,7 @@ //endregion break; default: - log.info("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx); + log.debug("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx); printLog(info); break; } @@ -139,13 +140,21 @@ publishMqtt(info); break; case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: - log.info("浜鸿劯妫�娴嬩簨浠朵笂鎶�"); + log.debug("浜鸿劯妫�娴嬩簨浠朵笂鎶�"); break; case HCNetSDK.COMM_GISINFO_UPLOAD: - log.info("GPS鎶ヨ淇℃伅涓婃姤"); + log.debug("GPS鎶ヨ淇℃伅涓婃姤"); break; case HCNetSDK.COMM_ALARMHOST_CID_ALARM: - log.info("鎶ヨ涓绘満 CID 鎶ュ憡鎶ヨ涓婁紶"); + log.debug("鎶ヨ涓绘満 CID 鎶ュ憡鎶ヨ涓婁紶"); + //region 鎶ヨ涓绘満鎶ヨ澶勭悊 + ArdEquipExternal ardEquipExternal = new ArdEquipExternal(); + ardEquipExternal.setIp(sDeviceIP); + ardEquipExternal.setPort(wLinkPort); + IArdEquipExternalService ardEquipExternalService = SpringTool.getApplicationContext().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(); @@ -202,26 +211,140 @@ String wDefenceName = ""; if (!bySubSysNo.equals(-1)) { CameraCmd cmd = new CameraCmd(); - cmd.setCameraId(ardcamere.getId()); + cmd.setCameraId(ardEquipExternal.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.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()); + 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)); @@ -254,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); @@ -267,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()); @@ -285,36 +408,56 @@ /** * 鎵撳嵃閫氱敤鍏夌數鏃ュ織 */ - 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() + "銆愬浘鐗囥��" + 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.getCameraId() + "銆愮浉鏈恒��" + info.getCameraName() + - "銆怚P銆�" + info.getCameraIp() + "銆愬瀷鍙枫��" + info.getCameraType()); + "銆愭椂闂淬��" + info.getAlarmTime() + "銆愭姤璀︿富鏈篒D銆�" + info.getAlarmHostId()); + } + + /** + * 鎵撳嵃闂ㄧ浜嬩欢鏃ュ織 + */ + private void printLog(AccessControlHostEventInfo info) { + log.debug("銆愭姤璀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, "camera", JSON.toJSONString(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)); + } + /** * 鏃堕棿鏍煎紡鍖� */ @@ -327,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