blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java
@@ -335,6 +335,10 @@ * @param sendPathLine ä¸åè·¯å¾æ³¨éææ¬ */ public Machine getMachineBySendPathAnnotation(String sendPathLine) { //è·¯å¾ä¸ºç©ºï¼ä¸å¹é 任使ºå¨ if(StringUtils.isBlank(sendPathLine)){ return null; } //廿é¦ä½æ¬å·ï¼æé¤åé£ç§æºåºæ³¨é String sendPath = escapeSqlWildcard(StringUtils.trim(StringUtils.removeEnd(StringUtils.removeStart(sendPathLine,"("),")"))); blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/RegExpConstants.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package org.springblade.mdm.commons.contants; import java.util.regex.Pattern; public class RegExpConstants { /** * ç¨åºæä»¶å æ£å */ public static final Pattern PROGRAM_FILE_PATTERN = Pattern.compile("^[0-9a-zA-Z_\\-]+\\-[0-9a-zA-Z]+-[0-9a-zA-Z]+\\-\\d+\\-\\d+\\.*[a-zA-Z]*$"); } blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
@@ -13,8 +13,6 @@ 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; @@ -36,12 +34,19 @@ private final ProgramAnnotationService annotationService; private final MachineFileScanService machineFileScanService; private final TaskDispatchService taskDispatchService; //@Value("${task.file_scan_on_start:true}") //@Value("${task.fileScanOnStart:true}") //public boolean fileScanOnStart; private final TaskPropertieBean taskPropertieBean; @PostConstruct public void init() { log.info("åºç¨å¯å¨æ¶æ§è¡åå§åæä½ @PostConstruct"); String networkType = paramService.networkType(); if(!ParamService.NETWORK_TYPE_SHEMI.equals(networkType)) { machineFileScanService.scanMachineFile(); if(taskPropertieBean.isFileScanOnStart()) { machineFileScanService.scanMachineFile(); } //å·¥æ§ç½æå¯å¨æä»¶çæ§ log.info("å·¥æ§ç½å¯å¨æä»¶çæ§"); blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/TaskPropertieBean.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package org.springblade.mdm.config; import lombok.Getter; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Getter @Component public class TaskPropertieBean { @Value("${task.file_scan_on_start:true}") //@Value("${task.fileScanOnStart:true}") private boolean fileScanOnStart; } blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
@@ -5,6 +5,7 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.basesetting.machine.service.MachineService; import org.springblade.mdm.commons.contants.RegExpConstants; import org.springblade.mdm.commons.service.ParamService; import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO; import org.springblade.mdm.machinefile.entity.FileSendRecord; @@ -31,6 +32,7 @@ import java.util.Date; import java.util.List; import java.util.Optional; import java.util.regex.Matcher; @Slf4j @Component @@ -59,10 +61,13 @@ //éææ¬ machineFile.setExceptionType(MachineFile.EXCEPTION_NOT_TEXT); }else{ ProgramNameVO progNameVO = ProgramFileNameParser.parseProgramName(machineFile.getName()); if(!progNameVO.isValidFilename()){ Matcher matcher = RegExpConstants.PROGRAM_FILE_PATTERN.matcher(machineFile.getName()); boolean filenameValid = matcher.find(); if(!filenameValid){ machineFile.setExceptionType(MachineFile.EXCEPTION_BAD_FILENAME); }else { ProgramNameVO progNameVO = ProgramFileNameParser.parseProgramName(machineFile.getName()); String prefix = progNameVO.logicProgramName()+"-"; long matchCount = allFilesInDir.stream().filter(file -> file.getName().startsWith(prefix)).count(); if(matchCount != progNameVO.getSegmentCount()){//æä»¶æ®µæ°ç¼ºå¤± blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -16,6 +16,7 @@ import org.springblade.mdm.machinefile.service.FileSendRecordService; import org.springblade.mdm.program.entity.NcProgramExchange; import org.springblade.mdm.program.mapper.NcProgramExchangeMapper; import org.springblade.mdm.program.service.programannotation.AnnotationProperties; import org.springblade.mdm.program.vo.MdmProgramImportVO; import org.springblade.mdm.utils.FileContentUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -86,15 +87,6 @@ extractZipToTempDir(tempZipFile,extractDir); //读åæä»¶ç®å½ /* BladeFile bfile = ossTemplate.putFile(file);//ä¸ä¼ ï¼ä¾åç»å ¥åºä½¿ç¨ //设置ä¸ä¸ªç¼åï¼2å°æ¶è¿æ InputStream zipFileInputStream = file.getInputStream();//test byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream); list = parseMdmZipFromByteArray(bytes); */ list = readTempDir(extractDir); } catch (IOException e) { log.error("å¯¼å ¥æ¶å¯ç½ææ¸¡æä»¶å¤±è´¥",e); @@ -109,9 +101,6 @@ Path tempPath = Paths.get(tempDir); // å建解åç®æ ç®å½ï¼å¨ä¸´æ¶ç®å½ä¸å建ä¸ä¸ªå¯ä¸åç®å½ï¼ //Path extractDir = Files.createTempDirectory(tempPath, "unzip_"); System.out.println("è§£åç®å½: " + extractDir.toString()); //Files.newInputStream(Paths.get(zipFilePath)); try (InputStream fis = Files.newInputStream(zipFilePath); ZipInputStream zis = new ZipInputStream(fis)) { @@ -161,51 +150,16 @@ return normalizePath; } /* public static List<MdmProgramImportVO> parseMdmZipFromByteArray(byte[] zipData) throws IOException { List<MdmProgramImportVO> list = new ArrayList<>(); Map<String,String> fileMd5Map = new HashMap<>(); Map<String,MdmProgramImportVO> fileDataMap = new HashMap<>(); try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData); ZipFile zipFile = new ZipFile(channel)) { ZipArchiveEntry entry; Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); while (entries.hasMoreElements()) { entry = entries.nextElement(); String entryName = entry.getName(); if (!entry.isDirectory()) { //ç´æ¥è§£æç¨åºçjsonæä»¶ } } } //设置md5å¼ fileDataMap.forEach((k,v)->{ if(fileMd5Map.containsKey(k)){ v.setMd5(fileMd5Map.get(k)); } }); return list; } */ public List<MdmProgramImportVO> readTempDir(Path extractDir) throws IOException { List<MdmProgramImportVO> list = new ArrayList<>(); List<Machine> machines = machineService.lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).list(); //List<Machine> machines = machineService.getEnableMachines(); //è¯»åæææä»¶å¤¹ //List<Path> dirs = Files.list(extractDir).filter(Files::isDirectory).toList(); try (DirectoryStream<Path> stream = Files.newDirectoryStream(extractDir)) { for (Path path : stream) { if (Files.isDirectory(path)) { // 妿æ¯åç®å½ï¼è¯»åå ¶ä¸çæä»¶ try (DirectoryStream<Path> subStream = Files.newDirectoryStream(path)) { @@ -215,8 +169,6 @@ } } } //vo.setFiles(files); } else if (Files.isRegularFile(path)) { System.out.println("æ¾å°æä»¶2: " + path); //è¿é æ¾å°çæä»¶ä¸æ¯ @@ -237,19 +189,25 @@ try (InputStream inputStream = Files.newInputStream(path, StandardOpenOption.READ)) { // 使ç¨è¾å ¥æµè¯»åæä»¶å 容 ByteArrayInputStream bas = new ByteArrayInputStream(inputStream.readAllBytes()); String line1 = FileContentUtil.readLineAt(bas,1); AnnotationProperties defAnnoProperties = AnnotationProperties.getDefault(); String sendPathLine = FileContentUtil.readLineAt(bas,defAnnoProperties.getSendPathLineIndex()); //bas.mark(0); bas.reset(); String line2 = FileContentUtil.readLineAt(bas,2); System.out.println("line1="+line1); Machine matchedMachine = null; String statusLine = FileContentUtil.readLineAt(bas,defAnnoProperties.getStatusLineIndex()); log.info("sendPathLine={}", sendPathLine); Machine matchedMachine = machineService.getMachineBySendPathAnnotation(sendPathLine); /* for (Machine machine : machines) { if(Func.isNotBlank(machine.getProgSendDir()) && line1.contains(machine.getProgSendDir())){ if(Func.isNotBlank(machine.getProgSendDir()) && sendPathLine.contains(machine.getProgSendDir())){ matchedMachine = machine; break; } } */ if (matchedMachine != null) { vo.setName(parseProgramName(vo.getFilename())); vo.setMachineCode(matchedMachine.getCode()); @@ -257,7 +215,7 @@ vo.setFullPath(path.toString());//æä»¶å°å vo.setSendPath(matchedMachine.getProgSendDir()); vo.setId(vo.getFullPath()); vo.setProgramStatus(programAnnotationService.removeAnnotation(matchedMachine.getControlSystem(),line2)); vo.setProgramStatus(programAnnotationService.removeAnnotation(matchedMachine.getControlSystem(),statusLine)); list.add(vo); } blade-service/blade-mdm/src/test/java/org/springblade/mdm/commons/contants/RegExpConstantsTest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,50 @@ package org.springblade.mdm.commons.contants; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.util.regex.Matcher; public class RegExpConstantsTest { @Test public void testFilePattern(){ Matcher m = RegExpConstants.PROGRAM_FILE_PATTERN.matcher("J_YDT290-10-02B-35-A-1-1.txt"); Assertions.assertTrue(m.find()); //é¶ç»ä»¶å¸¦æ¨ªæ ä¹åç m = RegExpConstants.PROGRAM_FILE_PATTERN.matcher("J-YDT290-10-02B-35-A-1-1.txt"); Assertions.assertTrue(m.find()); m = RegExpConstants.PROGRAM_FILE_PATTERN.matcher("O0001.TXT"); Assertions.assertFalse(m.find()); //æ æ©å±åä¹éè¦å¹é m = RegExpConstants.PROGRAM_FILE_PATTERN.matcher("J_YDT290-10-02B-35-A-1-1"); Assertions.assertTrue(m.find()); //æ å·¥åºå·æç次段 m = RegExpConstants.PROGRAM_FILE_PATTERN.matcher("J_YDT290-A-1-1.TXT"); Assertions.assertFalse(m.find()); //æ å·¥åºå·å çæ¬¡æ®µ m = RegExpConstants.PROGRAM_FILE_PATTERN.matcher("J_YDT290-1-1.TXT"); Assertions.assertFalse(m.find()); //æ æ®µæ°æ®µå· m = RegExpConstants.PROGRAM_FILE_PATTERN.matcher("J_YDT290-10-02B-35-A.TXT"); Assertions.assertFalse(m.find()); //æ®µæ°æ®µå· 缺ä¸ä¸ª m = RegExpConstants.PROGRAM_FILE_PATTERN.matcher("J_YDT290-10-02B-35-A-1.TXT"); Assertions.assertFalse(m.find()); //缺æ°å· m = RegExpConstants.PROGRAM_FILE_PATTERN.matcher("J_YDT290-10-02B-35-A-1-.TXT"); Assertions.assertFalse(m.find()); //æ°å·éæ°å m = RegExpConstants.PROGRAM_FILE_PATTERN.matcher("J_YDT290-10-02B-35-A-1-e.TXT"); Assertions.assertFalse(m.find()); } }