From b7af95d487f49490de16f9636147e5a40911e157 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期五, 29 八月 2025 23:36:48 +0800
Subject: [PATCH] 确认表增加程序编号

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java |  229 ++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 186 insertions(+), 43 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java
index 6bf350d..5bcd37e 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java
@@ -2,13 +2,21 @@
 package org.springblade.mdm.program.service;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.tool.api.R;
-import org.springblade.system.feign.IDictClient;
-import org.springblade.system.pojo.entity.Dict;
+import org.springblade.mdm.program.vo.ProgramAnnotation;
+import org.springblade.mdm.utils.FileContentUtil;
+import org.springblade.system.feign.IDictBizClient;
+import org.springblade.system.pojo.entity.DictBiz;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
@@ -23,17 +31,35 @@
 public class ProgramAnnotationService {
 
 	@Autowired
-	private IDictClient dictClient;
+	private IDictBizClient bizDictClient;
 
 	private static final String DEFAULT_ANNOTATION_SETTING = "(,)";
 
 	public static final String ANNOTATION_DICT = "machine_annotation";
+	/**
+	 * 鍙戦�佺洰褰曡绱㈠紩锛堢2琛岋級 0 based
+	 */
+	public static final int SENDPATH_LINE_INDEX = 1;
+	/**
+	 * 鐘舵�佽绱㈠紩锛堢涓夎锛� 0 based
+	 */
+	public static final int STATUS_LINE_INDEX = 2;
 
-	public List<Dict> getAnnotionList(){
-		List<Dict> annotationList;
-		R<List<Dict>> dictsResult = dictClient.getList(ANNOTATION_DICT);
-		if(dictsResult.isSuccess()) {
-			annotationList = dictsResult.getData();
+	/**
+	 * 鍋忕鍗曟敞閲婅绱㈠紩鍙� 0 based
+	 */
+	public static final int STATUS_DEVIATION_INDEX = 3;
+
+	public static final String SQ = "SQ";
+	public static final String GH = "GH";
+	public static final String PL = "PL";
+
+	public List<DictBiz> getAnnotionDictList(){
+		List<DictBiz> annotationList;
+
+		R<List<DictBiz>> dictBizResult = bizDictClient.getList(ANNOTATION_DICT);
+		if(dictBizResult.isSuccess()) {
+			annotationList = dictBizResult.getData();
 		}else{
 			annotationList = Collections.emptyList();
 		}
@@ -48,33 +74,23 @@
 	 * @param annotationList 娉ㄩ噴娉ㄩ噴瀛楀吀椤瑰垪琛�
 	 * @return
 	 */
-	public boolean isAnnotation(String line,String machineGroupCode,List<Dict> annotationList){
+	public boolean isAnnotation(String line,String machineGroupCode,List<DictBiz> annotationList){
 		boolean isAnno = false;
-		Optional<Dict> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
-		String annotationSetting = DEFAULT_ANNOTATION_SETTING;
-		if(dictOpt.isPresent()) {
-			annotationSetting = dictOpt.get().getRemark();
-		}
-		String begin = "";
-		String end = "";
-		String[] arr = annotationSetting.split(",");
-		if(arr.length == 2){
-			begin = arr[0];
-			end = arr[1];
-		}
-		isAnno = StringUtils.startsWith(line,begin) && StringUtils.endsWith(line,end);
-		return isAnno;
+
+		ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(machineGroupCode,annotationList);
+
+		line = StringUtils.trim(line);//鍘婚灏剧┖鏍�
+		return progAnnotation.isAnnotation(line);
 	}
 
 
 
-	public String generateAnnotation(String oriTest,String machineGroupCode,List<Dict> annotationList) {
-
+	public String generateAnnotation(String oriTest,String machineGroupCode,List<DictBiz> annotationList) {
+		/*
 		String annotation = oriTest;
 		String begin = "(";
 		String end = ")";
-
-		Optional<Dict> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
+		Optional<DictBiz> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
 		String annotationSetting = DEFAULT_ANNOTATION_SETTING;
 		if(dictOpt.isPresent()) {
 			annotationSetting = dictOpt.get().getRemark();
@@ -84,20 +100,20 @@
 			begin = arr[0];
 			end = arr[1];
 		}else if(arr.length == 1){
-			begin = begin = arr[0];
+			begin = arr[0];
 			end = "";
 		}
-
-		annotation = begin + oriTest + end;
-		return annotation;
+		*/
+		ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(machineGroupCode,annotationList);
+		return progAnnotation.addAnnotation(oriTest);
 	}
-
-	public String[] getAnnotationStartAndEnd(String machineGroupCode,List<Dict> annotationList) {
+	/*
+	public String[] getAnnotationStartAndEnd(String machineGroupCode,List<DictBiz> annotationList) {
 
 		String begin = "(";
 		String end = ")";
 
-		Optional<Dict> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
+		Optional<DictBiz> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
 		String annotationSetting = DEFAULT_ANNOTATION_SETTING;
 		if(dictOpt.isPresent()) {
 			annotationSetting = dictOpt.get().getRemark();
@@ -110,20 +126,147 @@
 			begin = arr[0];
 			end = "";
 		}
-
-
+		ProgramAnnotation progAnno = this.getProgramAnnotationFormat(machineGroupCode,annotationList);
 		return new String[]{begin,end};
 	}
+*/
 
-	public String removeAnnotation(String machineGroupCode,String text,String begin,String end){
-		List<Dict> annoDicts = getAnnotionList();
-		String[] arr = getAnnotationStartAndEnd(machineGroupCode,annoDicts);
-		return removeAnnotationInner(text,begin,end);
+	/**
+	 * 鎻愬彇娉ㄩ噴涓殑鏂囨湰
+	 * @param machineGroupCode 鏈哄簥缁勪唬鐮�
+	 * @param text 娓呴櫎娉ㄩ噴鏍囪
+	 * @return 娓呴櫎鍚庣殑鏂囨湰
+	 */
+		public String removeAnnotation(String machineGroupCode,String text){
+			List<DictBiz> annoDicts = getAnnotionDictList();
+			ProgramAnnotation panno = this.getProgramAnnotationFormat(machineGroupCode,annoDicts);
+			//String[] arr = getAnnotationStartAndEnd(machineGroupCode,annoDicts);
+			return panno.cleanAnnotation(text);
+		}
+		/**
+		 * 璁剧疆鍥哄寲娉ㄩ噴琛�
+		 * @param inputStream 杈撳叆妗�
+		 * @param machineGroup 鏈哄簥缁勭紪鐮�
+		 * @param annoDictList 娉ㄩ噴瀛楀吀閰嶇疆
+		 * @return 鍔犲ソ娉ㄩ噴鐨�
+		 * @throws IOException
+		 */
+	public InputStream setGHAnnotation(InputStream inputStream, String machineGroup,List<DictBiz> annoDictList) throws IOException {
+		return setAnnotationAndGetInputStream(inputStream, machineGroup, annoDictList, GH, STATUS_LINE_INDEX);
 	}
 
-	public static String removeAnnotationInner(String text,String begin,String end){
-		String temp = StringUtils.removeEnd(StringUtils.removeStart(text,begin),end);
-		return temp;
+	/**
+	 * 璁剧疆鍋忕鍗曟敞閲�
+	 * @param inputStream 鏂囨湰杈撳叆娴�
+	 * @param machineGroup 鏈哄簥缁勪唬鐮�
+	 * @param annoDictList 娉ㄩ噴瀛楀吀閰嶇疆
+	 * @return 鍔犲ソ娉ㄩ噴鐨勮緭鍏ユ祦
+	 * @throws IOException 璁块棶娴佸彲鑳芥姏鍑哄紓甯�
+	 */
+	public InputStream setPldAnnotation(String deviation,InputStream inputStream,String machineGroup,List<DictBiz> annoDictList) throws IOException {
+		return setAnnotationAndGetInputStream(inputStream, machineGroup, annoDictList, deviation, STATUS_DEVIATION_INDEX);
+	}
+
+	@NotNull
+	private InputStream setAnnotationAndGetInputStream(InputStream inputStream, String machineGroup, List<DictBiz> annoDictList, String text, int lineIndex) throws IOException {
+		InputStream finishedStream;
+		try(inputStream){
+			ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
+
+			String annoTxt = generateAnnotation(text,machineGroup,annoDictList);//鍔犱簡娉ㄩ噴涔嬪悗鐨勬枃鏈�
+
+			String lineText = FileContentUtil.readLineAt(byteInputStream, lineIndex);
+			byteInputStream.reset();
+
+			if(isAnnotation(lineText,machineGroup,annoDictList)){
+				finishedStream = FileContentUtil.replaceAtLine(byteInputStream, lineIndex,annoTxt);
+			}else{
+				finishedStream = FileContentUtil.insertLine(byteInputStream, lineIndex,annoTxt);
+			}
+			finishedStream.reset();
+		}
+
+		return finishedStream;
+	}
+
+
+	/**
+	 * 涓鸿緭鍏ユ祦璁剧疆鍙戦�佺洰褰�(绗簩琛�)鍜岀姸鎬侊紙绗笁琛岋級
+	 * @param sendPath 鍙戦�佽矾寰�
+	 * @param statusText 鐘舵�佹枃鏈�
+	 * @param inputStream 杈撳叆娴�
+	 * @param machineGroup 鏈哄簥缁勪唬鐮�
+	 * @return 鍔犲ソ鍙戦�佽矾寰勫拰鐘舵�佹枃鏈殑杈撳叆娴�
+	 * @throws IOException
+	 */
+	public InputStream setSendDirAndStatusAnnotation(String sendPath,String statusText,InputStream inputStream, String machineGroup) throws IOException {
+		List<DictBiz> annoDicts = getAnnotionDictList();
+
+		InputStream finishedStream;
+		try(inputStream){
+			ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
+
+			//1鍔犲叆鍙戦�佽矾寰勭殑娉ㄩ噴
+			String sendPathAnnotation = generateAnnotation(sendPath,machineGroup,annoDicts);//鍔犱簡娉ㄩ噴涔嬪悗鐨勬枃鏈�
+
+
+			String sendDirLine = FileContentUtil.readLineAt(byteInputStream,SENDPATH_LINE_INDEX);//绗�2琛屾槸鍙戦�佽矾寰�
+			byteInputStream.reset();
+			String statusLine = FileContentUtil.readLineAt(byteInputStream,STATUS_LINE_INDEX);//绗笁琛屾槸鐘舵�佹敞閲�
+			byteInputStream.reset();
+
+			InputStream insAfterSetSendDir ;
+			if(isAnnotation(sendDirLine,machineGroup,annoDicts)){
+				insAfterSetSendDir = FileContentUtil.replaceAtLine(byteInputStream,SENDPATH_LINE_INDEX,sendPathAnnotation);
+			}else{
+				insAfterSetSendDir = FileContentUtil.insertLine(byteInputStream,SENDPATH_LINE_INDEX,sendPathAnnotation);
+			}
+
+			insAfterSetSendDir.reset();
+			//鍔犲叆鐘舵�佹敞閲婅
+			String statusAnnotation = generateAnnotation(statusText,machineGroup,annoDicts);//娉ㄩ噴鍚庣殑鐘舵�佹枃鏈�
+			if(isAnnotation(statusLine,machineGroup,annoDicts)){
+				finishedStream = FileContentUtil.replaceAtLine(insAfterSetSendDir,STATUS_LINE_INDEX,statusAnnotation);
+			}else{
+				finishedStream = FileContentUtil.insertLine(insAfterSetSendDir,STATUS_LINE_INDEX,statusAnnotation);
+			}
+		}
+
+		return finishedStream;
+	}
+
+	/**
+	 * 瑙f瀽鍑烘満搴婄▼搴忔敞閲婄殑鏍煎紡
+	 * @param machineGroupCode 鏈哄簥缁�
+	 * @param annoDictList 閰嶇疆鐨勬敞閲婂瓧鍏告暟鎹�
+	 * @return
+	 */
+	ProgramAnnotation getProgramAnnotationFormat(String machineGroupCode,List<DictBiz> annoDictList){
+		String begin;
+		String end;
+
+		Optional<DictBiz> dictOpt = annoDictList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
+		String annotationSetting = DEFAULT_ANNOTATION_SETTING;
+		if(dictOpt.isPresent()) {
+			annotationSetting = dictOpt.get().getRemark();
+		}
+		String[] arr = StringUtils.split(annotationSetting,",");
+		if(arr.length == 2){
+			begin = arr[0];
+			end = arr[1];
+		}else if(arr.length == 1){
+			begin = arr[0];
+			end = "";
+		}else{
+			throw new ServiceException("娉ㄩ噴鏍煎紡閰嶇疆閿欒锛屽簲璇ヤ负1鍒�2娈碉紝涓棿鐢ㄩ�楀彿鍒嗛殧");
+		}
+
+		ProgramAnnotation programAnnotation = new ProgramAnnotation();
+		programAnnotation.setBegin(begin);
+		programAnnotation.setEnd(end);
+		return programAnnotation;
 	}
 }
 
+
+

--
Gitblit v1.9.3