From 2118a0969c631a5aaaec5e97693cfcf763b401f5 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期二, 22 八月 2023 14:19:45 +0800 Subject: [PATCH] 获取封控圈内所有在线app用户改app单兵端 --- ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 140 ++++++++++++++++++++++++++++++---------------- 1 files changed, 92 insertions(+), 48 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 ba67776..1471f3a 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,10 +1,13 @@ 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.common.utils.uuid.IdUtils; import com.ruoyi.device.camera.domain.CameraCmd; -import com.ruoyi.device.camera.mapper.ArdCamerasMapper; 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; @@ -12,14 +15,17 @@ 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 sun.misc.BASE64Encoder; + +import java.util.Base64; import javax.annotation.Resource; import java.io.*; import java.math.BigDecimal; @@ -27,6 +33,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.*; @@ -102,6 +109,7 @@ } //鎵撳嵃娴峰悍sdk鏃ュ織 if (Platform.isWindows()) { + String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); } else { @@ -125,7 +133,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 +187,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 +336,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 +364,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 +397,7 @@ return map; } else { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鑾峰彇鑱氱劍鍊煎け璐�,璇风◢鍚庨噸璇�" + code); + log.debug("鑾峰彇鑱氱劍鍊煎け璐�,璇风◢鍚庨噸璇�" + code); return new HashMap<>(); } } @@ -412,7 +420,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 +443,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 +545,7 @@ } } else { int code = hCNetSDK.NET_DVR_GetLastError(); - System.out.println("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); } } catch (Exception ex) { log.error(ex.getMessage()); @@ -589,7 +597,7 @@ return ptzMap; } else { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); return new HashMap<>(); } @@ -627,7 +635,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 +671,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 +747,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 +811,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 +861,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 +875,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 +907,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 +923,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 +952,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 +969,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 +987,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 +1021,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 +1053,7 @@ log.error("鑾峰彇鍓嶇鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } struDeicing.read(); - log.info("鏄惁寮�鍚櫎鍐帮細" + struDeicing.byEnableDeicing); + log.debug("鏄惁寮�鍚櫎鍐帮細" + struDeicing.byEnableDeicing); if (enable) { struDeicing.byEnableDeicing = 1;//寮�鍚� @@ -1056,9 +1064,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,12 +1098,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); - BASE64Encoder encoder = new BASE64Encoder(); - String png_base64 = encoder.encodeBuffer(jpegBuffer);//杞崲鎴恇ase64涓� + Base64.Encoder decoder = Base64.getEncoder(); + // 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; } @@ -1133,17 +1142,15 @@ //璁剧疆鍥剧墖澶у皬 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"; - String uuid = UUID.randomUUID().toString().replace("-", ""); - String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); - String ObjectName = time + "/" + uuid + ".jpeg"; + String ObjectName = "capture/" + IdUtils.simpleUUID() + ".jpeg"; String ContentType = "image/JPEG"; InputStream input = new ByteArrayInputStream(array); String url = ""; @@ -1151,7 +1158,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()); @@ -1159,7 +1166,7 @@ return url; } else { int code = hCNetSDK.NET_DVR_GetLastError(); - log.info("鎶撳浘澶辫触,璇风◢鍚庨噸璇�" + code); + log.error("鎶撳浘澶辫触,璇风◢鍚庨噸璇�" + code); return ""; } } @@ -1211,21 +1218,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) { @@ -1385,4 +1392,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