From 6b7db6b11ebcc2e8e1eff86443e77fe63e5d8080 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期六, 20 九月 2025 21:38:52 +0800
Subject: [PATCH] 优化程序名解析

---
 blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/programannotation/FanucProcessorTest.java |   30 ++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/RegExpConstants.java                     |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/ProgramNameVO.java                     |    4 
 blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java                      |   11 ++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java          |   16 ++--
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java                       |   15 +++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/ProgramFileNameParser.java                          |   56 +++---------------
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml                  |    2 
 blade-service/blade-mdm/src/test/java/org/springblade/mdm/commons/contants/RegExpConstantsTest.java                 |    4 
 9 files changed, 73 insertions(+), 69 deletions(-)

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
index 73b1bc8..8900f01 100644
--- 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
@@ -7,8 +7,8 @@
 	/**
 	 * 绋嬪簭鏂囦欢鍚� 姝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]*$");
+	public static final Pattern PROGRAM_FILE_PATTERN = Pattern.compile("^([\\w\\-]+)-([0-9]+)-([0-9a-zA-Z]+)-(\\d+)-(\\d+)-?([Pp]\\d*)?(\\.*[a-zA-Z]*)$");
 
 	//public static final Pattern PROGRAM_PACKAGE_PATTERN = Pattern.compile("[\\w\\-]+\\-\\w+\\-\\w+");
-	public static final Pattern PROGRAM_PACKAGE_PATTERN = Pattern.compile("([\\w\\-]+)\\-\\w+\\-\\w+");
+	public static final Pattern PROGRAM_PACKAGE_PATTERN = Pattern.compile("([\\w\\-]+)-[0-9a-zA-Z]+-[0-9a-zA-Z]+");
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/ProgramNameVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/ProgramNameVO.java
index 3f2a342..9e5d400 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/ProgramNameVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/ProgramNameVO.java
@@ -31,9 +31,9 @@
 	private int segmentNo;
 
 	/**
-	 * 鍋忕鍗曢儴鍒嗭細 P1锛孭2绛�
+	 * 涓存椂鏇存敼鍗曢儴鍒嗭細 P1锛孭2绛�
 	 */
-	private String pldPart;
+	private String lgPart;
 
 	public String logicProgramName(){
 		return this.drawingNo+"-"+this.processNo+"-"+processEdition;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java
index 3edccd1..8e9b57f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java
@@ -81,8 +81,12 @@
 	/**
 	 * 鏂囦欢寮傚父绫诲瀷锛氭枃浠舵鏁颁笌涓嬪彂璁板綍涓嶅尮閰嶏紙杞﹀簥/鐜板満缂栧埗闄ゅ)
 	 */
-	public static final int EXCEPTION_NOT_MATCH_SEND = 3;
+	public static final int EXCEPTION_NOT_MATCH_SEND_SEG_COUNT = 4;
 
+	/**
+	 * 涓嶅尮閰嶄笅鍙戣褰曪紙璇曞垏涓嬪彂 銆� 鐜板満缂栫▼涓嬪彂锛�
+	 */
+	public static final int EXCEPTION_NOT_MATCH_RECORD = 5;
 
 	/**
 	 * 鏂囦欢鍚�
@@ -172,10 +176,11 @@
 			return "姝e父";
 		}
 		return switch (exceptionType) {
-			case 1 -> "闈炴枃鏈�";
-			case 2 -> "鏂囦欢鍚嶆牸寮忛敊璇�";
-			case 3 -> "鏂囦欢纭け";
-			case 4 -> "娈垫暟涓庝笅鍙戣褰曚笉鍖归厤";
+			case EXCEPTION_NOT_TEXT -> "闈炴枃鏈�";
+			case EXCEPTION_BAD_FILENAME -> "鏂囦欢鍚嶆牸寮忛敊璇�";
+			case EXCEPTION_LOST_FILES -> "鏂囦欢纭け";
+			case EXCEPTION_NOT_MATCH_SEND_SEG_COUNT -> "娈垫暟涓庝笅鍙戣褰曚笉鍖归厤";
+			case EXCEPTION_NOT_MATCH_RECORD -> "鏃犺褰曞尮閰�";//璇曞垏涓嬪彂锛岀幇鍦虹紪绋嬮兘涓嶅尮閰�
 			default -> "姝e父";
 		};
 	}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml
index f1a9b35..c680a65 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml
@@ -95,7 +95,7 @@
         select f.id,f.name,f.machine_code,f.file_create_time, f.file_modify_time,f.md5,f.file_size,f.exception_type,f.create_time,f.update_time
         from mdm_machine_file f join mdm_machine m on f.machine_code=m.code and m.is_deleted=0
         <where>
-            f.dir_type='REC' and f.is_deleted=0 and f.exception_type is not null and f.exception_type &lt;&gt; 0
+            f.status &lt;&gt; 4 and f.dir_type='REC' and f.is_deleted=0 and f.exception_type is not null and f.exception_type &lt;&gt; 0
 
             <if test="query.name!=null and query.name!=''">
                 and f.name like CONCAT('%', #{query.name,jdbcType=VARCHAR},'%')
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 4288c15..d27d9f4 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
@@ -93,22 +93,22 @@
 							.eq(FileSendRecord::getMachineCode,machineFile.getMachineCode())
 							.likeRight(FileSendRecord::getName,prefix).between(FileSendRecord::getCreateTime,beginTime,endTime).oneOpt();
 
+						boolean matchSendRecord;//鏂囦欢鏄惁鏈変笅鍙戣褰�
 						if(optFile.isPresent()){
+							matchSendRecord = true;
 							//纭疄涓嬪彂杩囷紝姣斿鎬绘鏁版槸鍚︾浉鍚�
 							FileSendRecord sendFile = optFile.get();
 							ProgramNameVO sendProgNameVO =  ProgramFileNameParser.parseProgramName(sendFile.getName());
 							if(progNameVO.getSegmentCount() != sendProgNameVO.getSegmentCount()){
 								//娈垫暟涓嶅尮閰嶄笅鍙戣褰�
-								excepType = MachineFile.EXCEPTION_NOT_MATCH_SEND;
+								excepType = MachineFile.EXCEPTION_NOT_MATCH_SEND_SEG_COUNT;
 							}
+						}else{
+							matchSendRecord = false;
 						}
 
-						if(excepType == MachineFile.EXCEPTION_NOT_MATCH_SEND){
-							//濡傛灉鏂囦欢鏈笅鍙戣繃锛屾煡鐪嬫槸鍚︽湁鐜板満缂栫▼璁板綍
+						if(!matchSendRecord){//濡傛灉鏂囦欢鏈笅鍙戣繃锛屾煡鐪嬫槸鍚︽湁鐜板満缂栫▼璁板綍
 							byteStream.reset();
-
-							//AnnotationProcessor processor = annoProcessHelper.getProcessor(machine.getControlSystem());
-
 							String planStatusLine = AnnotationUtil.removeAnnotation(machine.getControlSystem(),FileContentUtil.readLineAt(byteStream,annoProps.getStatusLineIndex()),programAnnotationService.getAnnotionDictList());
 
 							String lgNo;//鏇存敼鍗曞彿
@@ -127,8 +127,8 @@
 
 								.eq(ProgramOnMachine::getMachineCode,machineFile.getMachineCode()).count();
 
-							if(progOnMachineCount > 0){//鏈夌幇鍦虹紪绋嬭褰曪紝妫�鏌ラ�氳繃
-								excepType = MachineFile.EXCEPTION_OK;
+							if(progOnMachineCount == 0){//鏃犵幇鍦虹紪绋嬭褰�
+								excepType = MachineFile.EXCEPTION_NOT_MATCH_RECORD;
 							}
 
 						}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/ProgramFileNameParser.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/ProgramFileNameParser.java
index 45ac997..bdb1c7f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/ProgramFileNameParser.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/ProgramFileNameParser.java
@@ -4,9 +4,12 @@
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.tool.api.IResultCode;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.mdm.commons.contants.RegExpConstants;
 import org.springblade.mdm.flow.service.FlowProgramProperties;
 import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO;
 import org.springblade.mdm.program.service.NcNodeService;
+
+import java.util.regex.Matcher;
 
 public class ProgramFileNameParser {
 	/**
@@ -15,55 +18,18 @@
 	 */
 	public static ProgramNameVO parseProgramName(String filename){
 		ProgramNameVO pname = new ProgramNameVO();
-		int idx = filename.lastIndexOf(".");
-		String tempstr = filename.substring(0,idx);//鍘绘帀鎵╁睍鍚�
 
-		idx = tempstr.lastIndexOf("-");
+		Matcher matcher = RegExpConstants.PROGRAM_FILE_PATTERN.matcher(filename);
+		if(matcher.find()){
+			pname.setDrawingNo(matcher.group(1));
+			pname.setProcessNo(matcher.group(2));
 
-		if(idx != -1){
-
-			String segNo = tempstr.substring(idx+1);
-			int idx2 = StringUtils.indexOfIgnoreCase(segNo,"P");
-			if(idx2!= -1){
-				//甯锛屾槸鍋忕鍗曞彿
-				pname.setPldPart(segNo.substring(idx+1));
-
-				tempstr = segNo.substring(0, idx2);//鍘绘帀鍋忕鍗曢儴鍒�
-			}
-			idx = tempstr.lastIndexOf("-");
-			if(idx != -1) {
-				idx = tempstr.lastIndexOf("-");
-				pname.setSegmentNo(Func.toInt(segNo));
-
-				tempstr = tempstr.substring(0,idx);
-			}
-
-
-		}
-		idx = tempstr.lastIndexOf("-");
-		if(idx != -1){
-			String seg = tempstr.substring(idx+1);
-			pname.setSegmentCount(Func.toInt(seg));
-			tempstr = tempstr.substring(0,idx);
+			pname.setProcessEdition(matcher.group(3));
+			pname.setSegmentCount(Func.toInt(matcher.group(4)));
+			pname.setSegmentNo(Func.toInt(matcher.group(5)));
+			pname.setLgPart(matcher.group(6));
 		}
 
-		//瑙f瀽宸ュ簭鐗堟
-		idx = tempstr.lastIndexOf("-");
-		if(idx != -1){
-			String processEdition = tempstr.substring(idx+1);
-			pname.setProcessEdition(processEdition);
-			tempstr = tempstr.substring(0,idx);
-		}
-
-		//瑙f瀽宸ュ簭鍙�
-		String processNo = "";
-		idx = tempstr.lastIndexOf("-");
-		if(idx != -1){
-			processNo = tempstr.substring(idx+1);
-			tempstr = tempstr.substring(0,idx);
-		}
-		pname.setProcessNo(processNo);
-		pname.setDrawingNo(tempstr);
 		return pname;
 	}
 
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
index 96ebacf..863986d 100644
--- 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
@@ -65,12 +65,12 @@
 		Assertions.assertTrue(m.find());
 
 
-		m = RegExpConstants.PROGRAM_PACKAGE_PATTERN.matcher("CP3X296-A-B");
+		m = RegExpConstants.PROGRAM_PACKAGE_PATTERN.matcher("C_P3X296-A-B");
 
 		String drawingNo = null;
 		if(m.find()) {
 			drawingNo = m.group(1);
-			Assertions.assertEquals("CP3X296",drawingNo );
+			Assertions.assertEquals("C_P3X296",drawingNo );
 		}
 
 		String processNo = null;
diff --git a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/programannotation/FanucProcessorTest.java b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/programannotation/FanucProcessorTest.java
new file mode 100644
index 0000000..e173b18
--- /dev/null
+++ b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/programannotation/FanucProcessorTest.java
@@ -0,0 +1,30 @@
+package org.springblade.mdm.program.service.programannotation;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.regex.Pattern;
+
+public class FanucProcessorTest {
+
+	@Test
+	public void testMatchOline(){
+
+		boolean oMatched = FanucProcessor.PATTERN.matcher("O1234(A-1)").matches();
+		Assertions.assertTrue(oMatched);
+
+		oMatched = FanucProcessor.PATTERN.matcher("O1234").matches();
+		Assertions.assertTrue(oMatched);
+
+	}
+
+	@Test
+	public void testGenProgramNameLine(){
+		FanucProcessor p = new FanucProcessor();
+		String newLine = p.genProgramNameLine("O1234","(A-1)");
+		Assertions.assertEquals("O1234(A-1)", newLine);
+
+		newLine = p.genProgramNameLine("O1001(MY zhushi)","(A-1)");
+		Assertions.assertEquals("O1001(A-1)", newLine);
+	}
+}
diff --git a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java
index c6bff09..ec5904e 100644
--- a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java
+++ b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java
@@ -8,15 +8,18 @@
 
 	@Test
 	public void testParseProgramName() {
-		String fname = "CP1-1-1-A-2-1.txt";
+		String fname = "CP1-1-1-A-2-1-P1.txt";
 
 		ProgramNameVO vo = ProgramFileNameParser.parseProgramName(fname);
+		Assertions.assertEquals("CP1-1",vo.getDrawingNo());
+		Assertions.assertEquals("1",vo.getProcessNo());
+		Assertions.assertEquals("A",vo.getProcessEdition());
 		Assertions.assertEquals(2,vo.getSegmentCount());
 		Assertions.assertEquals(1,vo.getSegmentNo());
-		Assertions.assertEquals("A",vo.getProcessEdition());
 
-		Assertions.assertEquals("1",vo.getProcessNo());
-		Assertions.assertEquals("CP1-1",vo.getDrawingNo());
+		Assertions.assertEquals("P1",vo.getLgPart());
+
+
 
 		fname = "T-9-B-5-3.txt";
 		vo = ProgramFileNameParser.parseProgramName(fname);

--
Gitblit v1.9.3