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 >=#{query.createTimeBegin}
+ and f.create_time >=#{query.createTimeBegin}
</if>
<if test="query.createTimeEnd!=null">
- and h.create_time <=#{query.createTimeEnd}
+ and f.create_time <=#{query.createTimeEnd}
</if>
<!--
<if test="query.deptIds!=null and query.deptIds.size()>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