yangys
2025-09-29 4c7296d45efe849dc70a3b2e2240c905481a91c9
blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
@@ -4,18 +4,17 @@
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.service.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.springblade.mdm.commons.service.MachineDirTranslator;
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.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component;
import java.nio.file.Path;
@@ -26,23 +25,33 @@
@Slf4j
@AllArgsConstructor
@Component
@EnableAsync
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;
   private final MachineService machineService;
   private final MachineFileService machineFileService;
   private final ParamService paramService;
   private final ProgramAnnotationService annotationService;
   private final MachineFileScanService machineFileScanService;
   private final TaskDispatchService taskDispatchService;
   private final MachineDirTranslator dirTranslator;
   private final TaskPropertieBean taskPropertieBean;
   @PostConstruct
   public void init() {
      System.out.println("应用启动时执行初始化操作 @PostConstruct");
      // 初始化逻辑
      R<String> 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)) {
      log.info("应用启动时执行初始化操作 @PostConstruct");
      String networkType = paramService.networkType();
      if(!ParamService.NETWORK_TYPE_SHEMI.equals(networkType)) {
         if(taskPropertieBean.isFileScanOnStart()) {
            machineFileScanService.scanMachineFile();
         }
         //工控网才启动文件监控
         log.info("工控网启动文件监控");
         initMachineDirMonitor();
      }else{
         //涉密网
         taskDispatchService.resetDrawingNos();
      }
   }
@@ -50,29 +59,28 @@
    * 初始化监控目录
    */
   void initMachineDirMonitor() {
      /*
      boolean locked = directorLockService.acquireLock();
      if (!locked) {
         log.info("回传接收目录已经被其他部署点位锁定,直接返回");
         return;
      }
      List<Machine> machineList = machineService.list();
      List<String> monitorDirList = new ArrayList<String>();
      machineList.forEach(m -> {
         if (StringUtils.isNotEmpty(m.getProgReceiveDir())) {
            String dir = StringUtils.removeEnd(StringUtils.removeEnd(m.getProgReceiveDir(), "/"), "\\");
            if (!monitorDirList.contains(dir)) {
               monitorDirList.add(dir);
            }
         }
       */
      List<Machine> machineList = machineService.getEnableMachines();;
      List<WatchInfo> monitorInfoList = new ArrayList<>();
      machineList.forEach(m -> {
         addToWatchDirList(monitorInfoList,m);
      });
      for (String dir : monitorDirList) {
         Path dirPath = Paths.get(dir);
      for (WatchInfo info : monitorInfoList) {
         try {
            Path dirPath = Paths.get(info.getPath());
            if(!dirPath.toFile().exists()) {
               dirPath.toFile().mkdirs();
            }
            directoryWatcher.addDirectory(dirPath,getListener());
            directoryWatcher.addDirectory(dirPath,getListener(info));
         } catch (Exception e) {
            log.error("添加监控目录异常",e);
         }
@@ -80,10 +88,58 @@
   }
   void addToWatchDirList(List<WatchInfo> monitorDirList,Machine machine){
      String dir;
      //加入send文件夹
      if (StringUtils.isNotEmpty(machine.getProgSendDir())) {
         //dir = dirTranslator.trans(StringUtils.removeEnd(StringUtils.removeEnd(machine.getProgSendDir(), "/"), "\\"));
         dir = fixMachineDir(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);
         }
      }
   FileWatcherService.FileChangeListener getListener() {
      return new MachineFileBackListener(machineBackFileService,ncProgramService);
      //加入rec文件夹
      if (StringUtils.isNotEmpty(machine.getProgReceiveDir())) {
         //dir = StringUtils.removeEnd(StringUtils.removeEnd(machine.getProgReceiveDir(), "/"), "\\");
         dir = fixMachineDir(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(), "/"), "\\");
         dir = fixMachineDir(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);
         }
      }
   }
   /**
    * 翻译共享文件夹路径到 标准网络路径,去掉末尾路径分割不
    * @param dirpath 原始路径
    * @return 转换后的路径
    */
   String fixMachineDir(String dirpath){
      return dirTranslator.trans(StringUtils.removeEnd(StringUtils.removeEnd(dirpath, "/"), "\\"));
   }
   FileWatcherService.FileChangeListener getListener(WatchInfo info) {
      return new MachineFileChangeListener(machineFileService,annotationService,info);
   }
}