From 3940ebf3e39da287974c4f49474e668d33fed2df Mon Sep 17 00:00:00 2001 From: zhangjian <zhangjianrock@163.com> Date: 星期六, 19 八月 2023 17:28:27 +0800 Subject: [PATCH] 处理连接失败异常 --- ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 128 ++++++++++++++++++++++++++++-------------- 1 files changed, 86 insertions(+), 42 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java index 82a6c73..5c35e6d 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java @@ -1,9 +1,12 @@ package com.ruoyi.device.hiksdk.service.impl; +import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.annotation.SdkOperate; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; +import com.ruoyi.device.channel.domain.ArdChannel; +import com.ruoyi.device.channel.service.IArdChannelService; import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.hiksdk.config.MinioClientSingleton; @@ -11,13 +14,16 @@ import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK; import com.ruoyi.device.hiksdk.service.IHikClientService; import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack; -import com.ruoyi.device.hiksdk.util.minio.MinioUtils; +import com.ruoyi.storage.minio.utils.MinioUtils; import com.sun.jna.Native; +import com.sun.jna.NativeLong; import com.sun.jna.Platform; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; + import java.util.Base64; import javax.annotation.Resource; import java.io.*; @@ -26,6 +32,7 @@ import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*; @@ -125,7 +132,7 @@ GlobalVariable.loginMap.remove(camera.getId()); GlobalVariable.loginMap.put(camera.getId(), lUserID); camera.setLoginId(lUserID); - camera.setChannel((int) m_strDeviceInfo.byStartChan); + camera.setStartDChan((int) m_strDeviceInfo.byStartChan); return camera; } @@ -179,7 +186,7 @@ int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (i < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); - log.info("鐧诲綍寮傚父锛�" + errorCode); + log.error("鐧诲綍寮傚父锛�" + errorCode); } } @@ -328,7 +335,7 @@ boolean bool = hCNetSDK.NET_DVR_PTZControlWithSpeed_Other(userId, channelNum, dwPTZCommand, dwStop, speed); if (!bool) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); - log.info("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + errorCode); + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + errorCode); } return bool; } @@ -356,7 +363,7 @@ boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, focusmodeCfg.size(), ibrBytesReturned); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆鑱氱劍鍊煎け璐�,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆鑱氱劍鍊煎け璐�,璇风◢鍚庨噸璇�" + code); } return bool; } @@ -389,7 +396,7 @@ return map; } else { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鑾峰彇鑱氱劍鍊煎け璐�,璇风◢鍚庨噸璇�" + code); + log.debug("鑾峰彇鑱氱劍鍊煎け璐�,璇风◢鍚庨噸璇�" + code); return new HashMap<>(); } } @@ -412,7 +419,7 @@ boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); + log.error("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); } return bool; } @@ -435,7 +442,7 @@ boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); + log.error("棰勭疆鐐硅缃け璐�,璇风◢鍚庨噸璇�" + code); } return bool; } @@ -537,7 +544,7 @@ } } else { int code = hCNetSDK.NET_DVR_GetLastError(); - System.out.println("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); } } catch (Exception ex) { log.error(ex.getMessage()); @@ -589,7 +596,7 @@ return ptzMap; } else { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); return new HashMap<>(); } @@ -627,7 +634,7 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); } return bool; } catch (Exception ex) { @@ -663,7 +670,7 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); } return bool; } catch (Exception ex) { @@ -739,7 +746,7 @@ boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZLOCKCFG, channelNum, point, netDvrPtzLockcfg.size(), ibrBytesReturned); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鑾峰彇ptz閿佸畾淇℃伅澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鑾峰彇ptz閿佸畾淇℃伅澶辫触,璇风◢鍚庨噸璇�" + code); return -1; } else { netDvrPtzLockcfg.read(); @@ -803,7 +810,7 @@ boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_PTZSCOPE, channelNum, point, m_ptzPosCurrent.size(), ibrBytesReturned); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); return new HashMap<>(); } else { m_ptzPosCurrent.read(); @@ -853,7 +860,7 @@ log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } struCameraParam.read(); - log.info("鏄惁寮�鍚�忛浘锛�" + struCameraParam.struDefogCfg.byMode); + log.debug("鏄惁寮�鍚�忛浘锛�" + struCameraParam.struDefogCfg.byMode); NET_DVR_DEFOGCFG defogcfg = new NET_DVR_DEFOGCFG(); if (enable) { @@ -867,9 +874,9 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, channelNum, point, struCameraParam.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆閫忛浘澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆閫忛浘澶辫触,璇风◢鍚庨噸璇�" + code); } - log.info("璁剧疆閫忛浘鎴愬姛"); + log.debug("璁剧疆閫忛浘鎴愬姛"); return bool; } @@ -899,7 +906,7 @@ log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } struDayNigh.read(); - log.info("鏄惁寮�鍚瑙嗭細" + struDayNigh.struDayNight.byDayNightFilterType); + log.debug("鏄惁寮�鍚瑙嗭細" + struDayNigh.struDayNight.byDayNightFilterType); NET_DVR_DAYNIGHT daynight = new NET_DVR_DAYNIGHT(); if (enable) { @@ -915,9 +922,9 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG_EX, channelNum, point, struDayNigh.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆澶滆澶辫触,璇风◢鍚庨噸璇�" + code); } - log.info("璁剧疆澶滆鎴愬姛"); + log.debug("璁剧疆澶滆鎴愬姛"); return bool; } @@ -944,10 +951,10 @@ IntByReference ibrBytesReturned = new IntByReference(0); boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); if (!b_GetCameraParam) { - System.out.println("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } struFocusMode.read(); - log.info("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); + log.debug("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); if (enable) { struFocusMode.byFocusMode = 1;//鎵嬪姩鑱氱劍 @@ -961,9 +968,9 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_FOCUSMODECFG, channelNum, point, struFocusMode.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆鑱氱劍妯″紡澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆鑱氱劍妯″紡澶辫触,璇风◢鍚庨噸璇�" + code); } - log.info("璁剧疆鑱氱劍妯″紡鎴愬姛"); + log.debug("璁剧疆鑱氱劍妯″紡鎴愬姛"); return bool; } @@ -979,10 +986,10 @@ IntByReference ibrBytesReturned = new IntByReference(0); boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(userId, NET_DVR_GET_FOCUSMODECFG, channelNum, point, struFocusMode.size(), ibrBytesReturned); if (!b_GetCameraParam) { - System.out.println("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); + log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } struFocusMode.read(); - log.info("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); + log.debug("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); return String.valueOf(struFocusMode.byFocusMode); } @@ -1013,9 +1020,9 @@ boolean bool = hCNetSDK.NET_DVR_PTZControl_Other(userId, channelNum, HEATER_PWRON, dwStop); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆浜戝彴鍔犵儹澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆浜戝彴鍔犵儹澶辫触,璇风◢鍚庨噸璇�" + code); } - log.info("璁剧疆浜戝彴鍔犵儹鎴愬姛"); + log.debug("璁剧疆浜戝彴鍔犵儹鎴愬姛"); return bool; } @@ -1045,7 +1052,7 @@ log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } struDeicing.read(); - log.info("鏄惁寮�鍚櫎鍐帮細" + struDeicing.byEnableDeicing); + log.debug("鏄惁寮�鍚櫎鍐帮細" + struDeicing.byEnableDeicing); if (enable) { struDeicing.byEnableDeicing = 1;//寮�鍚� @@ -1056,9 +1063,9 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_DEVSERVER_CFG, channelNum, point, struDeicing.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("璁剧疆闀滃ご闄ゅ啺澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("璁剧疆闀滃ご闄ゅ啺澶辫触,璇风◢鍚庨噸璇�" + code); } - log.info("璁剧疆闀滃ご闄ゅ啺鎴愬姛"); + log.debug("璁剧疆闀滃ご闄ゅ啺鎴愬姛"); return bool; } @@ -1090,13 +1097,13 @@ ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓� boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); - log.info("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); + log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); Base64.Encoder decoder = Base64.getEncoder(); - // BASE64Encoder encoder = new BASE64Encoder(); + // BASE64Encoder encoder = new BASE64Encoder(); String png_base64 = decoder.encodeToString(jpegBuffer.array());//杞崲鎴恇ase64涓� png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n - log.info("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------"); + log.debug("-----------澶勭悊瀹屾垚鎴浘鏁版嵁----------"); return png_base64; } @@ -1134,11 +1141,11 @@ //璁剧疆鍥剧墖澶у皬 ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024); // 鎶撳浘鍒板唴瀛橈紝鍗曞抚鏁版嵁鎹曡幏骞朵繚瀛樻垚JPEG瀛樻斁鍦ㄦ寚瀹氱殑鍐呭瓨绌洪棿涓� - log.info("-----------杩欓噷寮�濮嬪皝瑁� NET_DVR_CaptureJPEGPicture_NEW---------"); + log.debug("-----------杩欓噷寮�濮嬪皝瑁� NET_DVR_CaptureJPEGPicture_NEW---------"); boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a); - log.info("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); + log.debug("-----------杩欓噷寮�濮嬪浘鐗囧瓨鍏ュ唴瀛�----------" + is); if (is) { - log.info("hksdk(鎶撳浘)-缁撴灉鐘舵�佸��(0琛ㄧず鎴愬姛):" + hCNetSDK.NET_DVR_GetLastError()); + log.debug("hksdk(鎶撳浘)-缁撴灉鐘舵�佸��(0琛ㄧず鎴愬姛):" + hCNetSDK.NET_DVR_GetLastError()); byte[] array = jpegBuffer.array(); //瀛樺偍鍒癿inio String BucketName = "pic"; @@ -1152,7 +1159,7 @@ boolean b = MinioUtils.uploadObject(BucketName, ObjectName, input, input.available(), ContentType); if (b) { url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName); - log.info("涓婁紶鏂囦欢鎴愬姛!" + url); + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); } } catch (IOException ex) { log.error("涓婁紶鏂囦欢寮傚父锛�" + ex.getMessage()); @@ -1160,7 +1167,7 @@ return url; } else { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鎶撳浘澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鎶撳浘澶辫触,璇风◢鍚庨噸璇�" + code); return ""; } } @@ -1212,21 +1219,21 @@ log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); return ""; } - log.info("鍙栨祦鎴愬姛"); + log.debug("鍙栨祦鎴愬姛"); GlobalVariable.previewMap.put(cameraId, lRealHandle); } if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); return ""; } - log.info("褰曞儚寮�濮�"); + log.debug("褰曞儚寮�濮�"); } else { if (GlobalVariable.previewMap.containsKey(cameraId)) { Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); GlobalVariable.previewMap.remove(cameraId); } - log.info("褰曞儚鍋滄"); + log.debug("褰曞儚鍋滄"); } return url; } catch (Exception ex) { @@ -1386,4 +1393,41 @@ log.error("褰曞儚鍋滄寮傚父" + ex.getMessage()); } } + + //鑾峰彇IP閫氶亾 + @Override + public List<ArdChannel> getCameraChannelList(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); + } + ardChannel.setDeviceId(camera.getId()); + ardChannel.setChanNo(iChannum + 1); + channelList.add(ardChannel); + } + } + } catch (Exception ex) { + log.error("鑾峰彇鐩告満閫氶亾寮傚父:" + ex.getMessage()); + } + return channelList; + } } \ No newline at end of file -- Gitblit v1.9.3