yangys
2025-08-23 f13fcaa8c4b0f413d8ee100adcb67669db183c68
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
@@ -75,22 +75,12 @@
    */
   public void handleData(FlowProgramProperties flowProps) {
      // 执行业务逻辑
      NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId,  flowProps.getProcessInstanceId()).one();
      //试切的
      pkgNode.setIsCured(1);
      pkgNode.setIsLocked(NcNode.UNLOCK);
      Optional<NcNode> optOldCuredPackageNode = nodeService.lambdaQuery().eq(NcNode::getName,pkgNode.getName())
         .eq(NcNode::getProcessNo,pkgNode.getProcessNo())
         .eq(NcNode::getProcessEdition,pkgNode.getProcessEdition())
         .eq(NcNode::getIsLastEdition,1).eq(NcNode::getIsCured,1).oneOpt();
      //设置过期日期
      if(optOldCuredPackageNode.isEmpty()){
         //之前 没有已固化的程序包名,则直接更新版本号,如果有,那就使用node现在的版本号,因为不可用转为试切,审批完成已经升级version
         pkgNode.upgradeVersionNumber();
      }
      pkgNode.setExpireDate(calculateExpireDate());
      nodeService.updateById(pkgNode);
      //需要固化的节点
      NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId,  flowProps.getProcessInstanceId()).one();
      //pkgNode.setIsLastEdition(0);
      //nodeService.updateById(pkgNode);
      List<NcNode> historyProgramPackageNodes = nodeService.getNodeHistory(pkgNode);
      try {
@@ -106,40 +96,54 @@
   /**
    * 将节点和历史节点挪动到固化的同级节点下
    * @param pkgNode 要挪动的节点
    * @param pkgNode 要固化的节点
    * @param historyProgramPackageNodes 程序包名 历史节点
    */
   void moveNodeToCuredTree(NcNode pkgNode,List<NcNode> historyProgramPackageNodes, FlowProgramProperties programProperties) throws IOException {
   void moveNodeToCuredTree(NcNode pkgNode1,List<NcNode> historyProgramPackageNodes, FlowProgramProperties programProperties) throws IOException {
      //创建节点到机床级别.(固化树)
      NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(programProperties);
      pkgNode.setParentId(machineNode.getParentId());
      pkgNode.setParentIds(machineNode.getParentIds());//更新上级节点,下面还要用应为在historyProgramPackageNodes中的和这个不是一个实例
      pkgNode1.setParentId(machineNode.getParentId());
      pkgNode1.setParentIds(machineNode.getParentIds());//更新上级节点,下面还要用应为在historyProgramPackageNodes中的和这个不是一个实例
      //新建一个节点,作为固化节点,老节点保留不动,置为老版本
      //机床下现在没有文件了,程序包名升级与机床同级了,改为找到机床同级程序包名更新了
      //TODO 这个parentIds是不是不够?,不够,一个机床下多个程序包的情况不行吧,但是按照树,多个程序包不太现实
      this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, machineNode.getParentIds())
         .in(NcNode::getNodeType, Arrays.asList(NcNode.TYPE_PROGRAM_PACKAGE,NcNode.TYPE_PROGRAM_FILE))
         .ne(NcNode::getId,pkgNode.getId())//不要更新新固化的节点new
         //.ne(NcNode::getId,cureNode.getId())//不要更新新固化的节点
         .set(NcNode::getIsLastEdition,0).set(NcNode::getIsLocked,1).update();
      NcNode cureNode = createNewCureNodeByTargetNode(pkgNode1);
      for(NcNode hisPackageNode : historyProgramPackageNodes){
         if(!hisPackageNode.getId().equals(pkgNode.getId())){
         //if(!hisPackageNode.getId().equals(pkgNode.getId())){
            hisPackageNode.setIsLastEdition(0);
         }
         //}
         hisPackageNode.setParentId(machineNode.getParentId());
         hisPackageNode.setParentIds(machineNode.getParentIds());//程序包与机床节点同级
         //处理程序包下层的程序节点111
         //处理程序包下层的程序节点,这里:老的程序节点不用更新为历史版本,因为会建立新节点。只修改parentId 和 parentIds
         List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list();
         FlowProgramFile pfile;
         for(NcNode oldProgramNode : oriProgramNodes){
            oldProgramNode.setParentIds(hisPackageNode.getParentIds()+","+hisPackageNode.getId());
            oldProgramNode.setIsLastEdition(0);
            //oldProgramNode.setIsLastEdition(0);
            pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
            if(oldProgramNode.getParentId().equals(pkgNode.getId()) && !pfile.isProgram()){
            if(oldProgramNode.getParentId().equals(pkgNode1.getId()) && !pfile.isProgram()){
               //当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,直接挪到固化树下,两个网络之间只交换程序文件,其他文件只能保留
               oldProgramNode.setIsLastEdition(1);
               //oldProgramNode.setIsLastEdition(1);
               //其他文件,需要复制到新建的固化节点下
               NcNode newOtherFileNode = new NcNode();
               BeanUtils.copyProperties(oldProgramNode,newOtherFileNode);
               EntityUtil.clearBaseProperties(newOtherFileNode);
               newOtherFileNode.setParentId(cureNode.getId());
               newOtherFileNode.setParentIds(cureNode.getParentIds()+","+cureNode.getId());
               newOtherFileNode.setIsLastEdition(1);
               nodeService.save(newOtherFileNode);
            }
         }
@@ -147,32 +151,61 @@
      }
      nodeService.updateBatchById(historyProgramPackageNodes);
      Machine machine = machineService.getByCode(pkgNode.getMachineCode());
      Machine machine = machineService.getByCode(cureNode.getMachineCode());
      List<DictBiz> annoDicts = programAnnotationService.getAnnotionList();
      //新的流程文件,需要在包节点下新建,不能用老的
      List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list();
      List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode1.getProcessInstanceId()).list();
      for(FlowProgramFile flowProgramFile : files){
         NcNode newProgNode = new NcNode();
         BeanUtils.copyProperties(pkgNode,newProgNode);
         BeanUtils.copyProperties(cureNode,newProgNode);
         EntityUtil.clearBaseProperties(newProgNode);
         newProgNode.setName(flowProgramFile.getName());
         newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
         newProgNode.setParentId(pkgNode.getId());
         newProgNode.setParentIds(pkgNode.getParentIds()+","+pkgNode.getId());
         newProgNode.setParentId(cureNode.getId());
         newProgNode.setParentIds(cureNode.getParentIds()+","+cureNode.getId());
         newProgNode.setIsLastEdition(1);
         newProgNode.setFlowProgramFileId(flowProgramFile.getId());
         newProgNode.setIsCured(1);
         nodeService.save(newProgNode);
         //修改文件内容更新注释,并更新文件数据的地址
         ///替换注释后总是不行啊
         setGhAnnotation(flowProgramFile,machine.getMachineGroupCode(),annoDicts);
      }
         nodeService.save(newProgNode);
   }
   }
   /**
    * 复制待固化节点数据,创建一个新的固化节点
    * @param waitingCureNode 待固化节点
    * @return 固化节点
    */
   NcNode createNewCureNodeByTargetNode(NcNode waitingCureNode){
      //新建一个节点,作为固化节点,老节点保留不动
      NcNode cureNode = new NcNode();
      BeanUtils.copyProperties(waitingCureNode, cureNode);
      EntityUtil.clearBaseProperties(cureNode);
      cureNode.setIsCured(1);
      cureNode.setIsLocked(NcNode.UNLOCK);
      cureNode.setIsLastEdition(1);
      cureNode.setExpireDate(calculateExpireDate());//设置过期日期
      Optional<NcNode> optOldCuredPackageNode = nodeService.lambdaQuery().eq(NcNode::getName,waitingCureNode.getName())
         .eq(NcNode::getProcessNo,waitingCureNode.getProcessNo())
         .eq(NcNode::getProcessEdition,waitingCureNode.getProcessEdition())
         .eq(NcNode::getIsLastEdition,1).eq(NcNode::getIsCured,1).oneOpt();
      if(optOldCuredPackageNode.isEmpty()){
         //之前 没有已固化的程序包名,则直接更新版本号,如果有,那就使用node现在的版本号,因为不可用转为试切,审批完成已经升级version
         cureNode.upgradeVersionNumber();
      }
      nodeService.save(cureNode);
      return cureNode;
   }
   /**
    * 设置固化注释,实现方式,获取文件字节下,修改后替换文件
    * @param flowProgramFile oss 文件
@@ -192,6 +225,8 @@
            BladeFile bfile = ossTemplate.putFile(flowProgramFile.getName(), finishedStream);
            //替换原有的文件地址
            flowProgramFile.setOssName(bfile.getName());
            flowProgramFileService.updateById(flowProgramFile);
         }
      }
   }