package org.springblade.mdm.machinefile.filewatch; import com.alibaba.excel.util.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.SpringUtil; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.machinefile.entity.FileMonitorRecord; import org.springblade.mdm.machinefile.entity.MachineFile; import org.springblade.mdm.machinefile.service.FileMonitorRecordService; import org.springblade.mdm.machinefile.service.MachineFileScanService; import org.springblade.mdm.machinefile.service.MachineFileService; import org.springblade.mdm.program.service.ProgramAnnotationService; import java.io.FileInputStream; 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(); this.dirType = info.getDirType(); this.programAnnotationService = annotationService; } @Override public void onFileCreated(Path filePath) { try { log.info("文件创建{},mcode={},dieType={}",filePath,machine.getCode(),dirType); if(FileLockChecker.isFileComplete(filePath)){ MachineFileScanService fileScanService = SpringUtil.getBean(MachineFileScanService.class); MachineFile mf = fileScanService.readFileToMachineFile(filePath,this.machine,this.dirType,programAnnotationService.getAnnotionDictList()); machineFileService.refreshFileData(mf); } saveMonitor(filePath,FileMonitorRecord.EVENT_CREATE); } catch (InterruptedException e) { log.error("sleep出错",e); } catch (IOException e) { log.error("机床文件监控created异常",e); }catch (Exception e) { log.error("机床回传文件处理异常create",e); } } @Override public void onFileModified(Path filePath) { //文件修改 log.info("文件修改:{}",filePath); try { if(FileLockChecker.isFileComplete(filePath)){ log.info("文件传输完成{}",filePath); MachineFileScanService fileScanService = SpringUtil.getBean(MachineFileScanService.class); MachineFile mf = fileScanService.readFileToMachineFile(filePath,this.machine,this.dirType,programAnnotationService.getAnnotionDictList()); machineFileService.refreshFileData(mf); }else{ log.warn("文件传输中,后续再操作{}",filePath); } } catch (IOException e) { log.error("回传文件操作IO错误",e); } catch (InterruptedException e) { log.error("sleep出错",e); } catch (Exception e) { log.error("机床回传文件处理异常",e); } } @Override public void onFileDeleted(Path filePath) { String path = filePath.toString(); log.info("文件删除{}",filePath); try { String name = filePath.getFileName().toString(); saveMonitor(filePath,FileMonitorRecord.EVENT_DELETE); MachineFile fileInDb = machineFileService.getExistsFile(name,this.dirType,this.machine.getCode()); if(fileInDb != null){ fileInDb.markFileDeleted(); machineFileService.updateById(fileInDb); }else{ log.info("数据库内不存在文件{}",filePath); } } catch (Exception e) { log.error("机床回传文件onDelete处理异常",e); } } void saveMonitor(Path filePath,int eventType){ FileMonitorRecordService fileMonitorRecordService = SpringUtil.getBean(FileMonitorRecordService.class); FileMonitorRecord monitorRecord = new FileMonitorRecord(); monitorRecord.setName(filePath.getFileName().toString()); monitorRecord.setDirPath(filePath.getParent().toString()); monitorRecord.setEventType(eventType); monitorRecord.setCreateTime(new Date()); fileMonitorRecordService.save(monitorRecord); } }