From 4c7296d45efe849dc70a3b2e2240c905481a91c9 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期一, 29 九月 2025 17:44:46 +0800
Subject: [PATCH] 工控网涉密网联调

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java |   71 ++++++++++++++++++++++++++++++++++-
 1 files changed, 68 insertions(+), 3 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java
index 26edd95..cf0bcba 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java
@@ -1,29 +1,94 @@
 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;
 import java.io.InputStream;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 
 @Component("defaultProcessor")
 public class DefaultProcessor extends AbstractProcessor{
 
-	@Autowired
-	private ProgramAnnotationService programAnnotationService;
+	//@Autowired
+	//private ProgramAnnotationService programAnnotationService;
 	private String controlSystem;
 
 
 	@Override
 	public InputStream putAnnotation(AnnotationData annoData, InputStream inputStream) throws IOException {
-		InputStream insAfter = super.putFilenameAnnotation(annoData.getFilename(),inputStream);
+		InputStream insAfter = putFilenameAnnotation(annoData.getFilename(),inputStream);
 
 		return super.putAnnotation(annoData, insAfter);
 
 	}
 
+	@Override
+	public InputStream putFilenameAnnotation(String fileName, InputStream inputStream) throws IOException {
+		List<DictBiz> annoDicts = getAnnotationDictList();
+		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 programNameStr = genProgramNameText(FilenameUtils.removeExtension(fileName));
+
+		String proNameAnnotation =  AnnotationUtil.generateAnnotation(programNameStr,getControlSystem(),annoDicts);
+
+		if(isAnnotation){//鏄敞閲�
+			//鎻愬彇娉ㄩ噴鍐呮枃瀛�
+			String programName = FilenameUtils.removeExtension(fileName);
+			String progNameLineWithoutAnno = AnnotationUtil.removeAnnotation(this.getControlSystem(),programNameLine,annoDicts);
+			if(!isCurrentProgramNameAnnotation(progNameLineWithoutAnno,programName)) {
+				//娉ㄩ噴涓嶆槸绋嬪簭鍚嶏紙宸ヨ壓鍛樿嚜宸卞啓鐨勬敞閲婏級锛屾彃鍏�
+				insAfterProgramName = FileContentUtil.insertLine(byteStream,annotationProperties.getProgramNameLineIndex(),proNameAnnotation);
+			}else{
+				//鏄▼搴忓悕娉ㄩ噴锛屼笉澶勭悊锛岃繑鍥炲師stream
+				insAfterProgramName =  byteStream;
+			}
+		}else{
+			//闈炴敞閲婏紝鎻掑叆鐘舵��
+			insAfterProgramName = FileContentUtil.insertLine(byteStream,annotationProperties.getProgramNameLineIndex(),proNameAnnotation);
+		}
+		return insAfterProgramName;
+	}
+
+	/**
+	 * 鏄惁涓哄綋鍓嶇▼搴忕殑娉ㄩ噴
+	 * @param lineTextWithoutAnno 娉ㄩ噴琛岀殑鏂囧瓧
+	 * @param programName 绋嬪簭鍚嶇О
+	 * @return 鏄惁鏃剁▼搴忔敞閲婅锛屽鏋滀笌褰撳墠绋嬪簭鍚嶅尮閰嶅垯true
+	 */
+	boolean isCurrentProgramNameAnnotation(String lineTextWithoutAnno,String programName){
+		Pattern pattern = Pattern.compile("^\\((.+)\\)");
+		Matcher matcher = pattern.matcher(lineTextWithoutAnno);
+		if(matcher.find()){
+			String findText = matcher.group(1);
+			return findText.equals(programName);
+		}else{
+			return false;
+		}
+	}
+	/**
+	 * 鐢熸垚绋嬪簭鍚嶆垚鐨勮 鍔犲叆 (pname=[绋嬪簭鍚嶇О])
+	 * @param proggramName
+	 * @return 鎶ヨ鍚庣殑绋嬪簭鍚嶇О
+	 */
+	private String genProgramNameText(String proggramName) {
+		return String.format("(%s)",proggramName);
+	}
 
 	@Override
 	public void setControlSystem(String controlSystemDictVal) {

--
Gitblit v1.9.3