From 12493116268785c43f534b3ab9bd45014b1229bb Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期五, 28 十一月 2025 16:08:29 +0800
Subject: [PATCH] #

---
 /dev/null                                                            |   24 ------------
 src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java            |    4 +-
 src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java |    4 +-
 src/main/java/com/zy/asrs/service/DeviceDataLogService.java          |    2 
 src/main/java/com/zy/core/task/DeviceLogScheduler.java               |   41 ++++++++++++++++++++
 src/main/resources/application.yml                                   |    5 ++
 6 files changed, 50 insertions(+), 30 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java b/src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java
index dbcb282..4ec399f 100644
--- a/src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java
@@ -12,8 +12,8 @@
 @Repository
 public interface DeviceDataLogMapper extends BaseMapper<DeviceDataLog> {
 
-    @Delete("delete from wcs_device_data_log where create_time < FROM_UNIXTIME(UNIX_TIMESTAMP() - (24 * 60 * 60)) limit 50000")
-    int clearLog();
+    @Delete("delete from wcs_device_data_log where create_time < FROM_UNIXTIME(UNIX_TIMESTAMP() - (#{days} * 24 * 60 * 60)) limit 50000")
+    int clearLog(@Param("days") int days);
 
     int insertBatch(@Param("list") List<DeviceDataLog> list);
 
diff --git a/src/main/java/com/zy/asrs/service/DeviceDataLogService.java b/src/main/java/com/zy/asrs/service/DeviceDataLogService.java
index 7275436..9295bd8 100644
--- a/src/main/java/com/zy/asrs/service/DeviceDataLogService.java
+++ b/src/main/java/com/zy/asrs/service/DeviceDataLogService.java
@@ -5,7 +5,7 @@
 
 public interface DeviceDataLogService extends IService<DeviceDataLog> {
 
-    int clearLog();//娓呯悊瓒呰繃24灏忔椂鏃ュ織鏁版嵁
+    int clearLog(int expireDays);
 
     boolean saveBatch(java.util.List<DeviceDataLog> list);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java
index cf4a92f..5b5460e 100644
--- a/src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java
@@ -10,8 +10,8 @@
 public class DeviceDataLogServiceImpl extends ServiceImpl<DeviceDataLogMapper, DeviceDataLog> implements DeviceDataLogService {
 
     @Override
-    public int clearLog() {
-        return this.baseMapper.clearLog();
+    public int clearLog(int expireDays) {
+        return this.baseMapper.clearLog(expireDays);
     }
 
     @Override
diff --git a/src/main/java/com/zy/asrs/task/ClearDeviceDataLogScheduler.java b/src/main/java/com/zy/asrs/task/ClearDeviceDataLogScheduler.java
deleted file mode 100644
index 1cc2cac..0000000
--- a/src/main/java/com/zy/asrs/task/ClearDeviceDataLogScheduler.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.zy.asrs.task;
-
-import com.zy.asrs.service.DeviceDataLogService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-@Component
-@Slf4j
-public class ClearDeviceDataLogScheduler {
-
-    @Autowired
-    private DeviceDataLogService deviceDataLogService;
-
-    /**
-     * 姣忓垎閽熸竻鐞�24灏忔椂涔嬪墠鐨勬棩蹇�
-     */
-    @Scheduled(cron = "1 * * * * ? ")
-    public void clear() {
-        deviceDataLogService.clearLog();
-    }
-
-}
diff --git a/src/main/java/com/zy/core/task/DeviceLogScheduler.java b/src/main/java/com/zy/core/task/DeviceLogScheduler.java
index a18a6bf..0f0d4f7 100644
--- a/src/main/java/com/zy/core/task/DeviceLogScheduler.java
+++ b/src/main/java/com/zy/core/task/DeviceLogScheduler.java
@@ -36,10 +36,23 @@
     private String storageType;
     @Value("${deviceLogStorage.loggingPath}")
     private String loggingPath;
+    @Value("${deviceLogStorage.expireDays}")
+    private Integer expireDays;
     @Autowired
     private DeviceDataLogService deviceDataLogService;
     @Autowired
     private RedisUtil redisUtil;
+
+    @Scheduled(cron = "0/3 * * * * ? ")
+    public void delDeviceLog() {
+        if ("mysql".equals(storageType)) {
+            deviceDataLogService.clearLog(expireDays == null ? 1 : expireDays);
+        }else if ("file".equals(storageType)) {
+            clearFileLog(expireDays == null ? 1 : expireDays);
+        }else {
+            log.error("鏈畾涔夌殑瀛樺偍绫诲瀷锛歿}", storageType);
+        }
+    }
 
     @Scheduled(cron = "0/3 * * * * ? ")
     public void execute() {
@@ -151,4 +164,32 @@
         return candidate;
     }
 
+    private void clearFileLog(int days) {
+        try {
+            Path baseDir = Paths.get(loggingPath);
+            if (!Files.exists(baseDir)) {
+                return;
+            }
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+            long cutoff = System.currentTimeMillis() - (long) days * 24 * 60 * 60 * 1000;
+            List<Path> dirs = Files.list(baseDir).filter(Files::isDirectory).collect(Collectors.toList());
+            for (Path dir : dirs) {
+                String name = dir.getFileName().toString();
+                if (name.length() == 8 && name.chars().allMatch(Character::isDigit)) {
+                    Date d = sdf.parse(name);
+                    if (d.getTime() < cutoff) {
+                        List<Path> all = Files.walk(dir).sorted(Comparator.reverseOrder()).collect(Collectors.toList());
+                        for (Path p : all) {
+                            try {
+                                Files.deleteIfExists(p);
+                            } catch (Exception ignored) {}
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("璁惧鏃ュ織鏂囦欢娓呯悊澶辫触", e);
+        }
+    }
+
 }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index d01825c..e5ab53d 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -50,7 +50,10 @@
 
 mainProcessPlugin: FakeProcess
 
-# 璁惧鏃ュ織瀛樺偍鏂瑰紡 mysql file
 deviceLogStorage:
+  # 璁惧鏃ュ織瀛樺偍鏂瑰紡 mysql file
   type: file
+  # file绫诲瀷瀛樺偍鍦板潃
   loggingPath: ./stock/out/@pom.build.finalName@/deviceLogs
+  # 鏃ュ織杩囨湡鏃堕棿 鍗曚綅澶�
+  expireDays: 7

--
Gitblit v1.9.1