From 7c1e2217d0e4aad7498a5c136710c33cb55d00d0 Mon Sep 17 00:00:00 2001 From: zhangnaisong <2434969829@qq.com> Date: 星期三, 17 七月 2024 15:11:00 +0800 Subject: [PATCH] 三一车辆模型bug修改提交 --- ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 185 ++++++++++++++++++++------------------------- 1 files changed, 83 insertions(+), 102 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 cd34865..92a3833 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; @@ -13,8 +15,11 @@ import com.ruoyi.device.camera.factory.CameraSDK; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; +import com.ruoyi.device.camera.service.ICameraSdkService; import com.ruoyi.device.channel.domain.ArdChannel; import com.ruoyi.device.channel.service.IArdChannelService; +import com.ruoyi.device.terrain.domain.ArdTerrainMark; +import com.ruoyi.device.terrain.service.IArdTerrainMarkService; import com.ruoyi.media.domain.Vtdu; import com.ruoyi.media.service.IVtduService; import com.ruoyi.utils.gis.GisUtil; @@ -41,6 +46,7 @@ import java.text.DecimalFormat; import java.util.*; import java.util.concurrent.PriorityBlockingQueue; +import java.util.stream.Collectors; import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.*; import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.NET_DVR_GET_GISINFO; @@ -62,7 +68,8 @@ private IVtduService vtduService; @Resource private QueueHandler queueHandler; - + @Resource + ICameraSdkService cameraSdkService; public Object _lock = new Object(); public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟 @@ -118,7 +125,7 @@ if (lUserID < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); camera.setChanNum(0); - camera.setLoginId(-1); + camera.setLoginId(-1l); camera.setState("0"); //鍒犻櫎绠$悊閫氶亾 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); @@ -137,17 +144,9 @@ log.debug("Set fExceptionCallBack function successfully!"); } } - - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); GlobalVariable.loginMap.put(camera.getId(), lUserID); GlobalVariable.loginCameraMap.put(lUserID, camera); - - camera.setLoginId(lUserID); + camera.setLoginId((long)lUserID); camera.setState("1"); int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum; int startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan + 1; @@ -156,20 +155,20 @@ startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan; } camera.setChanNum(chanNum); - camera.setStartDChan(startDchan); + camera.setStartChan(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.deleteArdChannelByDeviceId(camera.getId()); + cameraChannelList.stream().forEach(channel -> { ardChannelService.insertArdChannel(channel); - } - ardCamerasService.updateArdCameras(camera); - //娣诲姞鍒版祦濯掍綋 - addVtdu(camera); + }); + camera.setChannelList(cameraChannelList); + //camera.setChanNum(cameraChannelList.size()); + //閫氶亾鎵归噺娣诲姞鍒版祦濯掍綋 + batchAddVtdu(camera); } + ardCamerasService.updateArdCameras(camera); //鍒涘缓寮曞闃熷垪 createGuideQueue(camera); return AjaxResult.success("璁惧鐧诲綍鎴愬姛"); @@ -232,7 +231,7 @@ if (lUserID < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); camera.setChanNum(0); - camera.setLoginId(-1); + camera.setLoginId(-1l); camera.setState("0"); //鍒犻櫎绠$悊閫氶亾 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); @@ -252,16 +251,10 @@ } } } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } - //鍒犻櫎绠$悊閫氶亾 - ardChannelService.deleteArdChannelByDeviceId(camera.getId()); GlobalVariable.loginMap.put(camera.getId(), lUserID); GlobalVariable.loginCameraMap.put(lUserID, camera); - - camera.setLoginId(lUserID); + camera.setLoginId((long)lUserID); camera.setState("1"); int chanNum = m_strDeviceInfo.struDeviceV30.byChanNum; int startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan + 1; @@ -270,22 +263,20 @@ startDchan = m_strDeviceInfo.struDeviceV30.byStartDChan; } camera.setChanNum(chanNum); - camera.setStartDChan(startDchan); - + camera.setStartChan(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.deleteArdChannelByDeviceId(camera.getId()); + cameraChannelList.stream().forEach(channel -> { ardChannelService.insertArdChannel(channel); - } - ardCamerasService.updateArdCameras(camera); - //娣诲姞鍒版祦濯掍綋 - addVtdu(camera); + }); + camera.setChannelList(cameraChannelList); + //camera.setChanNum(cameraChannelList.size()); + //閫氶亾鎵归噺娣诲姞鍒版祦濯掍綋 + batchAddVtdu(camera); } - + ardCamerasService.updateArdCameras(camera); //鍒涘缓寮曞闃熷垪 createGuideQueue(camera); return AjaxResult.success("璁惧鐧诲綍鎴愬姛"); @@ -297,45 +288,30 @@ //鍒涘缓寮曞闃熷垪 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()); + } } } - //娣诲姞鍒版祦濯掍綋 - private void addVtdu(ArdCameras camera) { + //閫氶亾鎵归噺娣诲姞鍒版祦濯掍綋 + public void batchAddVtdu(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); - } + camera.getChannelList().stream().forEach(channel -> { + vtduService.addChanToVtdu(camera, channel); + }); } catch (Exception ex) { log.error("閫氶亾娣诲姞鍒版祦濯掍綋寮傚父锛�" + ex.getMessage()); } } + + /** * @鎻忚堪 娉ㄩ攢鐧诲綍 @@ -1116,7 +1092,10 @@ double[] targetPositions = cmd.getTargetPosition(); double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); String p = String.valueOf((int) (cameraPTZ[0] * 10)); - String t = String.valueOf((int) (cameraPTZ[1] * 10)); + //淇淇话 + double correctPitch = cameraSdkService.correctPitch(cmd); + double newt = cameraPTZ[1] + correctPitch; + String t = String.valueOf((int) (newt * 10)); String z = String.valueOf((int) (cameraPTZ[2] * 10)); m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16)); m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16)); @@ -1129,7 +1108,7 @@ log.error("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); return AjaxResult.warn("璁剧疆ptz澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } - return AjaxResult.success("寮曞鍧愭爣鎴愬姛"); + return AjaxResult.success("寮曞鍧愭爣鎴愬姛", correctPitch); } catch (Exception ex) { log.error("寮曞鍧愭爣寮傚父:" + ex.getMessage()); return AjaxResult.error("寮曞鍧愭爣寮傚父:" + ex.getMessage()); @@ -1259,7 +1238,7 @@ @Override public AjaxResult controlDefogcfg(CameraCmd cmd) { String cameraId = cmd.getCameraId(); - Integer chanNo=cmd.getChanNo(); + Integer chanNo = cmd.getChanNo(); boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return AjaxResult.warn("璁惧鏈櫥褰�"); @@ -1621,7 +1600,9 @@ try { String cameraId = cmd.getCameraId(); Integer chanNo = 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"); boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; @@ -1693,7 +1674,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; } @@ -1751,7 +1734,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 ""; } @@ -1845,7 +1830,7 @@ } //鑾峰彇IP閫氶亾 - public List<ArdChannel> getIPChannelInfo(ArdCameras camera) { + public List<ArdChannel> getChannels(ArdCameras camera) { //鑾峰彇閫氶亾 List<ArdChannel> channelList = new ArrayList<>(); try { @@ -1854,20 +1839,19 @@ 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); + boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId().intValue(), 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 chanNo = iChannum + camera.getStartDChan(); + ArdChannel channel = new ArdChannel(); + int chanNo = iChannum + camera.getStartChan(); 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(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); + boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId().intValue(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), pStrPicCfg, strPicCfg.size(), pInt); if (!b_GetPicCfg) { // log.error("鑾峰彇鍥惧儚鍙傛暟澶辫触锛岄敊璇爜锛�" + hCNetSDK.NET_DVR_GetLastError()); } @@ -1876,21 +1860,19 @@ 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(); channelName = channelName.equals("") ? "閫氶亾" + chanNo : channelName; - ardChannel.setDeviceId(camera.getId()); - ardChannel.setName(channelName); - ardChannel.setChanNo(chanNo); + 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) { - //log.debug("IP閫氶亾" + channum + "鍦ㄧ嚎"); - channelList.add(ardChannel); + //NVR杩囨护绂荤嚎閫氶亾 + if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable != 1) { + continue; } - } else { - channelList.add(ardChannel); } + channelList.add(channel); } } } catch (Exception ex) { @@ -1946,9 +1928,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("璁惧鏈櫥褰�"); } @@ -2005,6 +1990,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(); @@ -2035,17 +2021,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