ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -1,5 +1,7 @@ package com.ruoyi.device.camera.service.impl; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -38,6 +40,7 @@ import com.ruoyi.utils.gis.Point; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; @@ -71,7 +74,7 @@ @PostConstruct public void loadCameras() { //清除录像缓存 //清理本地录像缓存文件 String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; FileUtils.deleteFolder(tempPath); //清空相机缓存 @@ -86,6 +89,22 @@ } /** * @Author 刘苏义 * @Description 定时清理本地录像缓存文件(超过1天) * @Date 2024/6/21 8:13 * @Param * @return */ @Scheduled(cron = "0 0/10 * * * ?") public void clearRecordTemp() { log.debug("定时清理本地录像缓存文件(超过1天)"); String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; Path folderPath = Paths.get(tempPath); FileUtils.deleteNonTodayFiles(folderPath); } /** * 设置cache key * * @param configKey 参数键 ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -557,6 +557,7 @@ @Override public AjaxResult localRecordStart(CameraCmd cmd) { try { String operator = cmd.getOperator(); String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); @@ -573,7 +574,7 @@ // 本地临时录像地址 String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; String path = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4"); String path = FileUtils.createFile(tempPath + "/" + operator + "/" + cameraId + ".mp4"); LLong lRealHandle = RealPlayModule.startRealPlay(loginId, chanNo - 1, path); if (lRealHandle.longValue() <= 0) { log.error("取流失败" + getErrorCodePrint()); @@ -597,6 +598,7 @@ @Override public AjaxResult localRecordStop(CameraCmd cmd) { try { String operator = cmd.getOperator(); String cameraId = cmd.getCameraId(); LLong lRealHandle = new LLong(cmd.getRecordId()); if (!GlobalVariable.loginMap.containsKey(cameraId)) { @@ -606,7 +608,7 @@ log.debug("本地录像停止"); // 本地临时录像地址 String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; String recordPath = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4"); String recordPath = FileUtils.createFile(tempPath + "/" + operator + "/" + cameraId + ".mp4"); byte[] imageBytes = Files.readAllBytes(Paths.get(recordPath)); return AjaxResult.success(imageBytes); } catch (Exception ex) { ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -1939,11 +1939,12 @@ @Override public AjaxResult localRecordStart(CameraCmd cmd) { try { String operator = cmd.getOperator(); String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); // 本地临时录像地址 String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; String path = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4"); String path = FileUtils.createFile(tempPath + "/" + operator + "/" + cameraId + ".mp4"); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return AjaxResult.warn("设备未登录"); } @@ -2000,6 +2001,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(); @@ -2034,7 +2036,7 @@ log.debug("本地录像停止"); // 本地临时录像地址 String tempPath = ARDConfig.getProfile() + Constants.LOCAL_RECORD_TEMP_PREFIX; String recordPath = FileUtils.createFile(tempPath + "/" + cameraId + ".mp4"); String recordPath = FileUtils.createFile(tempPath + "/" + operator + "/" + cameraId + ".mp4"); byte[] recordBytes = Files.readAllBytes(Paths.get(recordPath)); return AjaxResult.success(recordBytes); } catch (Exception ex) { ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.scheduling.annotation.EnableScheduling; /** @@ -13,6 +14,7 @@ */ @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class },scanBasePackages = {"com.ruoyi"}) @ForestScan("com.ruoyi.utils.forest") @EnableScheduling public class RuoYiApplication { public static void main(String[] args) ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
@@ -9,6 +9,13 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.time.LocalDate; import java.time.ZoneId; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -287,4 +294,38 @@ return ""; } } /** * @Author 刘苏义 * @Description 删除今天之前的文件 * @Date 2024/6/21 8:42 * @Param * @return */ public static void deleteNonTodayFiles(Path folderPath) { try { Files.walkFileTree(folderPath, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { LocalDate fileDate = attrs.creationTime().toInstant() .atZone(ZoneId.systemDefault()).toLocalDate(); LocalDate today = LocalDate.now(); if (!fileDate.equals(today)) { Files.delete(file); System.out.println("Deleted: " + file.toString()); } return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { System.err.println("Failed to access file: " + file.toString()); return FileVisitResult.CONTINUE; } }); } catch (IOException e) { e.printStackTrace(); } } }