From 092d7c56bb8653075b8f4b27220e69e6bb8e5d37 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期四, 09 十一月 2023 16:49:26 +0800
Subject: [PATCH] 增加超脑业务

---
 src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java |  194 ++++++++++++++++++++++++------------------------
 1 files changed, 96 insertions(+), 98 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 9314aa7..6e3ca3c 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
@@ -6,17 +6,17 @@
 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.minio.MinioUtil;
 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.util.hikSdkUtil.HCNetSDK;
-import com.ard.utils.hiksdk.util.minio.MinioUtils;
 import com.ard.utils.other.DateUtils;
-import com.ard.utils.other.SpringTool;
-import com.ard.utils.mqtt.MqttConsumer;
+import com.ard.utils.mqtt.MqttProducer;
+import com.ard.utils.spring.SpringUtils;
+import com.ard.utils.uuid.IdUtils;
 import com.sun.jna.Pointer;
 import lombok.extern.slf4j.Slf4j;
 
@@ -24,6 +24,7 @@
 import java.nio.ByteBuffer;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @ClassName: FMSGCallBack
@@ -47,56 +48,55 @@
     @Override
     public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
         SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP);//璁惧IP鍦板潃
+        String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP).trim();//璁惧IP鍦板潃
         Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort);//璁惧閫氳绔彛
         CameraEventInfo info;
         String sTime;//浜嬩欢鏃堕棿
         String url = "";//浜嬩欢鍥剧墖
         //lCommand鏄紶鐨勬姤璀︾被鍨�
-        //log.debug("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand));
+        log.debug("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand));
+        ArdCameras ardCameras = new ArdCameras();
+        ardCameras.setIp(sDeviceIP);
+        ardCameras.setPort(wLinkPort);
+        IArdCamerasService ardCamerasService = SpringUtils.getBean(IArdCamerasService.class);
+        List<ArdCameras> ardCamerasList = ardCamerasService.selectArdCamerasList(ardCameras);
         switch (lCommand) {
+            //region 绉诲姩渚︽祴銆佽棰戜涪澶便�侀伄鎸°�両O淇″彿閲忕瓑鎶ヨ淇℃伅(V3.0浠ヤ笂鐗堟湰鏀寔鐨勮澶�)
             case HCNetSDK.COMM_ALARM_V30:
-                log.debug("绉诲姩渚︽祴");
-                ArdCameras ardCameras = new ArdCameras();
-                ardCameras.setIp(sDeviceIP);
-                ardCameras.setPort(wLinkPort);
-                IArdCamerasService ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class);
-                ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
+                //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.setCameraType(camera.getGdtype());
-                        info.setCameraChannel(Integer.valueOf(netDvrAlarminfoV30.byChannel[0]));
-                        info.setLongitude(camera.getLongitude());
-                        info.setLatitude(camera.getLatitude());
-                        info.setAlarmType("绉诲姩渚︽祴");
-                        printLog(info);
-                        //鍥剧墖瀛樺叆minio
-                        url = savePicture(info);
-                        info.setPicUrl(url);
-                        publishMqtt(info);
-                        break;
+                if (ardCamerasList.size() > 0) {
+                    ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
+                    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;
+                    }
                 }
-
+                //endregion
+                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);
-
+                //log.debug("琛屼负鍒嗘瀽淇℃伅鎶ヨ淇℃伅涓婃姤");
+                //region 寮傚父琛屼负璇嗗埆淇℃伅
                 HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM();
                 strVcaAlarm.write();
                 Pointer pVCAInfo = strVcaAlarm.getPointer();
@@ -109,25 +109,27 @@
                 info = new CameraEventInfo();
                 info.setAlarmName("浜哄憳琛屼负鍒嗘瀽");
                 info.setAlarmTime(sTime);
-                info.setCameraName(ardCamera.getName());
-                info.setCameraId(ardCamera.getId());
-                info.setCameraIp(ipaddr);
-                info.setCameraType(ardCamera.getGdtype());
-                info.setCameraChannel(channel);
-                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);
-                        printLog(info);
-                        //鍥剧墖瀛樺叆minio
-                        url = savePicture(info);
-                        info.setPicUrl(url);
-                        publishMqtt(info);
-                        //endregion
-                        break;
+                if (ardCamerasList.size() > 0) {
+                    ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
+                    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(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
+                            url = savePicture(info);
+                            info.setPicUrl(url);
+                            publishMqtt(info);
+                            //endregion
+                            break;
 //                    case 2: //region 鐩爣杩涘叆鍖哄煙
 //                        info.setAlarmType("鐩爣杩涘叆鍖哄煙鎶ヨ");
 //                        strVcaAlarm.struRuleInfo.uEventParam.setType(HCNetSDK.NET_VCA_AREA.class);
@@ -138,16 +140,15 @@
 //                        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);
-                        printLog(info);
-                        //鍥剧墖瀛樺叆minio
-                        url = savePicture(info);
-                        info.setPicUrl(url);
-                        publishMqtt(info);
-                        //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
@@ -172,27 +173,27 @@
 //                        info.setAlarmType("鐜╂墜鏈烘姤璀︿簨浠�");
 //                        //endregion
 //                        break;
-                    default:
-                        // log.debug("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx);
-                        break;
+                        default:
+                            // log.debug("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx);
+                            break;
+                    }
                 }
                 //endregion
                 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鎶ュ憡鎶ヨ涓婃姤");
                 //region 鎶ヨ涓绘満鎶ヨ澶勭悊
                 ArdEquipExternal ardEquipExternal = new ArdEquipExternal();
                 ardEquipExternal.setIp(sDeviceIP);
                 ardEquipExternal.setPort(wLinkPort);
-                IArdEquipExternalService ardEquipExternalService = SpringTool.getApplicationContext().getBean(IArdEquipExternalService.class);
+                IArdEquipExternalService ardEquipExternalService = SpringUtils.getBean(IArdEquipExternalService.class);
                 ardEquipExternal = ardEquipExternalService.selectArdEquipExternal(ardEquipExternal);
-
 
                 HCNetSDK.NET_DVR_CID_ALARM netDvrCidAlarm = new HCNetSDK.NET_DVR_CID_ALARM();
                 netDvrCidAlarm.write();
@@ -201,7 +202,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);
@@ -271,13 +271,13 @@
                 //endregion
                 break;
             case HCNetSDK.COMM_ALARM_ACS:
+                log.debug("闂ㄧ涓绘満鎶ヨ涓婃姤");
                 //region 闂ㄧ涓绘満鎶ヨ澶勭悊
                 ArdEquipExternal accessControlHost = new ArdEquipExternal();
                 accessControlHost.setIp(sDeviceIP);
                 accessControlHost.setPort(wLinkPort);
-                ardEquipExternalService = SpringTool.getApplicationContext().getBean(IArdEquipExternalService.class);
+                ardEquipExternalService = SpringUtils.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();
@@ -290,13 +290,12 @@
                     // log.debug("闈炰簨浠舵姤璀︽暟鎹笂鎶�(鏆備笉瑙f瀽)");
                     break;
                 }
+
                 int dwMinor = strACSInfo.dwMinor;
                 if (dwMinor != 80 && dwMinor != 104) {
                     //鍙В鏋愮湡浜烘娴嬪け璐ュ拰浜鸿劯鎶撴媿澶辫触鐨勬绫诲瀷浜嬩欢
                     break;
                 }
-//                log.info("闂ㄧ涓绘満鎶ヨ涓婁紶");
-//                log.info("銆愪富绫诲瀷銆戜簨浠�");
                 String alarmType = "";
                 switch (dwMinor) {
                     case 104:
@@ -306,13 +305,12 @@
                         alarmType = "浜鸿劯鎶撴媿澶辫触";
                         break;
                 }
+                log.debug("闂ㄧ涓绘満鎶ヨ涓婁紶:" + alarmType);
                 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;
@@ -322,10 +320,10 @@
                         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");
+                        String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg";
+                        boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG");
                         if (uploadObject) {
-                            url = MinioClientSingleton.domainUrl + "/" + bucketName + "/" + objectName;
+                            url = MinioUtil.getBucketObjectUrl(bucketName, objectName);
                             //log.debug("涓婁紶鏂囦欢鎴愬姛!" + url);
                         }
                     } catch (Exception e) {
@@ -388,7 +386,7 @@
                 //endregion
                 break;
             default:
-                // log.debug("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand));
+                log.debug("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand));
                 break;
 
         }
@@ -401,15 +399,15 @@
      */
     private String savePicture(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;
@@ -448,8 +446,8 @@
      * 閫氱敤鍏夌數鎶ヨ鎺ㄩ�乵qtt
      */
     private void publishMqtt(CameraEventInfo info) {
-        // printLog(info);
-        MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info));
+        printLog(info);
+        MqttProducer.publish(2, false, "camera", JSON.toJSONString(info));
     }
 
     /**
@@ -457,7 +455,7 @@
      */
     private void publishMqtt(ExternalAlarmEventInfo info) {
         printLog(info);
-        MqttConsumer.publish(2, false, "external", JSON.toJSONString(info));
+        MqttProducer.publish(2, false, "external", JSON.toJSONString(info));
     }
 
     /**
@@ -465,7 +463,7 @@
      */
     private void publishMqtt(AccessControlHostEventInfo info) {
         printLog(info);
-        MqttConsumer.publish(2, false, "accessControl", JSON.toJSONString(info));
+        MqttProducer.publish(2, false, "accessControl", JSON.toJSONString(info));
     }
 
     /**

--
Gitblit v1.9.3