From ee6af8dff591418168d5104d281a6f0bf3c961e8 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期三, 17 九月 2025 20:48:48 +0800
Subject: [PATCH] 现场编制功能适配

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/RegExpConstants.java            |   11 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java                             |   11 ++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java  |    4 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java |    9 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/TaskPropertieBean.java                    |   13 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java     |   70 ++++------------------
 blade-service/blade-mdm/src/test/java/org/springblade/mdm/commons/contants/RegExpConstantsTest.java        |   50 ++++++++++++++++
 7 files changed, 107 insertions(+), 61 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java
index 5eadaf6..5b8ad77 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java
+++ b/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;
+		}
 		//鍘绘帀棣栦綅鎷彿锛屾帓闄ゅ彂閭g鏈哄簥娉ㄩ噴
 		String sendPath = escapeSqlWildcard(StringUtils.trim(StringUtils.removeEnd(StringUtils.removeStart(sendPathLine,"("),")")));
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/RegExpConstants.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/RegExpConstants.java
new file mode 100644
index 0000000..01635f9
--- /dev/null
+++ b/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 {
+
+	/**
+	 * 绋嬪簭鏂囦欢鍚� 姝e垯
+	 */
+	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]*$");
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
index da959cb..671c44d 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
+++ b/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("宸ユ帶缃戝惎鍔ㄦ枃浠剁洃鎺�");
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/TaskPropertieBean.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/TaskPropertieBean.java
new file mode 100644
index 0000000..a50f3e5
--- /dev/null
+++ b/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;
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
index 0052fa3..fb4fa33 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
+++ b/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()){//鏂囦欢娈垫暟缂哄け
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
index ca948ba..d34603f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
+++ b/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);
 
 		// 鍒涘缓瑙e帇鐩爣鐩綍锛堝湪涓存椂鐩綍涓嬪垱寤轰竴涓敮涓�瀛愮洰褰曪級
-		//Path extractDir = Files.createTempDirectory(tempPath, "unzip_");
-		System.out.println("瑙e帇鐩綍: " + 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()) {
-					//鐩存帴瑙f瀽绋嬪簭鐨刯son鏂囦欢
-
-
-				}
-
-			}
-
-		}
-		//璁剧疆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);
 						}
diff --git a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/commons/contants/RegExpConstantsTest.java b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/commons/contants/RegExpConstantsTest.java
new file mode 100644
index 0000000..9c76b11
--- /dev/null
+++ b/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());
+	}
+}

--
Gitblit v1.9.3