yangys
2025-08-30 86c8efdb19a2f4be79a947650ef62ed79382011b
blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java
@@ -6,8 +6,11 @@
import org.springblade.mdm.basesetting.machine.MachineService;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.commons.service.ParamService;
import org.springblade.mdm.gkw.programnode.entity.MachineFile;
import org.springblade.mdm.gkw.programnode.service.MachineFileService;
import org.springblade.mdm.machinefile.entity.MachineFile;
import org.springblade.mdm.machinefile.service.MachineFileService;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
@@ -32,6 +35,8 @@
   private MachineService machineService;
   @Autowired
   private ParamService paramService;
   @Autowired
   private ProgramAnnotationService programAnnotationService;
   // 每5秒执行一次
   //@Scheduled(fixedRate = 1000000)
   //@Scheduled(cron = "0 1 0 * * ?") // 每天上午0点1分执行
@@ -117,6 +122,7 @@
      byte[] buffer = new byte[2048];
      MachineFile existFileInDb;
      List<DictBiz> annotatiionList = programAnnotationService.getAnnotionDictList();
      //boolean exists;//文件是否存在于数据库中
      for (Path filePath : files) {
@@ -131,6 +137,9 @@
         mf.setMachineCode(machine.getCode());
         try {
            //读取内容,确定程序状态
            int pstatus = readProgramStatus(filePath,machine.getMachineGroupCode(),annotatiionList);
            mf.setProgramStatus(pstatus);
            BasicFileAttributes attrs = Files.readAttributes(
               filePath,
               BasicFileAttributes.class
@@ -165,7 +174,7 @@
            log.info("文件已存在掠过:{}",filePath.getFileName());
            //已存在咋整。
            existFileInDb.setFileSize(mf.getFileSize());
            existFileInDb.setProgramStatus(mf.getProgramStatus());
            existFileInDb.setFileCreateTime(mf.getFileCreateTime());
            existFileInDb.setFileModifyTime(mf.getFileModifyTime());
            if(!StringUtils.equals(existFileInDb.getMd5(),mf.getMd5())){
@@ -185,6 +194,33 @@
   }
   /**
    * 读取文件中的程序状态
    * @param filePath 文件路径
    * @param machineGroupCode
    * @param annotatiionList 注释配置字典
    * @return 状态的整数之和
    * @throws IOException
    */
   int readProgramStatus(Path filePath,String machineGroupCode,List<DictBiz> annotatiionList) throws IOException {
      int programStatus = MachineFile.PROGRAM_STATUS_UNKNOWN;
      try(InputStream ins = Files.newInputStream(filePath)){
         String statusLine = FileContentUtil.readLineAt(ins,ProgramAnnotationService.STATUS_LINE_INDEX);
         if(programAnnotationService.isAnnotation(statusLine,machineGroupCode,annotatiionList)){
            String progStatusTxt = programAnnotationService.removeAnnotation(machineGroupCode,statusLine,annotatiionList);
            if(ProgramAnnotationService.SQ.equals(progStatusTxt)){
               programStatus = MachineFile.PROGRAM_STATUS_TRY;
            }else if(ProgramAnnotationService.GH.equals(progStatusTxt)){
               programStatus = MachineFile.PROGRAM_STATUS_CURED;
            }else if(ProgramAnnotationService.PL.equals(progStatusTxt)){
               programStatus = MachineFile.PROGRAM_STATUS_DIVIASTION;
            }
         }
      }
      return programStatus;
   }
   /**
    * 清理已经删除了文件的记录
    * @param machine
    * @param dirType