From b8efcd7ee94cc4ab6088e4e2d8c2e09f3cd4a1cc Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期六, 01 七月 2023 11:58:20 +0800 Subject: [PATCH] 雷达历史查询接口增加录像1录像2 --- ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 178 +++++++++++++++++++++++++++------------------------------- 1 files changed, 83 insertions(+), 95 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 8034b22..3a4971f 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,40 +1,35 @@ package com.ruoyi.device.hiksdk.service.impl; import com.ruoyi.common.annotation.SdkOperate; -import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.common.core.domain.model.LoginUser; -import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; -import com.ruoyi.constant.sdkPriority; +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.hiksdk.common.GlobalVariable; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.hiksdk.config.MinioClientSingleton; -import com.ruoyi.device.hiksdk.domain.recordInfo; import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil; 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.system.mapper.SysUserMapper; import com.sun.jna.Native; 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 javax.annotation.Resource; import java.io.*; import java.math.BigDecimal; +import java.math.RoundingMode; import java.nio.ByteBuffer; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; + import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*; /** @@ -50,9 +45,6 @@ @Resource ArdCamerasMapper ardCamerasMapper; - - @Resource - SysUserMapper sysUserMapper; private static HCNetSDK hCNetSDK; @@ -132,11 +124,8 @@ hCNetSDK.NET_DVR_Cleanup(); camera.setLoginId(-1); } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } + GlobalVariable.loginMap.remove(camera.getId()); GlobalVariable.loginMap.put(camera.getId(), lUserID); - camera.setLoginId(lUserID); camera.setChannel((int) m_strDeviceInfo.byStartChan); return camera; @@ -210,6 +199,7 @@ log.debug("鍔犺浇lib瀹屾垚锛�"); List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasListNoDataScope(new ArdCameras()); for (ArdCameras camera : ardCameras) { + Thread.sleep(500); login(camera); } } catch (Exception ex) { @@ -241,7 +231,7 @@ /** * 鏄惁鍦ㄧ嚎 * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override public boolean isOnLine(CameraCmd cmd) { @@ -250,8 +240,7 @@ return false; } Integer userId = GlobalVariable.loginMap.get(cameraId); - boolean isOnLine = hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0); - return isOnLine; + return hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0); } /** @@ -276,13 +265,13 @@ return false; } Integer userId = GlobalVariable.loginMap.get(cameraId); - Integer dwStop; + int dwStop; if (enable) { dwStop = 0;//寮�鍚� } else { dwStop = 1;//鍏抽棴 } - Integer dwPTZCommand = -1; + int dwPTZCommand = -1; switch (code) { /*鏂瑰悜*/ case 1: @@ -349,7 +338,7 @@ /** * 璁剧疆鑱氱劍鍊� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override @SdkOperate @@ -377,7 +366,7 @@ /** * 鑾峰彇鑱氱劍鍊� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override public Map<String, Object> getFocusPos(CameraCmd cmd) { @@ -410,7 +399,7 @@ /** * 璁剧疆棰勭疆鐐� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override @SdkOperate @@ -433,7 +422,7 @@ /** * 杞埌棰勭疆鐐� * - * @param cmd + * @param cmd 鐩告満鍛戒护 */ @Override @SdkOperate @@ -480,8 +469,8 @@ if (bool) { resolution.read(); //瑙嗛杈撳嚭鍙e垎杈ㄧ巼锛�0- 1024x768锛�1- 1280x720锛�2-1280x1024锛�3- 1680x1050锛�4- 1920x1080锛�5- 3840*2160 - byte byStreamType = resolution.struNormHighRecordPara.byStreamType; - int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate; +// byte byStreamType = resolution.struNormHighRecordPara.byStreamType; +// int dwVideoBitrate = resolution.struNormHighRecordPara.dwVideoBitrate; int byResolution = resolution.struNormHighRecordPara.byResolution; switch (byResolution) { case 0: @@ -559,7 +548,6 @@ } /** - * @return * @鎻忚堪 鑾峰彇ptz淇℃伅 * @鍙傛暟 [userId, channelNum] * @杩斿洖鍊� boolean @@ -583,7 +571,7 @@ boolean bool = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_PTZPOS, channelNum, pioint, m_ptzPosCurrent.size(), ibrBytesReturned); if (bool) { m_ptzPosCurrent.read(); - DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 + // DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟 //16杩涘埗杞琁nteger鍚庨櫎10锛屼繚鐣欏皬鏁扮偣1浣� //瀹為檯鏄剧ず鐨凱TZ鍊兼槸鑾峰彇鍒扮殑鍗佸叚杩涘埗鍊肩殑鍗佸垎涔嬩竴锛� //濡傝幏鍙栫殑姘村钩鍙傛暟P鐨勫�兼槸0x1750锛屽疄闄呮樉绀虹殑P鍊间负175搴︼紱 @@ -595,7 +583,7 @@ double p = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); double t = c.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); - log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z); + //log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z); Map<String, Object> ptzMap = new HashMap<>(); ptzMap.put("p", p); ptzMap.put("t", t); @@ -604,7 +592,7 @@ } else { int code = hCNetSDK.NET_DVR_GetLastError(); log.info("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + code); - return null; + return new HashMap<>(); } } @@ -652,7 +640,7 @@ @Override @SdkOperate - public boolean setTargetPosition(CameraCmd cmd) { + public boolean guideTargetPosition(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { @@ -695,64 +683,36 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 0-瑙i攣 1-閿佸畾 */ @Override + @SdkOperate public boolean controlLock(CameraCmd cmd) { String cameraId = cmd.getCameraId();//鐢宠閿佺殑鐩告満 ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId); - if (StringUtils.isNull(ardCameras)) { - return false;//鎵句笉鍒扮浉鏈烘嫆缁濇搷鎺� - } - Integer expired = cmd.getExpired();//鐢宠鎺у埗鏃堕暱 + Date now = new Date(); + now.setTime(now.getTime() + cmd.getExpired() * 1000); + ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿 + ardCamerasMapper.updateArdCameras(ardCameras); + return true; + } + + /** + * @鎻忚堪 鎿嶆帶瑙i攣 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/6/30 15:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public boolean controlUnLock(CameraCmd cmd) { + String cameraId = cmd.getCameraId();//鐢宠瑙i攣鐨勭浉鏈� String operator = cmd.getOperator();//鐢宠鑰� - String currentOperator = ardCameras.getOperatorId();//鐩告満褰撳墠鎺у埗鑰� - Date currentExpired = ardCameras.getOperatorExpired();//鐩告満褰撳墠杩囨湡鏃堕棿 - if (currentExpired == null) { - //璁剧疆褰撳墠鎿嶄綔鐢ㄦ埛ID - ardCameras.setOperatorId(operator); - //璁剧疆褰撳墠杩囨湡鏃堕棿 - Date now = new Date(); - now.setTime(now.getTime() + expired * 1000 * 60); - ardCameras.setOperatorExpired(now); - ardCamerasMapper.updateArdCameras(ardCameras); - } else { - //濡傛灉杩囨湡鏃堕棿鏈夊�� - //濡傛灉鏄湰浜虹洿鎺ヤ慨鏀� - if (currentOperator.equals(operator)) { - //璁剧疆褰撳墠杩囨湡鏃堕棿 - Date now = new Date(); - now.setTime(now.getTime() + expired * 1000 * 60); - ardCameras.setOperatorExpired(now); - ardCamerasMapper.updateArdCameras(ardCameras); - } else { - //濡傛灉闈炴湰浜烘瘮杈冧紭鍏堢骇 - Integer currentLevel = 0;//褰撳墠鎿嶄綔鑰呯殑浼樺厛绾� - if (sdkPriority.priorityMap.containsKey(currentOperator)) { - /*褰撳墠鎺у埗鑰呬负绯荤粺鎶ヨ鐢ㄦ埛*/ - currentLevel = (Integer) sdkPriority.priorityMap.get(currentOperator); - } else { - /*褰撳墠鎺у埗鑰呬负鏅�氱敤鎴�*/ - SysUser sysUser = sysUserMapper.selectUserById(currentOperator); - currentLevel = sysUser.getCameraPriority(); - } - Integer operatorLevel = 0;//鑾峰彇鐢宠鑰呯殑浼樺厛绾� - if (sdkPriority.priorityMap.containsKey(operator)) { - /*鍖呭惈璇存槑褰撳墠鐢宠鎺у埗鑰呬负绯荤粺鎶ヨ鐢ㄦ埛*/ - operatorLevel = (Integer) sdkPriority.priorityMap.get(operator); - } else { - /*鍚﹀垯鐢宠鎺у埗鑰呬负褰撳墠鐧诲綍鐢ㄦ埛*/ - LoginUser loginUser = SecurityUtils.getLoginUser(); - SysUser user = loginUser.getUser();//鑾峰彇鐧诲綍鐢ㄦ埛鐨勪俊鎭� - operatorLevel = user.getCameraPriority(); - } - //鍒ゆ柇浼樺厛绾� - if (operatorLevel > currentLevel) { - Date now = new Date(); - now.setTime(now.getTime() + expired * 60 * 1000); - ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿 - ardCameras.setOperatorId(operator);//璁剧疆褰撳墠鐢ㄦ埛 - ardCamerasMapper.updateArdCameras(ardCameras); - } else { - return false;//浼樺厛绾т綆鏃犳硶涓婇攣 - } + ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId); + if (ardCameras.getOperatorId().equals(operator)) { + //濡傛灉瑙i攣鐩告満鐨勫綋鍓嶇敤鎴锋槸鐢宠鑰咃紝鍒欐竻绌鸿鐩告満鐨勮繃鏈熸椂闂� + ardCameras.setOperatorExpired(null); + int i = ardCamerasMapper.updateArdCameras(ardCameras); + if (i > 0) { + log.debug(cameraId + "--瑙i攣鎴愬姛"); } } return true; @@ -1011,6 +971,25 @@ } log.info("璁剧疆鑱氱劍妯″紡鎴愬姛"); return bool; + } + + public String getFocusMode(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChannelNum(); + if (!GlobalVariable.loginMap.containsKey(cameraId)) { + return ""; + } + Integer userId = GlobalVariable.loginMap.get(cameraId); + NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG(); + Pointer point = struFocusMode.getPointer(); + 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()); + } + struFocusMode.read(); + log.info("褰撳墠鑱氱劍妯″紡锛�" + struFocusMode.byFocusMode); + return String.valueOf(struFocusMode.byFocusMode); } /** @@ -1304,14 +1283,14 @@ } @Override - public void recordToMinio(CameraCmd cmd) { + public String recordToMinio(CameraCmd cmd) { try { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { - return; + return ""; } Integer userId = GlobalVariable.loginMap.get(cameraId); //寮哄埗I甯х粨鏋勪綋瀵硅薄 @@ -1339,39 +1318,48 @@ Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); GlobalVariable.previewMap.remove(cameraId); - log.info("褰曞儚鍋滄"); + log.debug("鍋滄褰撳墠褰曞儚"); } int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); if (lRealHandle == -1) { log.error("鍙栨祦澶辫触" + hCNetSDK.NET_DVR_GetLastError()); - return; + return ""; } - log.info("鍙栨祦鎴愬姛"); + log.debug("鍙栨祦鎴愬姛"); + GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName()); GlobalVariable.previewMap.put(cameraId, lRealHandle); if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { log.error("淇濆瓨瑙嗛鏂囦欢鍒颁复鏃舵枃浠跺す澶辫触 閿欒鐮佷负: " + hCNetSDK.NET_DVR_GetLastError()); - return; + 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("褰曞儚鍋滄"); //瀛樺叆minio String BucketName = cmd.getRecordBucketName(); String ObjectName = cmd.getRecordObjectName(); String ContentType = "video/MP4"; FileInputStream stream = new FileInputStream(path); - boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType); + String simpleUUID = IdUtils.simpleUUID(); + String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); + String recordName = cameraId + "/" + time + "/" + ObjectName + "_" + simpleUUID + ".mp4"; + boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType); if (b) { - log.info("涓婁紶鏂囦欢鎴愬姛!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName); + String url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName; + log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); + return url; } } + return ""; } catch (Exception ex) { log.error("褰曞儚寮傚父" + ex.getMessage()); + return ""; } } + } \ No newline at end of file -- Gitblit v1.9.3