From fe5370f0b107736fd41de699612f021969bc954f Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期六, 20 九月 2025 02:10:10 +0800
Subject: [PATCH] 优化程序注释

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveService.java                                  |   84 ++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java                   |    1 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java         |  130 ++++++++++++++----
 blade-service/blade-mdm/src/test/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckServiceTest.java             |   16 ++
 doc/sql/mdm/mdm.mysql.all.create.sql                                                                                       |   40 +++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java                                     |   16 -
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java                 |   42 +++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirCheckTask.java                                    |    5 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessorHelper.java |   29 ++++
 9 files changed, 311 insertions(+), 52 deletions(-)

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 dbaaab2..ba05c3c 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
@@ -1,8 +1,10 @@
 package org.springblade.mdm.machinefile.service;
 
+import com.qiniu.util.IOUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.mdm.basesetting.machine.entity.Machine;
 import org.springblade.mdm.basesetting.machine.service.MachineService;
 import org.springblade.mdm.commons.contants.RegExpConstants;
@@ -10,9 +12,10 @@
 import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO;
 import org.springblade.mdm.machinefile.entity.FileSendRecord;
 import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.program.entity.ProgramOnMachine;
 import org.springblade.mdm.program.service.ProgramAnnotationService;
 import org.springblade.mdm.program.service.ProgramOnMachineService;
-import org.springblade.mdm.program.service.programannotation.AnnotationUtil;
+import org.springblade.mdm.program.service.programannotation.*;
 import org.springblade.mdm.utils.FileContentUtil;
 import org.springblade.mdm.utils.ProgramFileNameParser;
 import org.springblade.system.pojo.entity.DictBiz;
@@ -21,10 +24,7 @@
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -46,6 +46,11 @@
 	private ProgramOnMachineService programOnMachineService;
 	@Autowired
 	private FileSendRecordService fileSendRecordService;
+	@Autowired
+	private AnnotationProcessorHelper annoProcessHelper;
+	@Autowired
+	private ProgramAnnotationService programAnnotationService;
+
 	/**
 	 * 鏂囦欢鍚堟硶鎬ф鏌�
 	 * @param machineFile
@@ -59,9 +64,12 @@
 		if(!checkFilePath.toFile().exists()){
 			return;
 		}
+
+		AnnotationProperties annoProps = AnnotationProperties.getDefault();
 		try(InputStream fileIns = Files.newInputStream(checkFilePath);) {
 			int excepType = MachineFile.EXCEPTION_OK;
-			if(!FileContentUtil.isTextFile(fileIns)){
+			ByteArrayInputStream byteStream = new ByteArrayInputStream(IOUtils.toByteArray(fileIns));
+			if(!FileContentUtil.isTextFile(byteStream)){
 				//闈炴枃鏈�
 				excepType = MachineFile.EXCEPTION_NOT_TEXT;
 			}else{
@@ -94,6 +102,28 @@
 								excepType = MachineFile.EXCEPTION_NOT_MATCH_SEND;
 							}
 						}
+
+						if(excepType == MachineFile.EXCEPTION_NOT_MATCH_SEND){
+							//濡傛灉鏂囦欢鏈笅鍙戣繃锛屾煡鐪嬫槸鍚︽湁鐜板満缂栫▼璁板綍
+							byteStream.reset();
+
+							//AnnotationProcessor processor = annoProcessHelper.getProcessor(machine.getControlSystem());
+							String lgLine = FileContentUtil.readLineAt(byteStream,annoProps.getDeviationLineIndex());
+							String textWithoutAnno = AnnotationUtil.removeAnnotation(machine.getControlSystem(),lgLine,programAnnotationService.getAnnotionDictList());
+							String[] strArr = Func.split(textWithoutAnno,":");//涓存椂鏇存敼鍗曟槸鍐掑彿鍒嗛殧锛屽悗闈㈡槸鍗曞彿
+							long progOnMachineCount = programOnMachineService.lambdaQuery()
+								.eq(ProgramOnMachine::getDrawingNo,progNameVO.getDrawingNo())
+								.eq(ProgramOnMachine::getProcessNo,progNameVO.getProcessNo())
+								.eq(ProgramOnMachine::getProcessEdition,progNameVO.getProcessEdition())
+								.eq(strArr.length==2,ProgramOnMachine::getDeviation,strArr[1])//涓存椂鏇存敼鍗曞尮閰�
+
+								.eq(ProgramOnMachine::getMachineCode,machineFile.getMachineCode()).count();
+
+							if(progOnMachineCount > 0){//鏈夌幇鍦虹紪绋嬭褰曪紝妫�鏌ラ�氳繃
+								excepType = MachineFile.EXCEPTION_OK;
+							}
+
+						}
 					}
 				}
 			}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
index 366d803..463a443 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -130,6 +130,7 @@
 				annoData.setProgramStatus(status);
 				annoData.setDeviation(programPackageNode.getDeviation());
 				annoData.setFilename(programFile.getName());
+
 				InputStream addedInsFinal = annoProcessor.putAnnotation(annoData,inputStream);
 				addedInsFinal.reset();
 				/*
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java
index efe0466..7933d98 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java
@@ -2,6 +2,7 @@
 
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springblade.mdm.program.service.ProgramAnnotationService;
 import org.springblade.mdm.utils.FileContentUtil;
 import org.springblade.system.pojo.entity.DictBiz;
@@ -31,7 +32,15 @@
 			byteInputStream.reset();
 
 			if(AnnotationUtil.isAnnotation(sendDirLine,getControlSystem(),annoDicts)){
-				finishedStream = FileContentUtil.replaceAtLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
+				String planText = AnnotationUtil.removeAnnotation(getControlSystem(),sendDirLine,annoDicts);
+				if(!planText.equals(sendPath)) {
+					//闈炶矾寰勭殑娉ㄩ噴锛屾彃鍏�
+					finishedStream = FileContentUtil.insertLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
+				}else{
+					//鏄矾寰勶紝涓嶅鐞嗙洿鎺ヨ繑鍥炲師杈撳叆娴�
+					finishedStream = inputStream;
+				}
+				//finishedStream = FileContentUtil.replaceAtLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
 			}else{
 				finishedStream = FileContentUtil.insertLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
 			}
@@ -43,21 +52,37 @@
 	}
 	@Override
 	public InputStream putFilenameAnnotation(String fileName, InputStream inputStream) throws IOException {
-		List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
-		ByteArrayInputStream bais = new ByteArrayInputStream(com.qiniu.util.IOUtils.toByteArray(inputStream));
+		List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();//TODO 杩欓噷搴旇涓嶇敤鍔犺浇锛屽弬鏁颁紶杩囨潵灏辫
+		ByteArrayInputStream byteStream = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
 
-		String line = FileContentUtil.readLineAt(bais, annotationProperties.getProgramNameLineIndex());
-		bais.reset();
-		boolean isAnnotation = AnnotationUtil.isAnnotation(line,this.getControlSystem(),annoDicts);
-		InputStream insAfter;
+		String programNameLine = FileContentUtil.readLineAt(byteStream, annotationProperties.getProgramNameLineIndex());
+		byteStream.reset();
+		boolean isAnnotation = AnnotationUtil.isAnnotation(programNameLine,this.getControlSystem(),annoDicts);
+		InputStream insAfterProgramName;
 		//鍔犲叆绋嬪簭鍚嶆敞閲婅
-		String proNameLine =  AnnotationUtil.generateAnnotation(FilenameUtils.removeExtension(fileName),getControlSystem(),annoDicts);
+		String proNameAnnotation =  AnnotationUtil.generateAnnotation(FilenameUtils.removeExtension(fileName),getControlSystem(),annoDicts);
+
+		if(isAnnotation){//鏄敞閲�
+			//鎻愬彇娉ㄩ噴鍐呮枃瀛�
+			//String planText = AnnotationUtil.removeAnnotation(getControlSystem(),programNameline,annoDicts);
+			if(!StringUtils.equals(programNameLine,proNameAnnotation)) {
+				//娉ㄩ噴涓嶆槸绋嬪簭鍚嶏紙宸ヨ壓鍛樿嚜宸卞啓鐨勬敞閲婏級锛屾彃鍏�
+				insAfterProgramName = FileContentUtil.insertLine(byteStream,annotationProperties.getProgramNameLineIndex(),proNameAnnotation);
+			}else{
+				//鏄▼搴忓悕娉ㄩ噴锛屼笉澶勭悊锛岃繑鍥炲師stream
+				insAfterProgramName =  byteStream;
+			}
+		}else{
+			//闈炴敞閲婏紝鎻掑叆鐘舵��
+			insAfterProgramName = FileContentUtil.insertLine(byteStream,annotationProperties.getProgramNameLineIndex(),proNameAnnotation);
+		}
+		/*
 		if(isAnnotation){
 			insAfter = FileContentUtil.replaceAtLine(bais, annotationProperties.getProgramNameLineIndex(),proNameLine);
 		}else{
 			insAfter = FileContentUtil.insertLine(bais, annotationProperties.getProgramNameLineIndex(),proNameLine);
-		}
-		return insAfter;
+		}*/
+		return insAfterProgramName;
 	}
 
 	@Override
@@ -69,41 +94,84 @@
 			ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
 
 			//1鍔犲叆鍙戦�佽矾寰勭殑娉ㄩ噴
-			/*
-			String sendPathAnnotation = AnnotationUtil.generateAnnotation(annoData.getSendPath(),getControlSystem(),annoDicts);//鍔犱簡娉ㄩ噴涔嬪悗鐨勬枃鏈�
-
-			String sendDirLine = FileContentUtil.readLineAt(byteInputStream,annotationProperties.getSendPathLineIndex());//绗�2琛屾槸鍙戦�佽矾寰�
-			byteInputStream.reset();
-			String statusLine = FileContentUtil.readLineAt(byteInputStream,annotationProperties.getStatusLineIndex());//鐘舵�佹敞閲�
-			byteInputStream.reset();
-
-			InputStream insAfterSetSendDir ;
-			if(AnnotationUtil.isAnnotation(sendDirLine,getControlSystem(),annoDicts)){
-				insAfterSetSendDir = FileContentUtil.replaceAtLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
-			}else{
-				insAfterSetSendDir = FileContentUtil.insertLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
-			}
-
-			insAfterSetSendDir.reset();
-			*/
-
 			InputStream insAfterSetSendDir = putSendPathAnnotation(annoData.getSendPath(),byteInputStream,annoDicts);
-
+			/*
 			String statusLine = FileContentUtil.readLineAt(insAfterSetSendDir,annotationProperties.getStatusLineIndex());//鐘舵�佹敞閲�
 			insAfterSetSendDir.reset();
 
 			//鍔犲叆鐘舵�佹敞閲婅
+			InputStream insAfterStatus;
 			String statusAnnotation = AnnotationUtil.generateAnnotation(annoData.getProgramStatus(),getControlSystem(),annoDicts);//娉ㄩ噴鍚庣殑鐘舵�佹枃鏈�
 			if(AnnotationUtil.isAnnotation(statusLine,getControlSystem(),annoDicts)){
-				finishedStream = FileContentUtil.replaceAtLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation);
+				insAfterStatus = FileContentUtil.replaceAtLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation);
 			}else{
-				finishedStream = FileContentUtil.insertLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation);
+				insAfterStatus = FileContentUtil.insertLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation);
+			}*/
+			InputStream insAfterStatus = putStatusAnnotation(annoData.getProgramStatus(),insAfterSetSendDir,annoDicts);
+
+			if(StringUtils.isNotBlank(annoData.getDeviation())){
+				finishedStream = putDeviationAnnotation(annoData.getDeviation(),insAfterStatus,annoDicts);
+			}else{
+				//鏄洿鏀瑰崟鍙凤紝涓嶅鐞嗙洿鎺ヨ繑鍥炲師杈撳叆娴�
+				finishedStream = insAfterStatus;
 			}
 		}
 
 		return finishedStream;
 	}
 
+	protected InputStream putStatusAnnotation(String status,InputStream inputStream,List<DictBiz> annoDicts) throws IOException {
+		InputStream insAfterStatus;
+		//鍔犲叆lg鍗曞彿
+
+		String statusLine = FileContentUtil.readLineAt(inputStream,annotationProperties.getStatusLineIndex());//鐘舵�佹敞閲�
+		String stationAnnotation = AnnotationUtil.generateAnnotation(status,getControlSystem(),annoDicts);
+
+		inputStream.reset();
+		if(AnnotationUtil.isAnnotation(statusLine,getControlSystem(),annoDicts) ){
+			//鏄敞閲�
+			//鎻愬彇娉ㄩ噴鍐呮枃瀛�
+			String planText = AnnotationUtil.removeAnnotation(getControlSystem(),statusLine,annoDicts);
+			if(!StringUtils.equalsAny(planText,AnnotationUtil.SQ,AnnotationUtil.GH,AnnotationUtil.LG)) {
+				//娉ㄩ噴涓嶆槸鐘舵�侊紙宸ヨ壓鍛樿嚜宸卞啓鐨勬敞閲婏級锛屾彃鍏�
+				insAfterStatus = FileContentUtil.insertLine(inputStream,annotationProperties.getStatusLineIndex(),stationAnnotation);
+			}else{
+				//鏄姸鎬佹敞閲婏紝鏇挎崲
+				insAfterStatus =  FileContentUtil.replaceAtLine(inputStream,annotationProperties.getStatusLineIndex(),stationAnnotation);
+			}
+		}else{
+			//闈炴敞閲婏紝鎻掑叆鐘舵��
+			insAfterStatus = FileContentUtil.insertLine(inputStream,annotationProperties.getStatusLineIndex(),stationAnnotation);
+		}
+		return insAfterStatus;
+	}
+
+	protected InputStream putDeviationAnnotation(String deviation,InputStream inputStream,List<DictBiz> annoDicts) throws IOException {
+		InputStream insAfter1;
+		//鍔犲叆lg鍗曞彿
+		String devLine = FileContentUtil.readLineAt(inputStream,annotationProperties.getDeviationLineIndex());//鐘舵�佹敞閲�
+
+		String devAnnotation = AnnotationUtil.generateAnnotation(deviation,getControlSystem(),annoDicts);
+
+		inputStream.reset();
+		if(AnnotationUtil.isAnnotation(devLine,getControlSystem(),annoDicts) ){
+			//鏄敞閲�
+			//鎻愬彇娉ㄩ噴鍐呮枃瀛�
+			String planText = AnnotationUtil.removeAnnotation(getControlSystem(),devLine,annoDicts);
+			if(!planText.equals(deviation)) {
+				//娉ㄩ噴涓嶆槸涓存椂鏇存敼鍗曞彿锛堝伐鑹哄憳鑷繁鍐欑殑娉ㄩ噴锛夛紝鎻掑叆
+				insAfter1 = FileContentUtil.insertLine(inputStream,annotationProperties.getDeviationLineIndex(),devAnnotation);
+			}else{
+				//鏄洿鏀瑰崟鍙凤紝涓嶅鐞嗙洿鎺ヨ繑鍥炲師杈撳叆娴�
+				insAfter1 = inputStream;
+			}
+		}else{
+			//闈炴敞閲婏紝鎬庢彃鍏g鍙�
+			insAfter1 = FileContentUtil.insertLine(inputStream,annotationProperties.getDeviationLineIndex(),devAnnotation);
+		}
+		return insAfter1;
+	}
+
 	@Override
 	public abstract void setControlSystem(String controlSystemDictVal) ;
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessorHelper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessorHelper.java
new file mode 100644
index 0000000..1e0d3af
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessorHelper.java
@@ -0,0 +1,29 @@
+package org.springblade.mdm.program.service.programannotation;
+
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 璐熻矗鍒囨崲鍚堥�傜殑娉ㄩ噴澶勭悊鍣�
+ */
+@Component
+public class AnnotationProcessorHelper {
+	@Autowired
+	private MachineAnnotationConfig annotationConfig;
+
+	public AnnotationProcessor getProcessor(String controlSystem){
+		AnnotationProperties props = annotationConfig.getConfigMap().get(controlSystem);
+		AnnotationProcessor processor;
+		if(props != null){
+			processor = SpringUtil.getBean(props.getBeanId());
+			processor.setAnnotationProperties(props);
+
+		}else{
+			processor = SpringUtil.getBean(DefaultProcessor.class);
+			processor.setAnnotationProperties(AnnotationProperties.getDefault());
+		}
+		processor.setControlSystem(controlSystem);
+		return processor;
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirCheckTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirCheckTask.java
index 7e2529f..9238e90 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirCheckTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirCheckTask.java
@@ -47,6 +47,9 @@
 	@Autowired
 	private ReceiveFileCheckService receiveFileCheckService;
 
+	@Autowired
+	private ReceiveDirMoveService receiveDirMoveService;
+
 	// 姣�5绉掓墽琛屼竴娆�
 	//@Scheduled(fixedRate = 1000000)
 	//@Scheduled(cron = "0 1 0 * * ?") // 姣忓ぉ涓婂崍0鐐�1鍒嗘墽琛�
@@ -62,6 +65,8 @@
 			log.info("reccheckfile start");
 			checkFiles();
 
+			//妫�鏌ュ畬鎴愶紝鐩存帴绉诲姩鏃犲紓甯哥殑鏂囦欢
+			receiveDirMoveService.moveValidateFiles();
 			log.info("reccheckfile end");
 		}
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveService.java
new file mode 100644
index 0000000..69aec02
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveService.java
@@ -0,0 +1,84 @@
+package org.springblade.mdm.task;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
+import org.springblade.mdm.commons.service.ParamService;
+import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.machinefile.service.MachineFileService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 鏈哄簥鍥炰紶鏂囦欢澶箁ec锛岀洰褰曟枃浠惰秴杩囨満搴婅瀹氱殑鏃堕棿绉诲姩鍒皌emp鏂囦欢澶�
+ */
+@Slf4j
+@Component
+@EnableScheduling
+public class ReceiveDirMoveService {
+	@Autowired
+	private MachineFileService machineFileService;
+	@Autowired
+	private MachineService machineService;
+
+
+	/**
+	 * 鎵弿鏁版嵁搴撹褰曪紝瓒呮椂鍒欑Щ鍔ㄦ枃浠�
+	 */
+	public void moveValidateFiles() {
+		List<Machine> machines = machineService.getEnableMachines();
+		LocalDateTime now = LocalDateTime.now();
+		for (Machine machine : machines) {
+
+			//LocalDateTime earlyTime = now.minusHours(remainHours);
+			List<MachineFile> pendingFiles = this.machineFileService.lambdaQuery()
+				.eq(MachineFile::getDirType,MachineFile.DIR_TYPE_REC)
+				.eq(MachineFile::getExceptionType,MachineFile.EXCEPTION_OK)
+				.eq(MachineFile::getMachineCode,machine.getCode()).list();
+
+
+			for(MachineFile overTimeFile : pendingFiles){
+				try {
+					moveFileToTemp(overTimeFile, machine);
+				}catch(Exception e){
+					log.error("绉诲姩rec鏂囦欢澶辫触:{}",overTimeFile.getName(),e);
+				}
+			}
+
+		}
+
+	}
+
+	/**
+	 * 鏂囦欢绉诲姩鍒皌emp
+	 * @param overTimeFile
+	 */
+	private void moveFileToTemp(MachineFile overTimeFile,Machine machine) throws IOException {
+		String srcFilepath = MachineFileService.getBasePath(machine,overTimeFile.getDirType())+ File.separator+overTimeFile.getName();
+		Path source = Paths.get(srcFilepath);
+		if(!source.toFile().exists()){
+			return;
+		}
+		String targetFilepath = MachineFileService.getBasePath(machine,MachineFile.DIR_TYPE_TEMP)+ File.separator+overTimeFile.getName();
+		Path target = Paths.get(targetFilepath);
+
+		Path targetDir = target.getParent();
+		if (targetDir != null && !Files.exists(targetDir)) {
+			Files.createDirectories(targetDir);
+		}
+
+		// 浣跨敤 REPLACE_EXISTING 閫夐」鏉ヨ鐩栧凡瀛樺湪鐨勬枃浠�
+		Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java
index 935f938..b8ec344 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java
@@ -38,7 +38,8 @@
 	 */
 	private static final int DEFAULT_HOUR = 0;
 
-	@Scheduled(cron = "${task.cron.machine_rec_move:0 3 * * * ?}")
+	//@Scheduled(cron = "${task.cron.machine_rec_move:0 3 * * * ?}")
+	/*
 	public void execute() {
 		String networkType = paramService.getParamValue(ParamService.NETWORK_TYPE,ParamService.NETWORK_TYPE_SHEMI);
 
@@ -49,17 +50,13 @@
 
 	}
 
-	/**
-	 * 鎵弿鏁版嵁搴撹褰曪紝瓒呮椂鍒欑Щ鍔ㄦ枃浠�
-	 */
+
 	public void moveValidateFiles() {
 		List<Machine> machines = machineService.getEnableMachines();
 		LocalDateTime now = LocalDateTime.now();
 		for (Machine machine : machines) {
 			int remainHours = machine.getReceiveDirExpiryHours() != null ?machine.getReceiveDirExpiryHours():DEFAULT_HOUR;
-			/*if(remainHours == 0){
-				continue;
-			}*/
+
 			//LocalDateTime earlyTime = now.minusHours(remainHours);
 			List<MachineFile> pendingFiles = this.machineFileService.lambdaQuery()
 				.eq(MachineFile::getDirType,MachineFile.DIR_TYPE_REC)
@@ -79,10 +76,6 @@
 
 	}
 
-	/**
-	 * 鏂囦欢绉诲姩鍒皌emp
-	 * @param overTimeFile
-	 */
 	private void moveFileToTemp(MachineFile overTimeFile,Machine machine) throws IOException {
 		String srcFilepath = MachineFileService.getBasePath(machine,overTimeFile.getDirType())+ File.separator+overTimeFile.getName();
 		Path source = Paths.get(srcFilepath);
@@ -100,4 +93,5 @@
 		// 浣跨敤 REPLACE_EXISTING 閫夐」鏉ヨ鐩栧凡瀛樺湪鐨勬枃浠�
 		Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
 	}
+	*/
 }
diff --git a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckServiceTest.java b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckServiceTest.java
new file mode 100644
index 0000000..3094aea
--- /dev/null
+++ b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckServiceTest.java
@@ -0,0 +1,16 @@
+package org.springblade.mdm.machinefile.service;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springblade.core.tool.utils.Func;
+
+public class ReceiveFileCheckServiceTest {
+	@Test
+	public void testSplie(){
+		String[] arr = Func.split("LG",":");
+		Assertions.assertEquals(1, arr.length);
+
+		arr = Func.split(null,":");
+		Assertions.assertEquals(0, arr.length);
+	}
+}
diff --git a/doc/sql/mdm/mdm.mysql.all.create.sql b/doc/sql/mdm/mdm.mysql.all.create.sql
index 061cd61..c20ab48 100644
--- a/doc/sql/mdm/mdm.mysql.all.create.sql
+++ b/doc/sql/mdm/mdm.mysql.all.create.sql
@@ -21,7 +21,7 @@
   `tenant_id` varchar(6) DEFAULT NULL COMMENT '鎵�灞炵鎴�',
   `code` varchar(100) NOT NULL COMMENT '鏈哄簥缂栧彿',
   `name` varchar(100) NOT NULL COMMENT '鏈哄簥鎻忚堪/鍨嬪彿',
-  `avatar` varchar(400) DEFAULT NULL COMMENT '鍥剧墖鍦板潃',
+  `equipment_code` varchar(100) DEFAULT NULL COMMENT '璁惧缂栧彿',
   `machine_group_code` varchar(255) NOT NULL COMMENT '鎵�灞炴満搴婄粍浠g爜锛�,鍦ㄤ笟鍔″瓧鍏搁厤缃紙key=machine_group锛�',
   `machine_spec` varchar(40) DEFAULT NULL COMMENT '鏈哄櫒瑙勬牸:01杞﹀簥/02閾e簥,鍦ㄤ笟鍔″瓧鍏搁厤缃紙key=machine_spec锛�',
   `operator` varchar(100)  COMMENT '鎿嶄綔鍛橈紝鏂囨湰褰曞叆',
@@ -202,6 +202,7 @@
    `process_name` varchar(20) NULL COMMENT '宸ュ簭鍚嶇О',
    `process_no` varchar(100) NULL COMMENT '宸ュ簭鍙�',
    `machine_code` varchar(100) DEFAULT NULL COMMENT '璁惧缂栧彿/鏈哄簥缂栧彿',
+   `equipment_code` varchar(100) DEFAULT NULL COMMENT '璁惧缂栧彿',
    `drawing_no` varchar(100) NULL COMMENT '闆剁粍浠剁紪鍙�/鍥惧彿',
    `process_edition` varchar(40) DEFAULT NULL COMMENT '宸ュ簭鐗堟锛屽崌鐗堝氨鏄彉鏇存敼璇ュ瓧娈碉紝闇�瑕佷繚鐣欏巻鍙茶褰�',
    `craft_edition` varchar(40) DEFAULT NULL COMMENT '宸ヨ壓鐗堟',
@@ -211,7 +212,8 @@
    `err_msg` varchar(200) NULL COMMENT '閿欒鎴栬�呮彁绀轰俊鎭�',
    `process_instance_id` varchar(64) NULL COMMENT '鍏宠仈鐨勬祦绋嬪疄渚媔d锛屾祦绋嬪彂璧峰悗濉厖',
    `program_no` varchar(20) NULL COMMENT '鏁版帶绋嬪簭缂栧彿锛屾祦绋嬪彂璧峰悗濉厖',
-   `mes_task_id` varchar(100) NULL COMMENT 'MES浠诲姟鍞竴鏍囪瘑',
+   `operation_id` varchar(100) NULL COMMENT '宸ュ簭鍞竴鐮�(MES鍙戦��)',
+   `process_card` varchar(40) NULL COMMENT '杩囩▼鍗″彿锛坢es鎻愪緵锛�',
    `inspector` varchar(40) NULL COMMENT '妫�楠屽憳锛坢es鎻愪緵锛�',
    `check_time` datetime DEFAULT NULL COMMENT '妫�楠屾椂闂�',
    `operator` varchar(40) NULL COMMENT '鎿嶄綔鑰咃紙mes鎻愪緵锛�',
@@ -385,8 +387,6 @@
     PRIMARY KEY (`id`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='宸ユ帶缃戞満搴婃枃浠朵慨鏀瑰巻鍙�';
 
-
-
 DROP TABLE IF EXISTS `mdm_file_send_record`;
 CREATE TABLE `mdm_file_send_record` (
     `id` bigint NOT NULL,
@@ -420,3 +420,35 @@
    PRIMARY KEY (`drawing_no`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='闆剁粍浠跺彿涓嬫媺鏁版嵁';
 
+
+DROP TABLE IF EXISTS `mdm_program_on_machine`;
+CREATE TABLE `mdm_program_on_machine` (
+    `id` bigint NOT NULL,
+    `tenant_id` varchar(6) DEFAULT NULL COMMENT '鎵�灞炵鎴�',
+    `drawing_no` varchar(100) NULL COMMENT '闆剁粍浠剁紪鍙�/鍥惧彿',
+    `process_no` varchar(100) NULL COMMENT '宸ュ簭鍙�',
+    `process_edition` varchar(40) DEFAULT NULL COMMENT '宸ュ簭鐗堟',
+    `machine_code` varchar(100) DEFAULT NULL COMMENT '璁惧缂栧彿/鏈哄簥缂栧彿',
+    `process_instance_id` varchar(64) DEFAULT NULL COMMENT '娴佺▼瀹炰緥id',
+    `status` int DEFAULT NULL COMMENT '涓氬姟鐘舵��',
+    `create_dept` bigint DEFAULT NULL COMMENT '鍒涘缓鍗曚綅',
+    `is_deleted` int DEFAULT NULL,
+    `create_time` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+    `create_user` bigint DEFAULT NULL COMMENT '鍒涘缓浜�',
+    `update_time` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+    `update_user` bigint DEFAULT NULL COMMENT '鏇存柊浜�',
+    PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='鐜板満缂栫▼璁板綍';
+
+DROP TABLE IF EXISTS `mdm_mes_sync`;
+CREATE TABLE `mdm_mes_sync` (
+    `id` bigint NOT NULL,
+    `operation_id` varchar(100) NULL COMMENT '宸ュ簭鍞竴鐮�',
+    `program_no` varchar(100) NOT NULL COMMENT '绋嬪簭缂栧彿',
+    `cured_time` datetime NOT NULL COMMENT '鍥哄寲鏃堕棿',
+    `try_times` int NOT NULL DEFAULT 0 COMMENT '閲嶈瘯娆℃暟',
+    `status` int NOT NULL COMMENT '鐘舵�侊細1:鍒濆鍏ュ簱; 2:鍚屾鎴愬姛;3:鍚屾澶辫触',
+    `create_time` datetime NOT NULL COMMENT '鍒涘缓鏃堕棿',
+    `update_time` datetime NOT NULL COMMENT '鏇存柊鏃堕棿',
+    PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='鍚慚ES鍥炰紶鏁版嵁';

--
Gitblit v1.9.3