From bf0e3f18f65182686735665a7fbc3bdedfe98e1d Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期二, 02 九月 2025 19:54:07 +0800
Subject: [PATCH] 增加文件下发记录查询和导出

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileMonitorRecordController.java |    6 +-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/MachineFileChangeListener.java    |    9 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordExcelVO.java               |   38 ++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.xml             |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordQueryVO.java               |   12 ++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileWatcherService.java           |   29 +++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java            |   23 +++++--
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileSendRecordController.java    |   30 +++++++++-
 8 files changed, 129 insertions(+), 22 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileMonitorRecordController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileMonitorRecordController.java
index 8c2e365..6b20619 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileMonitorRecordController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileMonitorRecordController.java
@@ -21,6 +21,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.time.LocalDate;
 import java.util.Date;
 
 /**
@@ -42,10 +43,9 @@
 	@GetMapping("/page")
 	@Operation(summary = "宸ユ帶缃戠洰褰曟枃浠跺垪琛�", description = "宸ユ帶缃戠洰褰曟枃浠跺垪琛�")
 	public R<IPage<FileMonitorRecord>> page(FileSendRecordQueryVO query) {
-
-		Date end = null;
+		LocalDate end = null;
 		if(query.getCreateTimeEnd() != null) {
-			end = DateUtil.plusDays(query.getCreateTimeEnd(),1);
+			end = query.getCreateTimeEnd().plusDays(1);
 		}
 
 		IPage<FileMonitorRecord> page = fileMonitorRecordService.lambdaQuery()
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileSendRecordController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileSendRecordController.java
index 0209a43..979302f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileSendRecordController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileSendRecordController.java
@@ -4,9 +4,12 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
 import org.springblade.mdm.basesetting.machine.service.MachineService;
 import org.springblade.mdm.basesetting.producedivision.entity.MdmDept;
@@ -17,6 +20,7 @@
 import org.springblade.mdm.machinefile.service.MachineFileService;
 import org.springblade.mdm.machinefile.vo.*;
 import org.springblade.mdm.program.vo.CompareDataVO;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -43,11 +47,31 @@
 	@Autowired
 	private FileSendRecordService fileSendRecordService;
 
-	@GetMapping("/file-page")
-	@Operation(summary = "宸ユ帶缃戠洰褰曟枃浠跺垪琛�", description = "宸ユ帶缃戠洰褰曟枃浠跺垪琛�")
+	@GetMapping("/page")
+	@Operation(summary = "涓嬪彂鏂囦欢璁板綍鍒楄〃", description = "涓嬪彂鏂囦欢璁板綍鍒楄〃")
 	public R<IPage<FileSendRecordVO>> page(FileSendRecordQueryVO query) {
-
+		if(query.getCreateTimeEnd()!=null){
+			query.setCreateTimeEnd(query.getCreateTimeEnd().plusDays(1));
+		}
 		return R.data(fileSendRecordService.pageQuery(query));
 	}
 
+
+	@GetMapping("/export-excel")
+	@Operation(summary = "涓嬪彂鏂囦欢璁板綍琛ㄥ鍑�", description = "涓嬪彂鏂囦欢璁板綍琛ㄥ鍑�")
+	public void export(FileSendRecordQueryVO query, HttpServletResponse response) {
+		query.setCurrent(1);
+		query.setSize(Integer.MAX_VALUE);
+
+		//IPage<MachineBackFileVO> pages = service.pageQuery(query);
+		IPage<FileSendRecordVO> pages = fileSendRecordService.pageQuery(query);
+		List<FileSendRecordExcelVO> list = new ArrayList<>();
+		pages.getRecords().forEach(m ->{
+			FileSendRecordExcelVO excelVO = new FileSendRecordExcelVO();
+			BeanUtils.copyProperties(m, excelVO);
+			list.add(excelVO);
+		});
+		ExcelUtil.export(response, "涓嬪彂鏂囦欢璁板綍琛�" + DateUtil.time(), "涓嬪彂鏂囦欢璁板綍琛�", list, FileSendRecordExcelVO.class);
+	}
+
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileWatcherService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileWatcherService.java
index ebd3d24..bc65651 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileWatcherService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileWatcherService.java
@@ -1,5 +1,6 @@
 package org.springblade.mdm.machinefile.filewatch;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
@@ -10,12 +11,22 @@
 import java.util.concurrent.Executors;
 
 import static java.nio.file.StandardWatchEventKinds.*;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+@Slf4j
 @Service
 public class FileWatcherService {
 
 	private final ExecutorService executor = Executors.newCachedThreadPool();
 	private final Map<Path, WatchService> watchServices = new HashMap<>();
 	private final Map<Path, FileChangeListener> listeners = new HashMap<>();
+	private final Map<Path, FileState> fileStatesOld = new HashMap<>();
+	Cache<Path, FileState> fileStates = CacheBuilder.newBuilder()
+		.maximumSize(10) // 鏈�澶у閲�3
+		.build();
+	enum FileState {
+		CREATED, MODIFIED, STABLE
+	}
 
 	public interface FileChangeListener {
 		void onFileCreated(Path filePath);
@@ -42,6 +53,7 @@
 			try {
 				while (true) {
 					WatchKey key = watchService.take();
+
 					for (WatchEvent<?> event : key.pollEvents()) {
 						WatchEvent.Kind<?> kind = event.kind();
 
@@ -50,13 +62,28 @@
 						Path fileName = ev.context();
 						Path fullPath = directory.resolve(fileName);
 
+						FileState currentState = fileStates.getIfPresent(fullPath);
+						currentState = (currentState == null) ? FileState.STABLE : currentState;
+
+						//FileState currentState = fileStates.getOrDefault(fullPath, FileState.STABLE);
+
 						FileChangeListener currentListener = listeners.get(directory);
 						if (currentListener == null) break;
 
 						if (kind == ENTRY_CREATE) {
+							if (currentState != FileState.CREATED) {
+								log.info("鏂版枃浠跺垱寤�: {}", fullPath);
+								fileStates.put(fullPath, FileState.CREATED);
+							}
 							currentListener.onFileCreated(fullPath);
 						} else if (kind == ENTRY_MODIFY) {
-							currentListener.onFileModified(fullPath);
+							if (currentState == FileState.CREATED) {
+								// 蹇界暐鍒涘缓鍚庣殑绗竴娆′慨鏀�
+								log.info("鏂囦欢鍒涘缓鏃剁殑淇敼浜嬩欢锛屽拷鐣�: {}", fullPath);
+								fileStates.put(fullPath, FileState.STABLE);
+							} else {
+								currentListener.onFileModified(fullPath);
+							}
 						} else if (kind == ENTRY_DELETE) {
 							currentListener.onFileDeleted(fullPath);
 						}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/MachineFileChangeListener.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/MachineFileChangeListener.java
index d248c18..c21d675 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/MachineFileChangeListener.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/MachineFileChangeListener.java
@@ -15,13 +15,21 @@
 import java.io.IOException;
 import java.nio.file.Path;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 @Slf4j
 public class MachineFileChangeListener implements FileWatcherService.FileChangeListener{
+
+
 	private final MachineFileService machineFileService;
 	ProgramAnnotationService programAnnotationService;
 	private final Machine machine;
 	private final String dirType;
+
+
+
+
 	public MachineFileChangeListener(MachineFileService aMachineFileService, ProgramAnnotationService annotationService, WatchInfo info) {
 		this.machineFileService = aMachineFileService;
 		this.machine = info.getMachine();
@@ -64,7 +72,6 @@
 			}
 		} catch (IOException e) {
 			log.error("鍥炰紶鏂囦欢鎿嶄綔IO閿欒",e);
-			throw new RuntimeException(e);
 		} catch (InterruptedException e) {
 			log.error("sleep鍑洪敊",e);
 		} catch (Exception e) {
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.xml
index 73cd15e..73756bf 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.xml
@@ -26,10 +26,10 @@
                 and   f.machine_code= #{query.machineCode,jdbcType=VARCHAR}
             </if>
             <if test="query.createTimeBegin!=null">
-                and h.create_time &gt;=#{query.createTimeBegin}
+                and f.create_time &gt;=#{query.createTimeBegin}
             </if>
             <if test="query.createTimeEnd!=null">
-                and h.create_time &lt;=#{query.createTimeEnd}
+                and f.create_time &lt;=#{query.createTimeEnd}
             </if>
             <!--
             <if test="query.deptIds!=null and query.deptIds.size()&gt;0">
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordExcelVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordExcelVO.java
new file mode 100644
index 0000000..73608da
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordExcelVO.java
@@ -0,0 +1,38 @@
+package org.springblade.mdm.machinefile.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.format.DateTimeFormat;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 鏈哄簥鍥炰紶鏂囦欢澶勭悊瀵煎嚭excelVO
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class FileSendRecordExcelVO {
+
+	@ExcelProperty("鏂囦欢鍚嶇О")
+	private String name;
+
+	@ColumnWidth(20)
+	@ExcelProperty("鏈哄簥缂栧彿")
+	private String machineCode;
+
+	@ColumnWidth(20)
+	@ExcelProperty("涓嬪彂浜哄憳")
+	private String createUserName;
+
+	@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
+	@ExcelProperty("涓嬪彂鏃堕棿")
+	private Date createTime;
+
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordQueryVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordQueryVO.java
index d12a7ae..d512f0b 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordQueryVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordQueryVO.java
@@ -4,7 +4,9 @@
 import lombok.Getter;
 import lombok.Setter;
 import org.springblade.core.mp.support.Query;
+import org.springframework.format.annotation.DateTimeFormat;
 
+import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
 
@@ -20,8 +22,10 @@
 	private String name;
 	@Schema(description = "鏈哄簥缂栫爜")
 	private String machineCode;
-	@Schema(description = "涓嬪彂鏃堕棿寮�濮�")
-	private Date createTimeBegin;
-	@Schema(description = "涓嬪彂鏃堕棿鎴")
-	private Date createTimeEnd;
+	//@Schema(description = "涓嬪彂鏃堕棿寮�濮�")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private LocalDate createTimeBegin;
+	//@Schema(description = "涓嬪彂鏃堕棿鎴")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private LocalDate createTimeEnd;
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
index 92a5183..0fec986 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -12,6 +12,8 @@
 import org.springblade.core.tool.utils.Func;
 import org.springblade.mdm.basesetting.machine.service.MachineService;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.machinefile.entity.FileSendRecord;
+import org.springblade.mdm.machinefile.service.FileSendRecordService;
 import org.springblade.mdm.program.entity.NcProgramExchange;
 import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
 import org.springblade.mdm.program.vo.MdmProgramImportVO;
@@ -47,6 +49,9 @@
 	@Autowired
 	private MachineService machineService;
 
+	@Autowired
+	private FileSendRecordService fileSendRecordService;
+
 	private String getFileKey(){
 		return "mdmgkwimpfile-"+ AuthUtil.getUserId();
 	}
@@ -70,7 +75,6 @@
 
 			// 鍒涘缓瑙e帇鐩爣鐩綍锛堝湪涓存椂鐩綍涓嬪垱寤轰竴涓敮涓�瀛愮洰褰曪級
 			Path tempZipFile = Files.createTempFile("mdmimpfile-"+System.currentTimeMillis(), ".zip");
-			//Path extractDir = Files.createTempDirectory(tempPath, "unzip_");
 
 			file.transferTo(tempZipFile);
 
@@ -208,8 +212,6 @@
 						for (Path subPath : subStream) {
 							if (Files.isRegularFile(subPath)) {
 								System.out.println("鎵惧埌鏂囦欢: " + subPath);
-								//files.add(subPath.getFileName().toString());
-								// 杩欓噷鍙互娣诲姞瀵规枃浠剁殑澶勭悊閫昏緫
 							}
 						}
 					}
@@ -227,8 +229,6 @@
 						byte[] buffer = new byte[2000];
 						inputStream.read(buffer);
 						vo.setMd5(DigestUtils.md5Hex(buffer));
-
-
 					} catch (IOException e) {
 						log.error("璇诲彇鏂囦欢md5澶辫触",e);
 					}
@@ -340,20 +340,27 @@
 
 		List<String> idList = Func.toStrList(ids);
 
-		String ditStr = bladeRedis.get(getFileKey());
-		Path extractDir = Paths.get(ditStr);
+		String dictStr = bladeRedis.get(getFileKey());
+		Path extractDir = Paths.get(dictStr);
 
 		List<MdmProgramImportVO> list = readTempDir(extractDir);
 
 		String destFileFull;
 		for(String str : idList){
-			System.out.println(str);
+			//System.out.println(str);
 			for(MdmProgramImportVO vo : list){
 				if(StringUtils.equals(vo.getFullPath(),str)){
 					destFileFull = vo.getSendPath()+File.separator+vo.getFilename();
 					File destFile = new File(destFileFull);
 					FileUtils.forceMkdirParent(destFile);
 					FileUtils.copyFile(new File(str),destFile);
+
+					FileSendRecord record = new FileSendRecord();
+					record.setName(destFile.getName());
+					Path destPath = Paths.get(destFileFull);
+					record.setMachineCode(vo.getMachineCode());
+					record.setFileSize(Files.size(destPath));
+					fileSendRecordService.save(record);
 					break;
 				}
 			}

--
Gitblit v1.9.3