package org.springblade.mdm.config; import jakarta.annotation.PostConstruct; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springblade.core.tool.api.R; import org.springblade.mdm.basesetting.machine.MachineService; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.commons.contants.ParamContants; import org.springblade.mdm.machineback.filewatch.DirectorLockService; import org.springblade.mdm.machineback.filewatch.DynamicDirectoryWatcher; import org.springblade.mdm.machineback.filewatch.FileWatcherService; import org.springblade.mdm.machineback.filewatch.MachineFileBackListener; import org.springblade.mdm.machineback.service.MachineBackFileService; import org.springblade.mdm.program.service.NcProgramService; import org.springblade.system.feign.ISysClient; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; @Slf4j @AllArgsConstructor @Component public class InitBean { private final DirectorLockService directorLockService; private final MachineService machineService; private final FileWatcherService fileWatcherService; private final ISysClient sysClient; private final DynamicDirectoryWatcher directoryWatcher; private final MachineBackFileService machineBackFileService; private final NcProgramService ncProgramService; //private final FileWatcherService.FileChangeListener listener; @PostConstruct public void init() { System.out.println("应用启动时执行初始化操作 @PostConstruct"); // 初始化逻辑 R networkTypeR = sysClient.getParamValue(ParamContants.NETWORK_TYPE_KEY); String networkType = networkTypeR.getData() == null ? ParamContants.NETWORK_TYPE_SHEMI : networkTypeR.getData(); if (networkType.equals(ParamContants.NETWORK_TYPE_GONGKONG)) { initMachineDirMonitor(); } } /** * 初始化监控目录 */ void initMachineDirMonitor() { boolean locked = directorLockService.acquireLock(); if (!locked) { log.info("回传接收目录已经被其他部署点位锁定,直接返回"); return; } List machineList = machineService.list(); List monitorDirList = new ArrayList(); machineList.forEach(m -> { if (StringUtils.isNotEmpty(m.getProgReceiveDir())) { String dir = StringUtils.removeEnd(StringUtils.removeEnd(m.getProgReceiveDir(), "/"), "\\"); if (!monitorDirList.contains(dir)) { monitorDirList.add(dir); } } }); for (String dir : monitorDirList) { Path dirPath = Paths.get(dir); try { if(!dirPath.toFile().exists()) { dirPath.toFile().mkdirs(); } directoryWatcher.addDirectory(dirPath,getListener()); } catch (Exception e) { log.error("添加监控目录异常",e); } } } FileWatcherService.FileChangeListener getListener() { return new MachineFileBackListener(machineBackFileService,ncProgramService); } }