ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
@@ -407,7 +407,7 @@ @ApiOperation("本地录像停止") @PostMapping("/localRecordStop") @Log(title = "本地录像停止", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.lRealHandle"}) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.recordId"}) public @ResponseBody void localRecordStop(@RequestBody CameraCmd cmd, HttpServletResponse response) throws IOException { cmd.setOperator(SecurityUtils.getUserId()); ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java
@@ -113,6 +113,7 @@ //本地录像开始 AjaxResult localRecordStart(CameraCmd cmd); //本地录像停止 AjaxResult localRecordStop(CameraCmd cmd); } ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -6,8 +6,10 @@ import com.ruoyi.alarm.global.domain.GuidePoint; import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell; import com.ruoyi.common.config.ARDConfig; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.CameraConstants; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.redis.RedisCache; @@ -16,6 +18,7 @@ import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanValidators; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.device.camera.domain.CameraCmd; @@ -68,6 +71,9 @@ @PostConstruct public void loadCameras() { //清除录像缓存 String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; FileUtils.deleteFolder(tempPath); //清空相机缓存 Collection<String> cacheKeys = redisCache.keys(getCacheKey("*")); redisCache.deleteObject(cacheKeys); ard-work/src/main/java/com/ruoyi/utils/excel/EasyExcelUtil.java
@@ -1,6 +1,8 @@ package com.ruoyi.utils.excel; import com.alibaba.excel.EasyExcel; import com.ruoyi.common.config.ARDConfig; import com.ruoyi.common.constant.Constants; import java.io.File; import java.util.ArrayList; @@ -40,7 +42,9 @@ if (!parentDir.exists()) { parentDir.mkdirs(); // 创建文件所在的目录,包括父目录 } File tempFile = new File("d:/temp.xlsx"); // 本地临时录像地址 String tempExcel = ARDConfig.getProfile() + Constants.LOCAL_EXCEL_TEMP_PREFIX + "/temp.xlsx"; File tempFile = new File(tempExcel); List<ExcelData> existingData = new ArrayList<>(); if (file.exists()) { // 读取已有数据 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -4,7 +4,10 @@ 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.StringUtils; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.file.MimeTypeUtils; import com.ruoyi.common.utils.spring.SpringUtils; @@ -527,7 +530,9 @@ return AjaxResult.warn("设备未登录"); } LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); String imagePath = FileUtils.createFile("D:/LocalCaptureTemp/" + cameraId + ".jpeg"); // 本地临时录像地址 String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; String imagePath = FileUtils.createFile(tempPath + "/" + cameraId + ".jpeg"); fCaptureReceiveCB1 m_CaptureReceiveCB = new fCaptureReceiveCB1(imagePath); CapturePictureModule.setSnapRevCallBack(m_CaptureReceiveCB); boolean b = CapturePictureModule.remoteCapturePicture(loginId, chanNo - 1); @@ -565,7 +570,10 @@ // GlobalVariable.previewMap.remove(cameraId); // log.debug("停止当前录像"); //} String path = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4"); // 本地临时录像地址 String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; String path = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4"); LLong lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path); if (lRealHandle.longValue() <= 0) { log.error("取流失败" + getErrorCodePrint()); @@ -594,28 +602,13 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return AjaxResult.warn("设备未登录"); } RealPlayModule.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 + "/" + cameraId + ".mp4"); byte[] imageBytes = Files.readAllBytes(Paths.get(recordPath)); // OutputStream outputStream = response.getOutputStream(); // outputStream.write(imageBytes); return AjaxResult.success(imageBytes); //if (GlobalVariable.previewMap.containsKey(cameraId)) { // lRealHandle = new LLong(GlobalVariable.previewMap.get(cameraId)); // RealPlayModule.stopRealPlay(lRealHandle); // GlobalVariable.previewMap.remove(cameraId); // log.debug("本地录像停止"); // String recordPath = FileUtils.createFile("D:/LocalRecordTemp/" + cameraId + ".mp4"); // byte[] imageBytes = Files.readAllBytes(Paths.get(recordPath)); // // OutputStream outputStream = response.getOutputStream(); // // outputStream.write(imageBytes); // return AjaxResult.success(imageBytes); //} //else { // return AjaxResult.error("设备未开始录像"); //} } catch (Exception ex) { log.error("本地录像停止异常" + ex.getMessage()); return AjaxResult.error("本地录像停止异常" + ex.getMessage()); @@ -636,7 +629,9 @@ String url = ""; 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 ""; @@ -675,7 +670,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"); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } @@ -711,7 +708,9 @@ String url = ""; try { String cameraId = cmd.getCameraId(); 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 ""; } 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; @@ -1605,7 +1607,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 ""; @@ -1677,7 +1681,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; } @@ -1735,7 +1741,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 ""; } @@ -1933,7 +1941,9 @@ try { 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 + "/" + cameraId + ".mp4"); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return AjaxResult.warn("设备未登录"); } @@ -2020,17 +2030,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 + "/" + 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()); ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java
@@ -209,4 +209,6 @@ } } } } ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
@@ -113,7 +113,14 @@ * 资源映射路径 前缀 */ public static final String RESOURCE_PREFIX = "/profile"; /** * 本地临时录像路径 前缀 */ public static final String LOCAL_RECORD_TEMP_PREFIX = "/LocalRecordTemp"; /** * 本地临时EXCEL路径 前缀 */ public static final String LOCAL_EXCEL_TEMP_PREFIX = "/LocalExcelTemp"; /** * RMI 远程方法调用 */ ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
@@ -105,7 +105,24 @@ } return flag; } /** * 删除文件夹 * * @param filePath 文件夹 * @return */ public static void deleteFolder(String filePath) { File folder=new File(filePath); if (folder.isDirectory()) { File[] files = folder.listFiles(); if (files != null) { for (File file : files) { deleteFolder(file.getAbsolutePath()); } } } folder.delete(); } /** * 文件名称验证 *