From dd84c954253800217461651d7ff1ac290962c60a Mon Sep 17 00:00:00 2001
From: zhangnaisong <2434969829@qq.com>
Date: 星期六, 22 六月 2024 10:13:12 +0800
Subject: [PATCH] 24小时报警兴趣点前十统计bug修改提交

---
 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java |  167 +++++++++++++++++++++++++++----------------------------
 1 files changed, 83 insertions(+), 84 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
index 5c9587f..ef02d00 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -4,6 +4,8 @@
 import com.ruoyi.alarm.global.domain.GuideTask;
 import com.ruoyi.alarm.global.service.impl.QueueHandler;
 import com.ruoyi.common.annotation.SdkOperate;
+import com.ruoyi.common.config.ARDConfig;
+import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.file.MimeTypeUtils;
@@ -138,37 +140,32 @@
                 }
             }
 
-            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-                GlobalVariable.loginMap.remove(camera.getId());
-            }
-
-            //鍒犻櫎绠$悊閫氶亾
-            ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+//            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
+//                GlobalVariable.loginMap.remove(camera.getId());
+//            }
             GlobalVariable.loginMap.put(camera.getId(), lUserID);
             GlobalVariable.loginCameraMap.put(lUserID, camera);
-
             camera.setLoginId(lUserID);
             camera.setState("1");
-            camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
-            camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
+            int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum;
+            int startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan + 1;
+            if (camera.getGdtype().equals("2")) {
+                chanNum = m_strDeviceInfo.struDeviceV30.byIPChanNum;
+                startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan;
+            }
+            camera.setChanNum(chanNum);
+            camera.setStartDChan(startDchan);
             //鑾峰彇鏈�鏂伴�氶亾
-            List<ArdChannel> cameraChannelList = getIPChannelInfo(camera);
+            List<ArdChannel> cameraChannelList = getChannels(camera);
             if (cameraChannelList.size() > 0) {
                 camera.setChannelList(cameraChannelList);
-                for (ArdChannel channel : cameraChannelList) {
-                    channel.setId(IdUtils.simpleUUID());
-                    ardChannelService.insertArdChannel(channel);
-                }
+                camera.setChanNum(cameraChannelList.size());
+                ardCamerasService.updateArdCameras(camera);
                 //娣诲姞鍒版祦濯掍綋
                 addVtdu(camera);
             }
             //鍒涘缓寮曞闃熷垪
-            if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
-                Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
-                PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
-                GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
-            }
-            ardCamerasService.updateArdCameras(camera);
+            createGuideQueue(camera);
             return AjaxResult.success("璁惧鐧诲綍鎴愬姛");
         } catch (Exception ex) {
             log.error("璁惧鐧诲綍寮傚父", ex);
@@ -249,33 +246,30 @@
                     }
                 }
             }
-            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-                GlobalVariable.loginMap.remove(camera.getId());
-            }
-
-            //鍒犻櫎绠$悊閫氶亾
-            ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+//            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
+//                GlobalVariable.loginMap.remove(camera.getId());
+//            }
             GlobalVariable.loginMap.put(camera.getId(), lUserID);
             GlobalVariable.loginCameraMap.put(lUserID, camera);
-
             camera.setLoginId(lUserID);
             camera.setState("1");
-            camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
-            camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
-
+            int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum;
+            int startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan + 1;
+            if (camera.getGdtype().equals("2")) {
+                chanNum = m_strDeviceInfo.struDeviceV30.byIPChanNum;
+                startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan;
+            }
+            camera.setChanNum(chanNum);
+            camera.setStartDChan(startDchan);
             //鑾峰彇鏈�鏂伴�氶亾
-            List<ArdChannel> cameraChannelList = getIPChannelInfo(camera);
+            List<ArdChannel> cameraChannelList = getChannels(camera);
             if (cameraChannelList.size() > 0) {
                 camera.setChannelList(cameraChannelList);
                 camera.setChanNum(cameraChannelList.size());
-                for (ArdChannel channel : cameraChannelList) {
-                    channel.setId(IdUtils.simpleUUID());
-                    ardChannelService.insertArdChannel(channel);
-                }
+                ardCamerasService.updateArdCameras(camera);
+                //娣诲姞鍒版祦濯掍綋
+                addVtdu(camera);
             }
-            ardCamerasService.updateArdCameras(camera);
-            //娣诲姞鍒版祦濯掍綋
-            addVtdu(camera);
             //鍒涘缓寮曞闃熷垪
             createGuideQueue(camera);
             return AjaxResult.success("璁惧鐧诲綍鎴愬姛");
@@ -287,12 +281,14 @@
 
     //鍒涘缓寮曞闃熷垪
     private void createGuideQueue(ArdCameras camera) {
-        if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
-            Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
-            PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
-            GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
-            //鍚姩闃熷垪澶勭悊鍣�
-            queueHandler.process(camera.getId());
+        if (camera.getGdtype().equals("1")) {
+            if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
+                Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
+                PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
+                GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
+                //鍚姩闃熷垪澶勭悊鍣�
+                queueHandler.process(camera.getId());
+            }
         }
     }
 
@@ -1249,8 +1245,8 @@
     @Override
     public AjaxResult controlDefogcfg(CameraCmd cmd) {
         String cameraId = cmd.getCameraId();
+        Integer chanNo = cmd.getChanNo();
         boolean enable = cmd.isEnable();
-        Integer channelNum = cmd.getChanNo();
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return AjaxResult.warn("璁惧鏈櫥褰�");
         }
@@ -1258,10 +1254,10 @@
         NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new NET_DVR_CAMERAPARAMCFG_EX();
         Pointer point = struCameraParam.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
-        boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size(), ibrBytesReturned);
+        boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_CCDPARAMCFG_EX, chanNo, point, struCameraParam.size(), ibrBytesReturned);
         if (!b_GetCameraParam) {
             int code = hCNetSDK.NET_DVR_GetLastError();
-            log.error("鑾峰彇鍓嶇鍙傛暟澶辫触: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code));
+            log.error("鑾峰彇鍓嶇鍙傛暟澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code));
             return AjaxResult.warn("鑾峰彇鍓嶇鍙傛暟澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")");
         }
         struCameraParam.read();
@@ -1276,10 +1272,10 @@
         }
         struCameraParam.struDefogCfg = defogcfg;
         struCameraParam.write();
-        boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size());
+        boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, chanNo, point, struCameraParam.size());
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
-            log.error("鍒囨崲閫忛浘澶辫触: errorCode" + code + " errorInfo" + SdkErrorCodeEnum.getDescByCode(code));
+            log.error("鍒囨崲閫忛浘澶辫触: errorCode:" + code + " errorInfo:" + SdkErrorCodeEnum.getDescByCode(code));
             return AjaxResult.warn("鍒囨崲閫忛浘澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")");
         }
         log.debug("鍒囨崲閫忛浘鎴愬姛");
@@ -1610,8 +1606,10 @@
     public String record(CameraCmd cmd) {
         try {
             String cameraId = cmd.getCameraId();
-            Integer channelNum = cmd.getChanNo();
-            String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
+            Integer chanNo = cmd.getChanNo();
+            // 鏈湴涓存椂褰曞儚鍦板潃
+            String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX;
+            String path = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4");
             boolean enable = cmd.isEnable();
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return "";
@@ -1620,7 +1618,7 @@
             //寮哄埗I甯х粨鏋勪綋瀵硅薄
             HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //鏂板缓缁撴瀯浣撳璞�
             netDvrIFrame.read();
-            netDvrIFrame.dwChannel = channelNum;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆
+            netDvrIFrame.dwChannel = chanNo;//鍥犱负涓婃枃浠g爜涓缃簡閫氶亾鍙凤紝鎸夌収涓婃枃涓殑璁剧疆
             netDvrIFrame.byStreamType = 0;
             netDvrIFrame.dwSize = netDvrIFrame.size();
             netDvrIFrame.write();
@@ -1630,7 +1628,7 @@
             //棰勮鍙傛暟
             NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
             previewinfo.read();
-            previewinfo.lChannel = channelNum;
+            previewinfo.lChannel = chanNo;
             previewinfo.dwStreamType = 0;//鐮佹祦绫诲瀷锛�0-涓荤爜娴侊紝1-瀛愮爜娴侊紝2-涓夌爜娴侊紝3-铏氭嫙鐮佹祦锛屼互姝ょ被鎺�
             previewinfo.dwLinkMode = 0;//杩炴帴鏂瑰紡锛�0-TCP鏂瑰紡锛�1-UDP鏂瑰紡锛�2-澶氭挱鏂瑰紡锛�3-RTP鏂瑰紡锛�4-RTP/RTSP锛�5-RTP/HTTP锛�6-HRUDP锛堝彲闈犱紶杈擄級锛�7-RTSP/HTTPS锛�8-NPQ
             previewinfo.hPlayWnd = null;//鎾斁绐楀彛鐨勫彞鏌勶紝涓篘ULL琛ㄧず涓嶈В鐮佹樉绀恒��
@@ -1653,6 +1651,7 @@
                     return "";
                 }
                 log.debug("褰曞儚寮�濮�");
+
             } else {
                 if (GlobalVariable.previewMap.containsKey(cameraId)) {
                     Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
@@ -1682,7 +1681,9 @@
         try {
             String cameraId = cmd.getCameraId();
             Integer channelNum = cmd.getChanNo();
-            String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
+            // 鏈湴涓存椂褰曞儚鍦板潃
+            String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX;
+            String path = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4");
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return false;
             }
@@ -1740,7 +1741,9 @@
         try {
             String cameraId = cmd.getCameraId();
             Integer channelNum = cmd.getChanNo();
-            String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
+            // 鏈湴涓存椂褰曞儚鍦板潃
+            String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX;
+            String path = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4");
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return "";
             }
@@ -1834,15 +1837,12 @@
     }
 
     //鑾峰彇IP閫氶亾
-    public List<ArdChannel> getIPChannelInfo(ArdCameras camera) {
-
+    public List<ArdChannel> getChannels(ArdCameras camera) {
         //鑾峰彇閫氶亾
         List<ArdChannel> channelList = new ArrayList<>();
         try {
-            if (camera.getGdtype().equals("3")) {
-                camera.setChanNum(64);//瓒呰剳鑾峰彇鍦ㄧ嚎閫氶亾鏁�
-                camera.setStartDChan(0);//瓒呰剳鍒濆閫氶亾涓�0
-            }
+            //鍒犻櫎绠$悊閫氶亾
+            ardChannelService.deleteArdChannelByDeviceId(camera.getId());
             IntByReference ibrBytesReturned = new IntByReference(0);//鑾峰彇IP鎺ュ叆閰嶇疆鍙傛暟
             HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40();
             m_strIpparaCfg.write();
@@ -1852,13 +1852,13 @@
             m_strIpparaCfg.read();
             //log.debug("璧峰鏁板瓧閫氶亾鍙凤細" + m_strIpparaCfg.dwStartDChan);//m_strIpparaCfg.dwDChanNum
             for (int iChannum = 0; iChannum < camera.getChanNum(); iChannum++) {
-                ArdChannel ardChannel = new ArdChannel();
-                int channum = iChannum + camera.getStartDChan() + 1;
+                ArdChannel channel = new ArdChannel();
+                int chanNo = iChannum + camera.getStartDChan();
                 HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40();
                 strPicCfg.dwSize = strPicCfg.size();
                 strPicCfg.write();
                 Pointer pStrPicCfg = strPicCfg.getPointer();
-                NativeLong lChannel = new NativeLong(channum);
+                NativeLong lChannel = new NativeLong(chanNo);
                 IntByReference pInt = new IntByReference(0);
                 boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(),
                         pStrPicCfg, strPicCfg.size(), pInt);
@@ -1870,21 +1870,21 @@
                 if (m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType == 0) {
                     m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO.class);
                     m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.read();
-                    int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256;
+                    int channelNo = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256;
                     String channelName = new String(strPicCfg.sChanName, "GBK").trim();
-                    ardChannel.setDeviceId(camera.getId());
-                    ardChannel.setName(channelName);
-                    ardChannel.setChanNo(channum);
-                    if (camera.getGdtype().equals("3")) {
-                        //瓒呰剳鍙幏鍙栧湪绾块�氶亾
-                        if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) {
-                            //log.debug("IP閫氶亾" + channum + "鍦ㄧ嚎");
-                            channelList.add(ardChannel);
+                    channelName = channelName.equals("") ? "閫氶亾" + chanNo : channelName;
+                    channel.setDeviceId(camera.getId());
+                    channel.setName(channelName);
+                    channel.setChanNo(chanNo);
+                    if (camera.getGdtype().equals("3") || camera.getGdtype().equals("2")) {
+                        //NVR杩囨护绂荤嚎閫氶亾
+                        if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable != 1) {
+                            continue;
                         }
-                    } else {
-                        channelList.add(ardChannel);
                     }
+                    channelList.add(channel);
                 }
+                ardChannelService.insertArdChannel(channel);
             }
         } catch (Exception ex) {
             log.error("鑾峰彇IP閫氶亾寮傚父:" + ex.getMessage());
@@ -1939,9 +1939,12 @@
     @Override
     public AjaxResult localRecordStart(CameraCmd cmd) {
         try {
+            String operator = cmd.getOperator();
             String cameraId = cmd.getCameraId();
             Integer channelNum = cmd.getChanNo();
-            String path = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
+            // 鏈湴涓存椂褰曞儚鍦板潃
+            String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX;
+            String path = FileUtils.createFile(tempPath + "/" + operator + "/" + cameraId + ".mp4");
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return AjaxResult.warn("璁惧鏈櫥褰�");
             }
@@ -1998,6 +2001,7 @@
     @Override
     public AjaxResult localRecordStop(CameraCmd cmd) {
         try {
+            String operator = cmd.getOperator();
             String cameraId = cmd.getCameraId();
             Integer channelNum = cmd.getChanNo();
             Integer lRealHandle = cmd.getRecordId().intValue();
@@ -2028,17 +2032,12 @@
             previewinfo.byNPQMode = 0;//NPQ妯″紡锛�0-鐩磋繛妯″紡锛�1-杩囨祦濯掍綋妯″紡
             previewinfo.write();
             //endregion
-            //if (GlobalVariable.previewMap.containsKey(cameraId)) {
-            //    Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
-            //    hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
-            //    GlobalVariable.previewMap.remove(cameraId);
-            //}
             hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
             log.debug("鏈湴褰曞儚鍋滄");
-            String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4");
+            // 鏈湴涓存椂褰曞儚鍦板潃
+            String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX;
+            String recordPath = FileUtils.createFile(tempPath + "/" + operator + "/" + cameraId + ".mp4");
             byte[] recordBytes = Files.readAllBytes(Paths.get(recordPath));
-            //OutputStream outputStream = response.getOutputStream();
-            //outputStream.write(imageBytes);
             return AjaxResult.success(recordBytes);
         } catch (Exception ex) {
             log.error("鏈湴褰曞儚鍋滄寮傚父" + ex.getMessage());

--
Gitblit v1.9.3