diff --git a/klp-wms/src/main/java/com/klp/controller/WmsFileManagementController.java b/klp-wms/src/main/java/com/klp/controller/WmsFileManagementController.java index d3dbb5d7..09dd12b5 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsFileManagementController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsFileManagementController.java @@ -1,7 +1,8 @@ package com.klp.controller; -import com.klp.domain.vo.ApiResponseVo; +import com.klp.domain.FileDetailInfo; import com.klp.domain.FileInfo; +import com.klp.domain.vo.ApiResponseVo; import org.springframework.web.bind.annotation.*; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Controller; @@ -13,9 +14,10 @@ import java.nio.file.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.stream.Collectors; /** - * 文件管理控制器 + * WMS文件管理控制器 * 提供文件读取、删除和定时删除功能 */ @Controller @@ -26,8 +28,8 @@ public class WmsFileManagementController { private static final String DIRECTORY_PATH = "testDirectory"; /** - * 获取目录下所有文件信息 - * GET /api/file/list + * 获取目录下所有文件基本信息(不包含文件内容) + * GET /wms/file/list */ @GetMapping("/list") @ResponseBody @@ -40,12 +42,12 @@ public class WmsFileManagementController { return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + DIRECTORY_PATH, null)); } - // 获取所有文件 + // 获取所有文件基本信息(不读取文件内容) List fileList = new ArrayList<>(); try (DirectoryStream stream = Files.newDirectoryStream(directory)) { for (Path file : stream) { if (Files.isRegularFile(file)) { - FileInfo fileInfo = readFileInfo(file); + FileInfo fileInfo = readFileBasicInfo(file); fileList.add(fileInfo); } } @@ -63,9 +65,44 @@ public class WmsFileManagementController { } } + /** + * 获取单个文件的详细信息(包含文件内容) + * GET /wms/file/content/{fileName} + */ + @GetMapping("/content/{fileName}") + @ResponseBody + public ResponseEntity> getFileContent(@PathVariable String fileName) { + try { + Path filePath = Paths.get(DIRECTORY_PATH, fileName); + + // 检查文件是否存在 + if (!Files.exists(filePath)) { + return ResponseEntity.ok(new ApiResponseVo<>(false, "文件不存在: " + fileName, null)); + } + + // 检查是否为普通文件 + if (!Files.isRegularFile(filePath)) { + return ResponseEntity.ok(new ApiResponseVo<>(false, "不是普通文件: " + fileName, null)); + } + + // 读取文件详细信息(包含内容) + FileDetailInfo fileDetailInfo = readFileDetailInfo(filePath); + + String message = "成功获取文件内容: " + fileName; + return ResponseEntity.ok(new ApiResponseVo<>(true, message, fileDetailInfo)); + + } catch (Exception e) { + String errorMsg = "获取文件内容失败: " + e.getMessage(); + System.err.println(errorMsg); + e.printStackTrace(); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ApiResponseVo<>(false, errorMsg, null)); + } + } + /** * 根据文件名删除文件 - * DELETE /api/file/delete/{fileName} + * DELETE /wms/file/delete/{fileName} */ @DeleteMapping("/delete/{fileName}") @ResponseBody @@ -100,7 +137,7 @@ public class WmsFileManagementController { /** * 批量删除文件 - * POST /api/file/batch-delete + * POST /wms/file/batch-delete */ @PostMapping("/batch-delete") @ResponseBody @@ -145,8 +182,8 @@ public class WmsFileManagementController { } /** - * 手动执行定时删除(删除3个月前的文件) - * POST /api/file/cleanup + * 手动执行定时删除(删除前3个月的文件) + * POST /wms/file/cleanup */ @PostMapping("/cleanup") @ResponseBody @@ -156,7 +193,7 @@ public class WmsFileManagementController { /** * 定时删除任务 - 每3个月执行一次 - * 删除3个月前的文件 + * 删除前3个月的文件(1-3个月前的文件) */ @Scheduled(cron = "0 0 2 1 */3 *") // 每3个月的第1天凌晨2点执行 public void scheduledCleanup() { @@ -189,7 +226,8 @@ public class WmsFileManagementController { return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + DIRECTORY_PATH, null)); } - // 计算3个月前的日期 + // 计算时间范围:删除1-3个月前的文件 + LocalDateTime oneMonthAgo = LocalDateTime.now().minusMonths(1); LocalDateTime threeMonthsAgo = LocalDateTime.now().minusMonths(3); List deletedFiles = new ArrayList<>(); @@ -205,8 +243,8 @@ public class WmsFileManagementController { java.time.ZoneId.systemDefault() ); - // 如果文件修改时间早于3个月前,则删除 - if (fileModifiedTime.isBefore(threeMonthsAgo)) { + // 如果文件修改时间在1-3个月前之间,则删除 + if (fileModifiedTime.isBefore(oneMonthAgo) && fileModifiedTime.isAfter(threeMonthsAgo)) { Files.delete(file); deletedFiles.add(file.getFileName().toString()); deletedCount++; @@ -222,9 +260,10 @@ public class WmsFileManagementController { result.put("deletedCount", deletedCount); result.put("deletedFiles", deletedFiles); result.put("cleanupTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - result.put("thresholdTime", threeMonthsAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + result.put("startTime", oneMonthAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + result.put("endTime", threeMonthsAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - String message = String.format("清理完成: 删除了 %d 个3个月前的文件", deletedCount); + String message = String.format("清理完成: 删除了 %d 个前3个月的文件", deletedCount); return ResponseEntity.ok(new ApiResponseVo<>(true, message, result)); } catch (Exception e) { @@ -237,9 +276,25 @@ public class WmsFileManagementController { } /** - * 读取文件信息 + * 读取文件基本信息(不包含文件内容) */ - private FileInfo readFileInfo(Path filePath) throws IOException { + private FileInfo readFileBasicInfo(Path filePath) throws IOException { + String fileName = filePath.getFileName().toString(); + long fileSize = Files.size(filePath); + + LocalDateTime lastModified = LocalDateTime.ofInstant( + Files.getLastModifiedTime(filePath).toInstant(), + java.time.ZoneId.systemDefault() + ); + String lastModifiedStr = lastModified.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + + return new FileInfo(fileName, fileSize, lastModifiedStr, filePath.toString()); + } + + /** + * 读取文件详细信息(包含文件内容) + */ + private FileDetailInfo readFileDetailInfo(Path filePath) throws IOException { String fileName = filePath.getFileName().toString(); String fileContent = readFileContent(filePath); long fileSize = Files.size(filePath); @@ -250,7 +305,7 @@ public class WmsFileManagementController { ); String lastModifiedStr = lastModified.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - return new FileInfo(fileName, fileContent, fileSize, lastModifiedStr, filePath.toString()); + return new FileDetailInfo(fileName, fileContent, fileSize, lastModifiedStr, filePath.toString()); } /** @@ -272,7 +327,7 @@ public class WmsFileManagementController { /** * 获取目录统计信息 - * GET /api/file/stats + * GET /wms/file/stats */ @GetMapping("/stats") @ResponseBody diff --git a/klp-wms/src/main/java/com/klp/domain/FileDetailInfo.java b/klp-wms/src/main/java/com/klp/domain/FileDetailInfo.java new file mode 100644 index 00000000..6efb5f10 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/FileDetailInfo.java @@ -0,0 +1,26 @@ +package com.klp.domain; + +import lombok.Data; + +/** + * 文件详细信息实体类(包含文件内容) + */ +@Data +public class FileDetailInfo { + private String fileName; + private String fileContent; + private long fileSize; + private String lastModified; + private String filePath; + + public FileDetailInfo() { + } + + public FileDetailInfo(String fileName, String fileContent, long fileSize, String lastModified, String filePath) { + this.fileName = fileName; + this.fileContent = fileContent; + this.fileSize = fileSize; + this.lastModified = lastModified; + this.filePath = filePath; + } +} diff --git a/klp-wms/src/main/java/com/klp/domain/FileInfo.java b/klp-wms/src/main/java/com/klp/domain/FileInfo.java index 3bf511f4..7a9cdda2 100644 --- a/klp-wms/src/main/java/com/klp/domain/FileInfo.java +++ b/klp-wms/src/main/java/com/klp/domain/FileInfo.java @@ -1,24 +1,22 @@ package com.klp.domain; +import jdk.jfr.DataAmount; import lombok.Data; /** - * 文件信息实体类 + * 文件基本信息实体类(用于列表展示) */ @Data public class FileInfo { private String fileName; - private String fileContent; private long fileSize; private String lastModified; private String filePath; - public FileInfo() { - } + public FileInfo() {} - public FileInfo(String fileName, String fileContent, long fileSize, String lastModified, String filePath) { + public FileInfo(String fileName, long fileSize, String lastModified, String filePath) { this.fileName = fileName; - this.fileContent = fileContent; this.fileSize = fileSize; this.lastModified = lastModified; this.filePath = filePath;