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