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.mdm.basesetting.machine.service.MachineService;
|
import org.springblade.mdm.basesetting.machine.entity.Machine;
|
import org.springblade.mdm.commons.service.ParamService;
|
import org.springblade.mdm.flow.service.TaskDispatchService;
|
import org.springblade.mdm.machinefile.entity.MachineFile;
|
import org.springblade.mdm.machinefile.filewatch.*;
|
import org.springblade.mdm.machinefile.service.MachineFileScanService;
|
import org.springblade.mdm.machinefile.service.MachineFileService;
|
import org.springblade.mdm.program.service.ProgramAnnotationService;
|
import org.springblade.system.feign.ISysClient;
|
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.EnableAsync;
|
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
|
@EnableAsync
|
public class InitBean {
|
private final DirectorLockService directorLockService;
|
private final DynamicDirectoryWatcher directoryWatcher;
|
private final MachineService machineService;
|
private final MachineFileService machineFileService;
|
private final ParamService paramService;
|
private final ProgramAnnotationService annotationService;
|
private final MachineFileScanService machineFileScanService;
|
private final TaskDispatchService taskDispatchService;
|
@PostConstruct
|
public void init() {
|
log.info("应用启动时执行初始化操作 @PostConstruct");
|
String networkType = paramService.networkType();
|
if(!ParamService.NETWORK_TYPE_SHEMI.equals(networkType)) {
|
machineFileScanService.scanMachineFile();
|
|
//工控网才启动文件监控
|
log.info("工控网启动文件监控");
|
initMachineDirMonitor();
|
}else{
|
|
//涉密网
|
taskDispatchService.resetDrawingNos();
|
}
|
}
|
|
/**
|
* 初始化监控目录
|
*/
|
void initMachineDirMonitor() {
|
boolean locked = directorLockService.acquireLock();
|
if (!locked) {
|
log.info("回传接收目录已经被其他部署点位锁定,直接返回");
|
return;
|
}
|
|
List<Machine> machineList = machineService.getEnableMachines();;
|
List<WatchInfo> monitorInfoList = new ArrayList<>();
|
machineList.forEach(m -> {
|
addToWatchDirList(monitorInfoList,m);
|
});
|
for (WatchInfo info : monitorInfoList) {
|
try {
|
Path dirPath = Paths.get(info.getPath());
|
if(!dirPath.toFile().exists()) {
|
dirPath.toFile().mkdirs();
|
}
|
directoryWatcher.addDirectory(dirPath,getListener(info));
|
} catch (Exception e) {
|
log.error("添加监控目录异常",e);
|
}
|
}
|
|
}
|
|
void addToWatchDirList(List<WatchInfo> monitorDirList,Machine machine){
|
String dir;
|
//加入send文件夹
|
if (StringUtils.isNotEmpty(machine.getProgSendDir())) {
|
dir = StringUtils.removeEnd(StringUtils.removeEnd(machine.getProgSendDir(), "/"), "\\");
|
WatchInfo watchInfo = new WatchInfo();
|
watchInfo.setMachine(machine);
|
watchInfo.setDirType(MachineFile.DIR_TYPE_SEND);
|
watchInfo.setPath(dir);
|
if (!monitorDirList.contains(watchInfo)) {
|
monitorDirList.add(watchInfo);
|
}
|
}
|
|
//加入rec文件夹
|
if (StringUtils.isNotEmpty(machine.getProgReceiveDir())) {
|
dir = StringUtils.removeEnd(StringUtils.removeEnd(machine.getProgReceiveDir(), "/"), "\\");
|
WatchInfo watchInfo = new WatchInfo();
|
watchInfo.setMachine(machine);
|
watchInfo.setDirType(MachineFile.DIR_TYPE_REC);
|
watchInfo.setPath(dir);
|
if (!monitorDirList.contains(watchInfo)) {
|
monitorDirList.add(watchInfo);
|
}
|
}
|
|
//加入temp文件夹
|
if (StringUtils.isNotEmpty(machine.getProgTempDir())) {
|
dir = StringUtils.removeEnd(StringUtils.removeEnd(machine.getProgTempDir(), "/"), "\\");
|
WatchInfo watchInfo = new WatchInfo();
|
watchInfo.setMachine(machine);
|
watchInfo.setDirType(MachineFile.DIR_TYPE_TEMP);
|
watchInfo.setPath(dir);
|
if (!monitorDirList.contains(watchInfo)) {
|
monitorDirList.add(watchInfo);
|
}
|
}
|
}
|
|
FileWatcherService.FileChangeListener getListener(WatchInfo info) {
|
return new MachineFileChangeListener(machineFileService,annotationService,info);
|
}
|
}
|