yangys
2025-08-09 33714e9bae91e01880bc0acb01eea18f0eabb4a5
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -14,6 +14,7 @@
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.basesetting.machine.MachineService;
import org.springblade.mdm.basesetting.machine.entity.Machine;
@@ -28,12 +29,17 @@
import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
import org.springblade.mdm.program.vo.DncSendBackData;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.feign.IDictClient;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.pojo.entity.Dict;
import org.springframework.stereotype.Service;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@@ -48,6 +54,7 @@
public class NcProgramExportDNCService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
   //private final NcProgramService progService;
   private final IDictClient dictClient;
   private final MachineService machineService;
   private final NcProgramApprovedService approvedService;
   private final ApproveRecordService approveRecordService;
@@ -58,19 +65,16 @@
   public static final String NODE_JSON_FILE = "exp_mdm_nc_node.json";
   public static final String APPROVE_RECORD_JSON_FILE = "exp_mdm_approve_record.json";
   public static final String ANNOTATION_DICT = "machine_annotation";
   /**
    * 分页查询
    * @param query 查询参数
    * @return
    */
   public IPage<DncSendBackData> dncSendBackPageQuery(Query query) {
      IPage<DncSendBackData> page = this.getBaseMapper().dncSendBackpageQuery(Condition.getPage(query),query);
      return page;
      return this.getBaseMapper().dncSendBackpageQuery(Condition.getPage(query),query);
   }
   /**
    * 导出dnc压缩包
@@ -109,26 +113,81 @@
      List<NcNode> programNodes = ncNodeService.lambdaQuery().eq(NcNode::getParentId, approved.getNcNodeId()).list();
      FlowProgramFile programFile;
      NcNode programPackageNode = this.ncNodeService.getById(approved.getNcNodeId());
      String status = "未固化";
      if(programPackageNode.hasCured()){
         status = "已固化";
      }
      List<Dict> annotationList = getAnnotionList();
      for (NcNode node : programNodes) {
         String filePathInZip = packageFolder + node.getName();
         programFile = this.flowProgramFileService.getById(node.getFlowProgramFileId());
         InputStream inputStream = ossTemplate.statFileStream(programFile.getOssName());
         Machine machine = machineService.getByCode(node.getMachineCode());
         InputStream addedIns = addSendPath(inputStream,machine.getProgSendDir());
         this.addInputStreamToZip(zipOut,addedIns,filePathInZip);
         InputStream addedIns1 = addSendDirAnnotation(inputStream,machine,annotationList);
         InputStream addedIns2 = addProgramStatusAnnotation(addedIns1,status,machine,annotationList);
         this.addInputStreamToZip(zipOut,addedIns2,filePathInZip);
      }
   }
   /**
    * 加入机床下发路径
    * 获取字典中配置的注释
    * @return 字典项列表
    */
   List<Dict> getAnnotionList(){
      List<Dict> annotationList;
      R<List<Dict>> dictsResult = dictClient.getList(ANNOTATION_DICT);
      if(dictsResult.isSuccess()) {
         annotationList = dictsResult.getData();
      }else{
         annotationList = Collections.emptyList();
      }
      return annotationList;
   }
   /**
    * 加入机床下发路径和程序状态的注释
    * @param inputStream
    * @return
    */
   InputStream addSendPath(InputStream inputStream,String machineSendPath) throws IOException {
      return FileContentUtil.insertLine(inputStream,1,machineSendPath);
   InputStream addSendDirAnnotation(InputStream inputStream,Machine machine,List<Dict> annotationList) throws IOException {
      return FileContentUtil.insertLine(inputStream,1,generateAnnotation(machine.getProgSendDir(),machine.getMachineGroupCode(),annotationList));
   }
   /**
    * 添加程序专改的注释
    * @param inputStream
    * @param status 程序状态
    * @param machine
    * @param annotationList 配置的注释字典列表
    * @return
    * @throws IOException
    */
   InputStream addProgramStatusAnnotation(InputStream inputStream,String status,Machine machine,List<Dict> annotationList) throws IOException {
      return FileContentUtil.insertLine(inputStream,2,generateAnnotation(status,machine.getMachineGroupCode(),annotationList));
   }
   String generateAnnotation(String oriTest,String machineGroupCode,List<Dict> annotationList) {
      R<List<Dict>> dictsResult = dictClient.getList(ANNOTATION_DICT);
      String annotation = oriTest;
      String begin = "(";
      String end = ")";
      Optional<Dict> dictOpt = dictsResult.getData().stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
      String annotationSetting = "(,)";
      if(dictOpt.isPresent()) {
         annotationSetting = dictOpt.get().getDictValue();
      }
      String[] arr = annotationSetting.split(",");
      if(arr.length == 2){
         begin = arr[0];
         end = arr[1];
      }
      annotation = begin + oriTest + end;
      return annotation;
   }
   /**