liusuyi
2024-06-06 f37c91a84345f925e41cd26bf5d22ed1a2594bdf
防止录像文件持续生成,增加启动项目清空本地录像临时文件
已修改9个文件
119 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/excel/EasyExcelUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
    }
    /**
     * 文件名称验证
     *