From 12f2fafc574afb4c534ab59244f2b954d1876e9f Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期一, 22 九月 2025 19:37:20 +0800
Subject: [PATCH] 解决回传工控网记录无法撤销的问题

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java |  160 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 140 insertions(+), 20 deletions(-)

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 63abded..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
@@ -1,11 +1,12 @@
 package org.springblade.mdm.program.service.programannotation;
 
+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;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -18,10 +19,74 @@
 	private ProgramAnnotationService programAnnotationService;
 
 	protected AnnotationProperties annotationProperties;
+	@Override
+	public InputStream putSendPathAnnotation(String sendPath, InputStream inputStream,List<DictBiz> annoDicts) throws IOException{
+		InputStream finishedStream;
+		try(inputStream){
+			ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
 
+			//1鍔犲叆鍙戦�佽矾寰勭殑娉ㄩ噴
+			String sendPathAnnotation = AnnotationUtil.generateAnnotation(sendPath,getControlSystem(),annoDicts);//鍔犱簡娉ㄩ噴涔嬪悗鐨勬枃鏈�
+
+			String sendDirLine = FileContentUtil.readLineAt(byteInputStream,annotationProperties.getSendPathLineIndex());//绗�2琛屾槸鍙戦�佽矾寰�
+			byteInputStream.reset();
+
+			if(AnnotationUtil.isAnnotation(sendDirLine,getControlSystem(),annoDicts)){
+				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);
+			}
+			finishedStream.reset();
+		}
+
+		return finishedStream;
+
+	}
+	@Override
+	public InputStream putFilenameAnnotation(String fileName, InputStream inputStream) throws IOException {
+		List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();//TODO 杩欓噷搴旇涓嶇敤鍔犺浇锛屽弬鏁颁紶杩囨潵灏辫
+		ByteArrayInputStream byteStream = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
+
+		String programNameLine = FileContentUtil.readLineAt(byteStream, annotationProperties.getProgramNameLineIndex());
+		byteStream.reset();
+		boolean isAnnotation = AnnotationUtil.isAnnotation(programNameLine,this.getControlSystem(),annoDicts);
+		InputStream insAfterProgramName;
+		//鍔犲叆绋嬪簭鍚嶆敞閲婅
+		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 insAfterProgramName;
+	}
 
 	@Override
-	public InputStream setAnnotation(AnnotationData annoData,InputStream inputStream) throws IOException {
+	public InputStream putAnnotation(AnnotationData annoData, InputStream inputStream) throws IOException {
 		List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
 
 		InputStream finishedStream;
@@ -29,31 +94,82 @@
 			ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
 
 			//1鍔犲叆鍙戦�佽矾寰勭殑娉ㄩ噴
-			String sendPathAnnotation = 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(isAnnotation(sendDirLine,getControlSystem(),annoDicts)){
-				insAfterSetSendDir = FileContentUtil.replaceAtLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
-			}else{
-				insAfterSetSendDir = FileContentUtil.insertLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
-			}
-
+			InputStream insAfterSetSendDir = putSendPathAnnotation(annoData.getSendPath(),byteInputStream,annoDicts);
+			/*
+			String statusLine = FileContentUtil.readLineAt(insAfterSetSendDir,annotationProperties.getStatusLineIndex());//鐘舵�佹敞閲�
 			insAfterSetSendDir.reset();
+
 			//鍔犲叆鐘舵�佹敞閲婅
-			String statusAnnotation = generateAnnotation(annoData.getProgramStatus(),getControlSystem(),annoDicts);//娉ㄩ噴鍚庣殑鐘舵�佹枃鏈�
-			if(isAnnotation(statusLine,getControlSystem(),annoDicts)){
-				finishedStream = FileContentUtil.replaceAtLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation);
+			InputStream insAfterStatus;
+			String statusAnnotation = AnnotationUtil.generateAnnotation(annoData.getProgramStatus(),getControlSystem(),annoDicts);//娉ㄩ噴鍚庣殑鐘舵�佹枃鏈�
+			if(AnnotationUtil.isAnnotation(statusLine,getControlSystem(),annoDicts)){
+				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
@@ -64,6 +180,10 @@
 		this.annotationProperties= annotationProperties;
 	}
 
+	@Override
+	public AnnotationProperties getAnnotationProperties(){
+		return annotationProperties;
+	}
 	public abstract String getControlSystem();
 
 }

--
Gitblit v1.9.3