yangys
2025-09-06 a5f944c2bc0107e5df936937f1c33e5e03eb8fed
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java
@@ -74,10 +74,8 @@
    * @param annotationList 注释注释字典项列表
    * @return
    */
   public boolean isAnnotation(String line,String machineGroupCode,List<DictBiz> annotationList){
      boolean isAnno = false;
      ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(machineGroupCode,annotationList);
   public boolean isAnnotation(String line,String systemDictVal,List<DictBiz> annotationList){
      ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(systemDictVal,annotationList);
      line = StringUtils.trim(line);//去首尾空格
      return progAnnotation.isAnnotation(line);
@@ -85,100 +83,62 @@
   public String generateAnnotation(String oriTest,String machineGroupCode,List<DictBiz> annotationList) {
      /*
      String annotation = oriTest;
      String begin = "(";
      String end = ")";
      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();
      }
      String[] arr = StringUtils.split(annotationSetting,",");
      if(arr.length == 2){
         begin = arr[0];
         end = arr[1];
      }else if(arr.length == 1){
         begin = arr[0];
         end = "";
      }
      */
      ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(machineGroupCode,annotationList);
   public String generateAnnotation(String oriTest,String systemDictVal,List<DictBiz> annotationList) {
      ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(systemDictVal,annotationList);
      return progAnnotation.addAnnotation(oriTest);
   }
   /*
   public String[] getAnnotationStartAndEnd(String machineGroupCode,List<DictBiz> annotationList) {
      String begin = "(";
      String end = ")";
      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();
      }
      String[] arr = StringUtils.split(annotationSetting,",");
      if(arr.length == 2){
         begin = arr[0];
         end = arr[1];
      }else if(arr.length == 1){
         begin = arr[0];
         end = "";
      }
      ProgramAnnotation progAnno = this.getProgramAnnotationFormat(machineGroupCode,annotationList);
      return new String[]{begin,end};
   }
*/
   /**
    * 提取注释中的文本
    * @param machineGroupCode 机床组代码
    * @param systemDictVal 机床组代码
    * @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);
      }
   public String removeAnnotation(String systemDictVal,String text){
      List<DictBiz> annoDicts = getAnnotionDictList();
      return removeAnnotation(systemDictVal,text,annoDicts);
   }
   public String removeAnnotation(String systemDictVal,String text,List<DictBiz> annotatiionList){
      ProgramAnnotation panno = this.getProgramAnnotationFormat(systemDictVal,annotatiionList);
      return panno.cleanAnnotation(text);
   }
      /**
       * 设置固化注释行
       * @param inputStream 输入框
       * @param machineGroup 机床组编码
       * @param systemDictVal 机床组编码
       * @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 InputStream setGHAnnotation(InputStream inputStream, String systemDictVal,List<DictBiz> annoDictList) throws IOException {
      return setAnnotationAndGetInputStream(inputStream, systemDictVal, annoDictList, GH, STATUS_LINE_INDEX);
   }
   /**
    * 设置偏离单注释
    * @param inputStream 文本输入流
    * @param machineGroup 机床组代码
    * @param systemDictVal 控制系统字典值
    * @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);
   public InputStream setPldAnnotation(String deviation,InputStream inputStream,String systemDictVal,List<DictBiz> annoDictList) throws IOException {
      return setAnnotationAndGetInputStream(inputStream, systemDictVal, annoDictList, deviation, STATUS_DEVIATION_INDEX);
   }
   @NotNull
   private InputStream setAnnotationAndGetInputStream(InputStream inputStream, String machineGroup, List<DictBiz> annoDictList, String text, int lineIndex) throws IOException {
   private InputStream setAnnotationAndGetInputStream(InputStream inputStream, String systemDictVal, 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 annoTxt = generateAnnotation(text,systemDictVal,annoDictList);//加了注释之后的文本
         String lineText = FileContentUtil.readLineAt(byteInputStream, lineIndex);
         byteInputStream.reset();
         if(isAnnotation(lineText,machineGroup,annoDictList)){
         if(isAnnotation(lineText,systemDictVal,annoDictList)){
            finishedStream = FileContentUtil.replaceAtLine(byteInputStream, lineIndex,annoTxt);
         }else{
            finishedStream = FileContentUtil.insertLine(byteInputStream, lineIndex,annoTxt);
@@ -195,11 +155,11 @@
    * @param sendPath 发送路径
    * @param statusText 状态文本
    * @param inputStream 输入流
    * @param machineGroup 机床组代码
    * @param systemDictVal 控制系统代码
    * @return 加好发送路径和状态文本的输入流
    * @throws IOException
    */
   public InputStream setSendDirAndStatusAnnotation(String sendPath,String statusText,InputStream inputStream, String machineGroup) throws IOException {
   public InputStream setSendDirAndStatusAnnotation(String sendPath,String statusText,InputStream inputStream, String systemDictVal) throws IOException {
      List<DictBiz> annoDicts = getAnnotionDictList();
      InputStream finishedStream;
@@ -207,8 +167,7 @@
         ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
         //1加入发送路径的注释
         String sendPathAnnotation = generateAnnotation(sendPath,machineGroup,annoDicts);//加了注释之后的文本
         String sendPathAnnotation = generateAnnotation(sendPath,systemDictVal,annoDicts);//加了注释之后的文本
         String sendDirLine = FileContentUtil.readLineAt(byteInputStream,SENDPATH_LINE_INDEX);//第2行是发送路径
         byteInputStream.reset();
@@ -216,7 +175,7 @@
         byteInputStream.reset();
         InputStream insAfterSetSendDir ;
         if(isAnnotation(sendDirLine,machineGroup,annoDicts)){
         if(isAnnotation(sendDirLine,systemDictVal,annoDicts)){
            insAfterSetSendDir = FileContentUtil.replaceAtLine(byteInputStream,SENDPATH_LINE_INDEX,sendPathAnnotation);
         }else{
            insAfterSetSendDir = FileContentUtil.insertLine(byteInputStream,SENDPATH_LINE_INDEX,sendPathAnnotation);
@@ -224,8 +183,8 @@
         insAfterSetSendDir.reset();
         //加入状态注释行
         String statusAnnotation = generateAnnotation(statusText,machineGroup,annoDicts);//注释后的状态文本
         if(isAnnotation(statusLine,machineGroup,annoDicts)){
         String statusAnnotation = generateAnnotation(statusText,systemDictVal,annoDicts);//注释后的状态文本
         if(isAnnotation(statusLine,systemDictVal,annoDicts)){
            finishedStream = FileContentUtil.replaceAtLine(insAfterSetSendDir,STATUS_LINE_INDEX,statusAnnotation);
         }else{
            finishedStream = FileContentUtil.insertLine(insAfterSetSendDir,STATUS_LINE_INDEX,statusAnnotation);
@@ -237,15 +196,15 @@
   /**
    * 解析出机床程序注释的格式
    * @param machineGroupCode 机床组
    * @param systemDictVal 数控系统字典值
    * @param annoDictList 配置的注释字典数据
    * @return
    */
   ProgramAnnotation getProgramAnnotationFormat(String machineGroupCode,List<DictBiz> annoDictList){
   ProgramAnnotation getProgramAnnotationFormat(String systemDictVal,List<DictBiz> annoDictList){
      String begin;
      String end;
      Optional<DictBiz> dictOpt = annoDictList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
      Optional<DictBiz> dictOpt = annoDictList.stream().filter(dict -> {return dict.getDictKey().equals(systemDictVal);}).findFirst();
      String annotationSetting = DEFAULT_ANNOTATION_SETTING;
      if(dictOpt.isPresent()) {
         annotationSetting = dictOpt.get().getRemark();