From 8ede6183253248e497d391a0902bb5d41181b3bf Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期二, 12 八月 2025 20:39:18 +0800
Subject: [PATCH] 文件处理

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java |   88 ++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 77 insertions(+), 11 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java
index ea4cf4a..53a63fd 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java
@@ -1,5 +1,8 @@
 package org.springblade.mdm.task;
 
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.utils.FileUtil;
 import org.springblade.mdm.basesetting.machine.MachineService;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
@@ -12,6 +15,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -20,6 +24,7 @@
 import java.util.Date;
 import java.util.List;
 
+@Slf4j
 @Component
 @EnableScheduling
 public class MachineFileScanTask {
@@ -28,32 +33,77 @@
 	@Autowired
 	private MachineService machineService;
 	// 姣�5绉掓墽琛屼竴娆�
-	@Scheduled(fixedRate = 1000000)
+	//@Scheduled(fixedRate = 1000000)
 	//@Scheduled(cron = "0 1 0 * * ?") // 姣忓ぉ涓婂崍0鐐�1鍒嗘墽琛�
+	@Scheduled(cron = "0 15 19 * * ?") //test
 	public void executeEvery5Seconds() {
 		System.out.println("瀹氭椂浠诲姟鎵ц: " + System.currentTimeMillis());
+		scanMachineFile();
 	}
 
 
 	public void scanMachineFile() {
 		List<Machine> machines = machineService.lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).list();
 		for (Machine machine : machines) {
-			scanReceiveDir(machine);
+			try {
+				scanDir(machine,MachineFile.DIR_TYPE_REC);
+			}catch(Exception e) {
+				log.error("REC鎵弿鏂囦欢寮傚父,鏈哄簥"+machine.getCode(),e);
+			}
+			try {
+				scanDir(machine,MachineFile.DIR_TYPE_SEND);
+			}catch(Exception e) {
+				log.error("SEND鎵弿鏂囦欢寮傚父,鏈哄簥"+machine.getCode(),e);
+			}
+			try {
+				scanDir(machine,MachineFile.DIR_TYPE_TEMP);
+			}catch(Exception e) {
+				log.error("TEMP鎵弿鏂囦欢寮傚父,鏈哄簥"+machine.getCode(),e);
+			}
 		}
 
 	}
 
-	public void scanReceiveDir(Machine machine){
-		List<File> files = FileUtil.list(machine.getProgReceiveDir());
 
-		for(File f : files){
+
+	/**
+	 * 鎵弿鐩綍
+	 * @param machine 鏈哄簥淇℃伅
+	 * @param dirType 鐩綍绫诲瀷
+	 * @throws IOException
+	 */
+	public void scanDir(Machine machine,String dirType) throws IOException {
+		//MachineFile.DIR_TYPE_REC
+
+		String basePath = MachineFileService.getBasePath(machine,dirType);
+		if(basePath == null) {
+			log.warn("鐩綍绫诲瀷涓嶅尮閰�:{}",dirType);
+			return;
+		}
+		Path dirPath = Paths.get(basePath);
+		if(!dirPath.toFile().exists()){
+			log.warn("鎵弿鐩綍:{} 涓嶅瓨鍦�",dirPath);
+			return;
+		}
+		// 鍙寘鍚櫘閫氭枃浠�
+		List<Path> files = Files.list(dirPath)
+			.filter(Files::isRegularFile).toList();
+
+		byte[] buffer = new byte[2048];
+
+		boolean exists;//鏂囦欢鏄惁瀛樺湪浜庢暟鎹簱涓�
+		for (Path filePath : files) {
+
+			exists = false;
+
 			MachineFile mf = new MachineFile();
-			mf.setName(f.getName());
-			mf.setDirType(MachineFile.DIR_TYPE_REC);
+
+			mf.setTenantId("000000");
+			mf.setName(filePath.toFile().getName());
+			mf.setDirType(dirType);
 			mf.setMachineCode(machine.getCode());
 
 			try {
-				Path filePath = Paths.get(f.getPath());
 				BasicFileAttributes attrs = Files.readAttributes(
 					filePath,
 					BasicFileAttributes.class
@@ -63,15 +113,31 @@
 				Date creationDate = new Date(creationTime.toMillis());
 				mf.setFileCreateTime(creationDate);
 
-				FileTime modifyTime =attrs.lastModifiedTime();
+				FileTime modifyTime = attrs.lastModifiedTime();
 				mf.setFileModifyDate(new Date(modifyTime.toMillis()));
+				mf.setFileSize(Files.size(filePath));
+				try (InputStream inputStream = Files.newInputStream(filePath)) {
+					// 浣跨敤杈撳叆娴佽鍙栨枃浠跺唴瀹�
+					int bytesRead = inputStream.read(buffer);
+					mf.setMd5(DigestUtils.md5Hex(buffer));
+				} catch (IOException e) {
+					log.error("璇诲彇鏂囦欢md5澶辫触",e);
+					continue;//鏈夐敊璇�,鎺犺繃
+				}
+
+				exists = machineFileService.fileExists(mf.getName(),mf.getMd5(),machine.getCode());
 				System.out.println("鏂囦欢鍒涘缓鏃堕棿: " + creationDate);
 			} catch (IOException e) {
-				e.printStackTrace();
+				log.error("璇诲彇鏂囦欢淇℃伅澶辫触",e);
+			}
+			if(!exists) {
+				machineFileService.save(mf);
+			}else{
+				log.info("鏂囦欢宸插鏋滄帬杩�:{}",filePath.getFileName());
 			}
 
-			machineFileService.save(mf);
 		}
+
 	}
 
 }

--
Gitblit v1.9.3