yangys
2025-09-15 7bc1d0f521c1d59246f29bcadcc4343f88ceef1c
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
@@ -76,7 +76,12 @@
      //需要固化的节点
      NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId,  flowProps.getProcessInstanceId()).one();
      //原节点保留不动,置为老版本
      pkgNode.setIsLastEdition(0);
      pkgNode.setIsLocked(1);
      nodeService.updateById(pkgNode);
      nodeService.getBaseMapper().deleteById(pkgNode.getParentId());//删除机床组节点
      //List<NcNode> historyProgramPackageNodes = nodeService.getTryNodeHistory(pkgNode);
      try {
         moveNodeToCuredTree(pkgNode, flowProps);//, historyProgramPackageNodes
@@ -91,20 +96,18 @@
   /**
    * 将节点和历史节点挪动到固化的同级节点下
    * @param pkgNode1 要固化的节点
    * @param historyProgramPackageNodes 程序包名 历史节点List<NcNode> historyProgramPackageNodes,
    * @param programProperties 流程属性
    */
   void moveNodeToCuredTree(NcNode pkgNode1, FlowProgramProperties programProperties) throws IOException {
      //创建节点到机床级别.(固化树)
      NcNode machineGroupNode = ncNodeAutoCreateService.createNodeTreeToMachineGroup(programProperties);
      //新建一个节点,作为固化节点,老节点保留不动,置为老版本
      //新建一个节点,作为固化节点,
      this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, machineGroupNode.subNodeParentIds())
         .in(NcNode::getNodeType, Arrays.asList(NcNode.TYPE_PROGRAM_PACKAGE,NcNode.TYPE_PROGRAM_FILE))
         .set(NcNode::getIsLastEdition,0).set(NcNode::getIsLocked,1).update();
      //pkgNode1.setParentId(machineGroupNode.getId());
      //pkgNode1.setParentIds(machineGroupNode.subNodeParentIds());//更新上级节点,下面还要用应为在historyProgramPackageNodes中的和这个不是一个实例
      List<NcNode> programNodes = nodeService.getProgramFilesByPackageId(pkgNode1.getId());
      boolean tryPkgNodeHasChild = !programNodes.isEmpty();
@@ -114,64 +117,67 @@
      cureNode.setParentIds(machineGroupNode.subNodeParentIds());
      nodeService.save(cureNode);
      this.copyNonProgramNodes(pkgNode1,cureNode);
      /*
      List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,pkgNode1.getId()).list();
      //FlowProgramFile pfile;
      FlowProgramFile pfile;
      for(NcNode oldProgramNode : oriProgramNodes){
         oldProgramNode.setParentIds(pkgNode1.subNodeParentIds());
         oldProgramNode.setIsLastEdition(0);
         //pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
         //当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,直接挪到固化树下,两个网络之间只交换程序文件,其他文件只能保留
         //其他文件,需要复制到新建的固化节点下
         NcNode newFileNode = new NcNode();
         BeanUtils.copyProperties(oldProgramNode,newFileNode);
         EntityUtil.clearBaseProperties(newFileNode);
         newFileNode.setParentId(cureNode.getId());
         newFileNode.setParentIds(cureNode.subNodeParentIds());
         newFileNode.setIsLastEdition(1);
         nodeService.save(newFileNode);
         //其他文件,需要复制到新建的固化节点下(程序文件不复制)
         pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
         if(!pfile.isProgram()) {
            NcNode newFileNode = new NcNode();
            BeanUtils.copyProperties(oldProgramNode, newFileNode);
            EntityUtil.clearBaseProperties(newFileNode);
            newFileNode.setParentId(cureNode.getId());
            newFileNode.setParentIds(cureNode.subNodeParentIds());
            newFileNode.setIsLastEdition(1);
            nodeService.save(newFileNode);
         }
      }
      nodeService.updateBatchById(oriProgramNodes);
      /*
      for(NcNode hisPackageNode : historyProgramPackageNodes){
         hisPackageNode.setIsLastEdition(0);
         hisPackageNode.setParentId(machineGroupNode.getParentId());
         hisPackageNode.setParentIds(machineGroupNode.subNodeParentIds());//程序包与机床节点同级
         hisPackageNode.lock();
      */
         //处理程序包下层的程序节点,这里:老的程序节点不用更新为历史版本,因为会建立新节点。只修改parentId 和 parentIds //改了,看看效果
         List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list();
         FlowProgramFile pfile;
         for(NcNode oldProgramNode : oriProgramNodes){
            oldProgramNode.setParentIds(hisPackageNode.subNodeParentIds());
            oldProgramNode.setIsLastEdition(0);
      this.addNewProgramNode(cureNode,pkgNode1.getProcessInstanceId());
            pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
            //if(oldProgramNode.getParentId().equals(pkgNode1.getId()) && !pfile.isProgram()){
               //当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,直接挪到固化树下,两个网络之间只交换程序文件,其他文件只能保留
               //其他文件,需要复制到新建的固化节点下
               NcNode newFileNode = new NcNode();
               BeanUtils.copyProperties(oldProgramNode,newFileNode);
               EntityUtil.clearBaseProperties(newFileNode);
               newFileNode.setParentId(cureNode.getId());
               newFileNode.setParentIds(cureNode.subNodeParentIds());
               newFileNode.setIsLastEdition(1);
               nodeService.save(newFileNode);
            //}
   }
   /**
    * 从待固化节点复制非程序文件节点到固化节点下
    * @param oriPkgNode 待固化节点
    * @param cureNode 固化节点
    */
   void copyNonProgramNodes(NcNode oriPkgNode,NcNode cureNode){
      List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,oriPkgNode.getId()).list();
      FlowProgramFile pfile;
      for(NcNode oldProgramNode : oriProgramNodes){
         oldProgramNode.setParentIds(oriPkgNode.subNodeParentIds());
         oldProgramNode.setIsLastEdition(0);
         //当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,直接挪到固化树下,两个网络之间只交换程序文件,其他文件只能保留
         //其他文件,需要复制到新建的固化节点下(程序文件不复制)
         pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
         if(!pfile.isProgram()) {
            NcNode newFileNode = new NcNode();
            BeanUtils.copyProperties(oldProgramNode, newFileNode);
            EntityUtil.clearBaseProperties(newFileNode);
            newFileNode.setParentId(cureNode.getId());
            newFileNode.setParentIds(cureNode.subNodeParentIds());
            newFileNode.setIsLastEdition(1);
            nodeService.save(newFileNode);
         }
         nodeService.updateBatchById(oriProgramNodes);
      }
      nodeService.updateBatchById(oriProgramNodes);
   }
       */
      //nodeService.updateBatchById(historyProgramPackageNodes);
   void addNewProgramNode(NcNode cureNode,String processInstanceId) throws IOException {
      Machine machine = machineService.getByCode(cureNode.getMachineCode());
      List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
      //新的流程文件,需要在包节点下新建,不能用老的
      List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode1.getProcessInstanceId()).list();
      //新的流程文件,需要在包节点下新建,不能用老的包节点
      List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,processInstanceId).list();
      for(FlowProgramFile flowProgramFile : files){
         NcNode newProgNode = new NcNode();
@@ -190,8 +196,6 @@
         nodeService.save(newProgNode);
      }
   }
   /**