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.oss.OssTemplate; 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.filewatch.ProgramBackMonitor; 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 DynamicDirectoryWatcher directoryWatcher; private final MachineBackFileService machineBackFileService; private final NcProgramService ncProgramService; private final OssTemplate ossTemplate; private final ProgramBackMonitor programBackMonitor; //private final FileWatcherService.FileChangeListener listener; @PostConstruct public void init() { log.info("应用启动时执行初始化操作 @PostConstruct"); programBackMonitor.monitorDir(); // 初始化逻辑 /* 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,ossTemplate); } }