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