From ab7c1b76fa25da9f2df82d339e2709faec75e9ae Mon Sep 17 00:00:00 2001 From: liusuyi <1951119284@qq.com> Date: 星期五, 21 六月 2024 09:08:38 +0800 Subject: [PATCH] 修改:本地录像以用户id和相机id作为唯一标识录制 增加:定时删除非当日本地录像缓存文件 周期:10分钟 --- ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java | 2 + ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 6 ++- ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java | 41 ++++++++++++++++++++ ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java | 21 ++++++++++ ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java | 6 ++- 5 files changed, 71 insertions(+), 5 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java index eee48bb..63e8ade 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java +++ b/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 鍙傛暟閿� diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java index 52dbdf8..e703e1c 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java +++ b/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) { 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 802d315..ef02d00 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 @@ -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) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 057d1ae..1072b1c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/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) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java index caaabe1..db8797d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java +++ b/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(); + } + } } -- Gitblit v1.9.3