| | |
| | | import org.springblade.core.log.exception.ServiceException; |
| | | import org.springblade.mdm.basesetting.machine.service.MachineService; |
| | | import org.springblade.mdm.basesetting.machine.entity.Machine; |
| | | import org.springblade.mdm.commons.service.MachineDirTranslator; |
| | | import org.springblade.mdm.commons.service.ParamService; |
| | | import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO; |
| | | import org.springblade.mdm.machinefile.entity.MachineFile; |
| | | import org.springblade.mdm.machinefile.mapper.MachineFileMapper; |
| | | import org.springblade.mdm.program.service.ProgramAnnotationService; |
| | | import org.springblade.mdm.program.service.programannotation.*; |
| | | import org.springblade.mdm.utils.FileContentUtil; |
| | |
| | | @Autowired |
| | | private MachineService machineService; |
| | | @Autowired |
| | | private ProgramAnnotationService programAnnotationService; |
| | | @Autowired |
| | | private MachineAnnotationConfig annoConfig; |
| | | @Autowired |
| | | private AnnotationProcessorHelper annotationProcessorHelper; |
| | | /** |
| | | * 扫描所有机床的配置目录 |
| | | */ |
| | | @Autowired |
| | | private MachineDirTranslator machineDirTranslator; |
| | | @Autowired |
| | | private MachineFileMapper machineFileMapper; |
| | | @Async |
| | | public void scanMachineFile() { |
| | | List<Machine> machines = machineService.getEnableMachines(); |
| | |
| | | } |
| | | } |
| | | |
| | | machineFileMapper.deleteNotUseRecords(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 扫描目录 |
| | | * @param machine 机床信息 |
| | | * @param dirType 目录类型 |
| | | * @throws IOException |
| | | * @throws IOException 文件操作可能导致的异常 |
| | | */ |
| | | public void scanDir(Machine machine,String dirType) throws IOException { |
| | | String basePath = MachineFileService.getBasePath(machine,dirType); |
| | | String basePath = machineDirTranslator.trans(MachineFileService.getBasePath(machine,dirType)); |
| | | if(basePath == null) { |
| | | log.warn("目录类型不匹配:{}",dirType); |
| | | return; |
| | |
| | | .filter(Files::isRegularFile).toList(); |
| | | |
| | | //byte[] buffer = new byte[2048]; |
| | | List<DictBiz> annotatiionList = programAnnotationService.getAnnotionDictList(); |
| | | //List<DictBiz> annotatiionList = programAnnotationService.getAnnotionDictList(); |
| | | //boolean exists;//文件是否存在于数据库中 |
| | | for (Path filePath : files) { |
| | | try { |
| | | MachineFile mf = readFileToMachineFile(filePath,machine,dirType,annotatiionList); |
| | | MachineFile mf = readFileToMachineFile(filePath,machine,dirType); |
| | | |
| | | machineFileService.refreshFileData(mf); |
| | | |
| | |
| | | * @param filePath 文件路径 |
| | | * @param machine 机器 |
| | | * @param dirType 目录类型 |
| | | * @param annotatiionList 注解配置字典 用于读取程序状态 |
| | | * @return MachineFile 实例 |
| | | * @throws IOException |
| | | */ |
| | | public MachineFile readFileToMachineFile(Path filePath,Machine machine,String dirType,List<DictBiz> annotatiionList) throws IOException { |
| | | public MachineFile readFileToMachineFile(Path filePath,Machine machine,String dirType) throws IOException { |
| | | MachineFile mf = new MachineFile(); |
| | | |
| | | mf.setTenantId("000000"); |
| | | mf.setName(filePath.toFile().getName()); |
| | | mf.setDirType(dirType); |
| | | mf.setMachineCode(machine.getCode()); |
| | | |
| | | |
| | | BasicFileAttributes attrs = Files.readAttributes( |
| | | filePath, |
| | |
| | | } |
| | | return mf; |
| | | } |
| | | /** |
| | | * 读取文件中的程序状态 |
| | | * @param filePath 文件路径 |
| | | * @param controlSystem |
| | | * @param annotatiionList 注释配置字典 |
| | | * @return 状态的整数之和 |
| | | * @throws IOException |
| | | */ |
| | | public int readProgramStatus(Path filePath,String controlSystem,List<DictBiz> annotatiionList) throws IOException { |
| | | int programStatus = MachineFile.PROGRAM_STATUS_UNKNOWN; |
| | | try(InputStream ins = Files.newInputStream(filePath); |
| | | BufferedInputStream byteInsStream = new BufferedInputStream(ins)){ |
| | | |
| | | boolean isText= FileContentUtil.isTextFile(byteInsStream); |
| | | if(!isText){ |
| | | return MachineFile.PROGRAM_STATUS_UNKNOWN; |
| | | } |
| | | byteInsStream.reset(); |
| | | |
| | | AnnotationProcessor annoProcessor = ProcessorHelper.getProcessor(controlSystem,annoConfig); |
| | | String statusLine = FileContentUtil.readLineAt(byteInsStream, annoProcessor.getAnnotationProperties().getStatusLineIndex()); |
| | | if(AnnotationUtil.isAnnotation(statusLine,controlSystem,annotatiionList)){ |
| | | String progStatusTxt = AnnotationUtil.removeAnnotation(controlSystem,statusLine,annotatiionList); |
| | | if(AnnotationUtil.SQ.equals(progStatusTxt)){ |
| | | programStatus = MachineFile.PROGRAM_STATUS_TRY; |
| | | }else if(AnnotationUtil.GH.equals(progStatusTxt)){ |
| | | programStatus = MachineFile.PROGRAM_STATUS_CURED; |
| | | }else if(AnnotationUtil.LG.equals(progStatusTxt)){ |
| | | programStatus = MachineFile.PROGRAM_STATUS_DIVIASTION; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return programStatus; |
| | | } |
| | | |
| | | /** |
| | | * 清理已经删除了文件的记录 |
| | | * @param machine |
| | | * @param dirType |
| | | * @param machine 机床 |
| | | * @param dirType 目录类型 |
| | | * @throws IOException |
| | | */ |
| | | void clearDeletedRecords(Machine machine,String dirType) throws IOException { |
| | | List<MachineFile> machineFiles = this.machineFileService.lambdaQuery().eq(MachineFile::getDirType,dirType) |
| | | .eq(MachineFile::getMachineCode,machine.getCode()).list(); |
| | | |
| | | String basePath = MachineFileService.getBasePath(machine,dirType); |
| | | String basePath = machineDirTranslator.trans(MachineFileService.getBasePath(machine,dirType)); |
| | | if(basePath == null) { |
| | | log.warn("目录类型不匹配:{}",dirType); |
| | | return; |