yangys
2025-08-17 0ef4cc755bddd87799b8bfdd65c8123df6e149d0
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java
@@ -2,13 +2,20 @@
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.springblade.core.oss.model.BladeFile;
import org.springblade.core.tool.api.R;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.feign.IDictClient;
import org.springblade.system.pojo.entity.Dict;
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;
@@ -92,5 +99,71 @@
      return annotation;
   }
   public String[] getAnnotationStartAndEnd(String machineGroupCode,List<Dict> annotationList) {
      String begin = "(";
      String end = ")";
      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[] arr = StringUtils.split(annotationSetting,",");
      if(arr.length == 2){
         begin = arr[0];
         end = arr[1];
      }else if(arr.length == 1){
         begin = arr[0];
         end = "";
      }
      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);
   }
   public static String removeAnnotationInner(String text,String begin,String end){
      String temp = StringUtils.removeEnd(StringUtils.removeStart(text,begin),end);
      return temp;
   }
   /**
    * 为程序文件增加注释
    * @param oriText 原始文本
    * @param lineIndex 行索引 0 based
    * @param inputStream 文件的输入流
    * @param machineGroup 机床组 生成注释用
    * @return 加注释后的流
    * @throws IOException
    */
   public InputStream setAnnotation(String oriText,int lineIndex,InputStream inputStream, String machineGroup) throws IOException {
      List<Dict> annoDicts = getAnnotionList();
      //
      InputStream finishedStream;
      try(inputStream){
         ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
         String annoTxt = generateAnnotation(oriText,machineGroup,annoDicts);//加了注释之后的文本
         String lineText = FileContentUtil.readLineAt(byteInputStream,lineIndex);//第三行应该是状态注释
         byteInputStream.reset();
         if(isAnnotation(lineText,machineGroup,annoDicts)){
            finishedStream = FileContentUtil.replaceAtLine(byteInputStream,lineIndex,annoTxt);
         }else{
            finishedStream = FileContentUtil.insertLine(byteInputStream,lineIndex,annoTxt);
         }
         finishedStream.reset();
      }
      return finishedStream;
   }
}