From e4043f3eea29b75ab7576f5489ed817985b71aa4 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期三, 06 十二月 2023 17:12:26 +0800
Subject: [PATCH] 增加超脑报警业务

---
 ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java |  174 +++++++++++++++++++++++++++++++---------------------------
 1 files changed, 93 insertions(+), 81 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 4992f17..7c36f42 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
@@ -140,37 +140,16 @@
             camera.setState("1");
             camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
             camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
-            ardCamerasService.updateArdCameras(camera);
             //鑾峰彇鏈�鏂伴�氶亾
-            List<ArdChannel> cameraChannelList = getCameraChannelList(camera);
+            List<ArdChannel> cameraChannelList = getIPChannelInfo(camera);
             if (cameraChannelList.size() > 0) {
+                camera.setChannelList(cameraChannelList);
                 for (ArdChannel channel : cameraChannelList) {
                     channel.setId(IdUtils.simpleUUID());
                     ardChannelService.insertArdChannel(channel);
                 }
                 //娣诲姞鍒版祦濯掍綋
-                for (ArdChannel channel : cameraChannelList) {
-                    String name = camera.getId() + "_" + channel.getChanNo();
-                    String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
-                    Vtdu vtdu = vtduService.selectVtduByName(name);
-                    if (vtdu != null) {
-                        vtduService.deleteVtduByName(name);
-                    }
-                    //娣诲姞鍒版祦濯掍綋
-                    vtdu = new Vtdu();
-                    vtdu.setRtspSource(rtspSource);
-                    vtdu.setName(camera.getId() + "_" + channel.getChanNo());
-                    CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
-                    Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
-                    if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
-                        vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
-                    } else {
-                        vtdu.setIsCode("1");//榛樿杞爜
-                    }
-                    vtdu.setMode("1");//榛樿CPU杞В鐮�
-                    vtdu.setCameraId(camera.getId());
-                    vtduService.insertVtdu(vtdu);
-                }
+                addVtdu(camera);
             }
             //鍒涘缓寮曞闃熷垪
             if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
@@ -178,7 +157,7 @@
                 PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
                 GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
             }
-
+            ardCamerasService.updateArdCameras(camera);
         } catch (Exception ex) {
             log.error("娉ㄥ唽璁惧寮傚父", ex);
         }
@@ -242,7 +221,7 @@
                 //鍒犻櫎绠$悊閫氶亾
                 ardChannelService.deleteArdChannelByDeviceId(camera.getId());
                 ardCamerasService.updateArdCameras(camera);
-                return ;
+                return;
             }
 
             log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]");
@@ -251,7 +230,7 @@
                 //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑)
                 if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) {
                     log.debug("Set fExceptionCallBack function fail");
-                    return ;
+                    return;
                 } else {
                     log.debug("Set fExceptionCallBack function successfully!");
                 }
@@ -270,48 +249,60 @@
             camera.setState("1");
             camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
             camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
-            ardCamerasService.updateArdCameras(camera);
+
             //鑾峰彇鏈�鏂伴�氶亾
-            List<ArdChannel> cameraChannelList = getCameraChannelList(camera);
+            List<ArdChannel> cameraChannelList = getIPChannelInfo(camera);
             if (cameraChannelList.size() > 0) {
+                camera.setChannelList(cameraChannelList);
+                camera.setChanNum(cameraChannelList.size());
                 for (ArdChannel channel : cameraChannelList) {
                     channel.setId(IdUtils.simpleUUID());
                     ardChannelService.insertArdChannel(channel);
                 }
-                //娣诲姞鍒版祦濯掍綋
-                for (ArdChannel channel : cameraChannelList) {
-                    String name = camera.getId() + "_" + channel.getChanNo();
-                    String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
-                    Vtdu vtdu = vtduService.selectVtduByName(name);
-                    if (vtdu != null) {
-                        vtduService.deleteVtduByName(name);
-                    }
-                    //娣诲姞鍒版祦濯掍綋
-                    vtdu = new Vtdu();
-                    vtdu.setRtspSource(rtspSource);
-                    vtdu.setName(camera.getId() + "_" + channel.getChanNo());
-                    CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
-                    Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
-                    if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
-                        vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
-                    } else {
-                        vtdu.setIsCode("1");//榛樿杞爜
-                    }
-                    vtdu.setMode("1");//榛樿CPU杞В鐮�
-                    vtdu.setCameraId(camera.getId());
-                    vtduService.insertVtdu(vtdu);
-                }
             }
+            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);
             }
-
         } catch (Exception ex) {
             log.error("娉ㄥ唽璁惧寮傚父", ex);
         }
+    }
+
+    //娣诲姞鍒版祦濯掍綋
+    private void addVtdu(ArdCameras camera) {
+        try {
+            for (ArdChannel channel : camera.getChannelList()) {
+                String name = camera.getId() + "_" + channel.getChanNo();
+                String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
+                Vtdu vtdu = vtduService.selectVtduByName(name);
+                if (vtdu != null) {
+                    vtduService.deleteVtduByName(name);
+                }
+                //娣诲姞鍒版祦濯掍綋
+                vtdu = new Vtdu();
+                vtdu.setRtspSource(rtspSource);
+                vtdu.setName(camera.getId() + "_" + channel.getChanNo());
+                CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
+                Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
+                if (videoCompressionCfg.get("videoEncType").equals("鏍囧噯h264")) {
+                    vtdu.setIsCode("0");//榛樿涓嶈浆鐮�
+                } else {
+                    vtdu.setIsCode("1");//榛樿杞爜
+                }
+                vtdu.setMode("1");//榛樿CPU杞В鐮�
+                vtdu.setCameraId(camera.getId());
+                vtduService.insertVtdu(vtdu);
+            }
+        } catch (Exception ex) {
+            log.error("閫氶亾娣诲姞鍒版祦濯掍綋寮傚父锛�" + ex.getMessage());
+        }
+
     }
 
     /**
@@ -1194,8 +1185,7 @@
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
             log.error("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code);
-        }
-        else {
+        } else {
             log.debug("璁剧疆澶滆鎴愬姛");
         }
 
@@ -1682,38 +1672,60 @@
     }
 
     //鑾峰彇IP閫氶亾
-    @Override
-    public List<ArdChannel> getCameraChannelList(ArdCameras camera) {
-        /*鑾峰彇閫氶亾*/
+    public List<ArdChannel> getIPChannelInfo(ArdCameras camera) {
+
+        //鑾峰彇閫氶亾
         List<ArdChannel> channelList = new ArrayList<>();
         try {
-            Integer chanNum = camera.getChanNum();
-            Integer startDChan = camera.getStartDChan();
-            if (chanNum > 0) {
-                // 鑾峰彇閫氶亾鍙�
-                for (int iChannum = 0; iChannum < chanNum; iChannum++) {
-                    ArdChannel ardChannel = new ArdChannel();
-                    int channum = iChannum + startDChan + 1;
-                    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);
-                    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);
-                    if (b_GetPicCfg) {
-                        strPicCfg.read();
-                        String channelName = new String(strPicCfg.sChanName, "GBK").trim();
-                        ardChannel.setName(channelName);
-                    }
+            if (camera.getGdtype().equals("3")) {
+                camera.setChanNum(64);//瓒呰剳鑾峰彇鍦ㄧ嚎閫氶亾鏁�
+                camera.setStartDChan(0);//瓒呰剳鍒濆閫氶亾涓�0
+            }
+            IntByReference ibrBytesReturned = new IntByReference(0);//鑾峰彇IP鎺ュ叆閰嶇疆鍙傛暟
+            HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40();
+            m_strIpparaCfg.write();
+            //lpIpParaConfig 鎺ユ敹鏁版嵁鐨勭紦鍐叉寚閽�
+            Pointer lpIpParaConfig = m_strIpparaCfg.getPointer();
+            boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_IPPARACFG_V40, 0, lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned);
+            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;
+                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);
+                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);
+                if (!b_GetPicCfg) {
+                    // log.error("鑾峰彇鍥惧儚鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError());
+                }
+                strPicCfg.read();
+                m_strIpparaCfg.struStreamMode[iChannum].read();
+                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;
+                    String channelName = new String(strPicCfg.sChanName, "GBK").trim();
                     ardChannel.setDeviceId(camera.getId());
-                    ardChannel.setChanNo(iChannum + 1);
-                    channelList.add(ardChannel);
+                    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);
+                        }
+                    } else {
+                        channelList.add(ardChannel);
+                    }
                 }
             }
         } catch (Exception ex) {
-            log.error("鑾峰彇鐩告満閫氶亾寮傚父:" + ex.getMessage());
+            log.error("鑾峰彇IP閫氶亾寮傚父:" + ex.getMessage());
         }
         return channelList;
     }

--
Gitblit v1.9.3