拆分查询详情接口变成查询列表,以及单个查询,防止文件过多过大造成请求超时
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
package com.klp.controller;
|
package com.klp.controller;
|
||||||
|
|
||||||
import com.klp.domain.vo.ApiResponseVo;
|
import com.klp.domain.FileDetailInfo;
|
||||||
import com.klp.domain.FileInfo;
|
import com.klp.domain.FileInfo;
|
||||||
|
import com.klp.domain.vo.ApiResponseVo;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
@@ -13,9 +14,10 @@ import java.nio.file.*;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件管理控制器
|
* WMS文件管理控制器
|
||||||
* 提供文件读取、删除和定时删除功能
|
* 提供文件读取、删除和定时删除功能
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@@ -26,8 +28,8 @@ public class WmsFileManagementController {
|
|||||||
private static final String DIRECTORY_PATH = "testDirectory";
|
private static final String DIRECTORY_PATH = "testDirectory";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取目录下所有文件信息
|
* 获取目录下所有文件基本信息(不包含文件内容)
|
||||||
* GET /api/file/list
|
* GET /wms/file/list
|
||||||
*/
|
*/
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@@ -40,12 +42,12 @@ public class WmsFileManagementController {
|
|||||||
return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + DIRECTORY_PATH, null));
|
return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + DIRECTORY_PATH, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取所有文件
|
// 获取所有文件基本信息(不读取文件内容)
|
||||||
List<FileInfo> fileList = new ArrayList<>();
|
List<FileInfo> fileList = new ArrayList<>();
|
||||||
try (DirectoryStream<Path> stream = Files.newDirectoryStream(directory)) {
|
try (DirectoryStream<Path> stream = Files.newDirectoryStream(directory)) {
|
||||||
for (Path file : stream) {
|
for (Path file : stream) {
|
||||||
if (Files.isRegularFile(file)) {
|
if (Files.isRegularFile(file)) {
|
||||||
FileInfo fileInfo = readFileInfo(file);
|
FileInfo fileInfo = readFileBasicInfo(file);
|
||||||
fileList.add(fileInfo);
|
fileList.add(fileInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -63,9 +65,44 @@ public class WmsFileManagementController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取单个文件的详细信息(包含文件内容)
|
||||||
|
* GET /wms/file/content/{fileName}
|
||||||
|
*/
|
||||||
|
@GetMapping("/content/{fileName}")
|
||||||
|
@ResponseBody
|
||||||
|
public ResponseEntity<ApiResponseVo<FileDetailInfo>> 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}")
|
@DeleteMapping("/delete/{fileName}")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@@ -100,7 +137,7 @@ public class WmsFileManagementController {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除文件
|
* 批量删除文件
|
||||||
* POST /api/file/batch-delete
|
* POST /wms/file/batch-delete
|
||||||
*/
|
*/
|
||||||
@PostMapping("/batch-delete")
|
@PostMapping("/batch-delete")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@@ -145,8 +182,8 @@ public class WmsFileManagementController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 手动执行定时删除(删除3个月前的文件)
|
* 手动执行定时删除(删除前3个月的文件)
|
||||||
* POST /api/file/cleanup
|
* POST /wms/file/cleanup
|
||||||
*/
|
*/
|
||||||
@PostMapping("/cleanup")
|
@PostMapping("/cleanup")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@@ -156,7 +193,7 @@ public class WmsFileManagementController {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 定时删除任务 - 每3个月执行一次
|
* 定时删除任务 - 每3个月执行一次
|
||||||
* 删除3个月前的文件
|
* 删除前3个月的文件(1-3个月前的文件)
|
||||||
*/
|
*/
|
||||||
@Scheduled(cron = "0 0 2 1 */3 *") // 每3个月的第1天凌晨2点执行
|
@Scheduled(cron = "0 0 2 1 */3 *") // 每3个月的第1天凌晨2点执行
|
||||||
public void scheduledCleanup() {
|
public void scheduledCleanup() {
|
||||||
@@ -189,7 +226,8 @@ public class WmsFileManagementController {
|
|||||||
return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + DIRECTORY_PATH, null));
|
return ResponseEntity.ok(new ApiResponseVo<>(false, "目录不存在: " + DIRECTORY_PATH, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算3个月前的日期
|
// 计算时间范围:删除1-3个月前的文件
|
||||||
|
LocalDateTime oneMonthAgo = LocalDateTime.now().minusMonths(1);
|
||||||
LocalDateTime threeMonthsAgo = LocalDateTime.now().minusMonths(3);
|
LocalDateTime threeMonthsAgo = LocalDateTime.now().minusMonths(3);
|
||||||
|
|
||||||
List<String> deletedFiles = new ArrayList<>();
|
List<String> deletedFiles = new ArrayList<>();
|
||||||
@@ -205,8 +243,8 @@ public class WmsFileManagementController {
|
|||||||
java.time.ZoneId.systemDefault()
|
java.time.ZoneId.systemDefault()
|
||||||
);
|
);
|
||||||
|
|
||||||
// 如果文件修改时间早于3个月前,则删除
|
// 如果文件修改时间在1-3个月前之间,则删除
|
||||||
if (fileModifiedTime.isBefore(threeMonthsAgo)) {
|
if (fileModifiedTime.isBefore(oneMonthAgo) && fileModifiedTime.isAfter(threeMonthsAgo)) {
|
||||||
Files.delete(file);
|
Files.delete(file);
|
||||||
deletedFiles.add(file.getFileName().toString());
|
deletedFiles.add(file.getFileName().toString());
|
||||||
deletedCount++;
|
deletedCount++;
|
||||||
@@ -222,9 +260,10 @@ public class WmsFileManagementController {
|
|||||||
result.put("deletedCount", deletedCount);
|
result.put("deletedCount", deletedCount);
|
||||||
result.put("deletedFiles", deletedFiles);
|
result.put("deletedFiles", deletedFiles);
|
||||||
result.put("cleanupTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
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));
|
return ResponseEntity.ok(new ApiResponseVo<>(true, message, result));
|
||||||
|
|
||||||
} catch (Exception e) {
|
} 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 fileName = filePath.getFileName().toString();
|
||||||
String fileContent = readFileContent(filePath);
|
String fileContent = readFileContent(filePath);
|
||||||
long fileSize = Files.size(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"));
|
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")
|
@GetMapping("/stats")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
|
|||||||
26
klp-wms/src/main/java/com/klp/domain/FileDetailInfo.java
Normal file
26
klp-wms/src/main/java/com/klp/domain/FileDetailInfo.java
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,24 +1,22 @@
|
|||||||
package com.klp.domain;
|
package com.klp.domain;
|
||||||
|
|
||||||
|
import jdk.jfr.DataAmount;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件信息实体类
|
* 文件基本信息实体类(用于列表展示)
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class FileInfo {
|
public class FileInfo {
|
||||||
private String fileName;
|
private String fileName;
|
||||||
private String fileContent;
|
|
||||||
private long fileSize;
|
private long fileSize;
|
||||||
private String lastModified;
|
private String lastModified;
|
||||||
private String filePath;
|
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.fileName = fileName;
|
||||||
this.fileContent = fileContent;
|
|
||||||
this.fileSize = fileSize;
|
this.fileSize = fileSize;
|
||||||
this.lastModified = lastModified;
|
this.lastModified = lastModified;
|
||||||
this.filePath = filePath;
|
this.filePath = filePath;
|
||||||
|
|||||||
Reference in New Issue
Block a user