yangys
2025-08-14 a049dda2f63d59f5092994b44387fe0aa889d375
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
@@ -1,13 +1,10 @@
package org.springblade.mdm.program.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.basesetting.machine.vo.MachineVO;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.mapper.NcNodeMapper;
import org.springblade.mdm.program.vo.*;
@@ -18,6 +15,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
 * 程序节点
@@ -75,7 +73,7 @@
    * @return
    */
   public List<NcNodeVO> lazyList(Long parentId) {
// 判断点击搜索但是没有查询条件的情况
      // 判断点击搜索但是没有查询条件的情况
      if (Func.isEmpty(parentId)) {
         parentId = 0L;
      }
@@ -103,7 +101,6 @@
   public List<NcNodeVO> searchList(NcNodeQueryVO queryVO) {
      //1.根据关进字和节点类型查询初始列表,查询的原始列表,需要hasChild字段,所以使用mapper.xml
      List<NcNodeVO> oriList = this.getBaseMapper().searchList(queryVO);
      //List<NcNode> list = this.lambdaQuery().eq(NcNode::getNodeType, queryVO.getNodeType()).like(NcNode::getName, queryVO.getName()).list();
      if ("10".equals(queryVO.getNodeType())) {
         //搜索的根级别,直接返回
         return oriList;
@@ -161,7 +158,9 @@
    * @return 程序报包名的节点
    */
   public NcNode getProgramPackageByName(String programName) {
      List<NcNode> pkgs = this.lambdaQuery().eq(NcNode::getName, programName).eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE).list();
      List<NcNode> pkgs = this.lambdaQuery().eq(NcNode::getName, programName)
         .eq(NcNode::getIsLastEdition,1)
         .eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE).list();
      if(pkgs.isEmpty()){
         return null;
      }else{
@@ -170,20 +169,30 @@
   }
   /**
    * 查询节点的历史列表(节点的上级节点”程序包名“因为存在多个版本,所以历史记录也需要根据不同版本程序包名进行查询)
    * @param id
    * @return
    */
   @Transactional(readOnly = true)
    public List<NcNodeVO> historyByNodeId(Long id) {
      NcNode node = this.getById(id);
      return this.baseMapper.historyByParentIdAndName(node.getParentId(),node.getName());
      NcNode parentNode = this.getById(node.getParentId());
      return this.baseMapper.historyByParentIdAndName(node.getName(),parentNode);
    }
   /**
    * 获取“程序包名”的最新版本
    * 获取“程序包名”试切的最新版本
    * @param name 节点名称
    * @return 最新版本程序报名节点
    */
   public NcNode getLastEditionProgramPackage(String name){
   public NcNode getLastEditionTryingProgramPackage(String name){
      //.or(NcNode::getIsCured,0)
      List<NcNode> pkgList = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE)
         .eq(NcNode::getName, name).eq(NcNode::getIsLastEdition,1).orderByDesc(NcNode::getCreateTime).list();
         .eq(NcNode::getName, name).and(i->{
            i.eq(NcNode::getIsCured, 0).or().isNull(NcNode::getIsCured);
         }).likeRight(NcNode::getParentIds,"0,1,")
         .eq(NcNode::getIsLastEdition,1).orderByDesc(NcNode::getCreateTime).list();
      if(pkgList.isEmpty()){
         return null;
@@ -192,4 +201,113 @@
      }
   }
   /**
    * 根据父节点和名称,查询文件界节点列表
    * @param name 节点/文件名称
    * @param parentId 父节点id
    */
    public NcNode getLastEditionProgramFile(String name,Long parentId) {
      List<NcNode> nodes = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_FILE)
         .eq(NcNode::getName, name).eq(NcNode::getParentId,parentId)
         .eq(NcNode::getIsLastEdition,1).list();
      if(nodes.isEmpty()){
         return null;
      }else {
         return nodes.get(0);
      }
   }
   /**
    * 获取node的历史列表(同一个父节点下,同名的所有节点)
    * @param pkgNode node
    * @return 历史列表,报错节点本身
    */
    public List<NcNode> getNodeHistory(NcNode pkgNode) {
      return this.lambdaQuery().eq(NcNode::getParentId,pkgNode.getParentId())
         .eq(NcNode::getName,pkgNode.getName()).list();
    }
   /**
    * 生成程序包名/程序名称
    * @param drawingNo 零组件号
    * @param processNo 工序版次
    * @return 程序包名/程序名称
    */
   public static String genProgramName(String drawingNo,String processNo){
      return drawingNo+"-"+processNo;
   }
   /**
    * 获取最新版本的 已固化节点
    * @param programPkgName
    * @return
    */
   public NcNode getLastEditionCuredProgramPackage(String programPkgName) {
      List<NcNode> nodes = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE)
         .eq(NcNode::getName, programPkgName).likeRight(NcNode::getParentIds,"0,2,").eq(NcNode::getIsCured,1)
         .eq(NcNode::getIsLastEdition,1).list();
      if(nodes.isEmpty()){
         return null;
      }else {
         return nodes.get(0);
      }
   }
   /**
    * 获取最新版本的 偏离节点
    * @param programPkgName 程序包名
    * @return 偏离的程序节点
    */
   public NcNode getLastEditionDeviationProgramPackage(String programPkgName) {
      List<NcNode> nodes = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE)
         .eq(NcNode::getName, programPkgName).likeRight(NcNode::getParentIds,"0,3,")
         .eq(NcNode::getIsLastEdition,1).list();
      if(nodes.isEmpty()){
         return null;
      }else {
         return nodes.get(0);
      }
   }
   /**
    * 根据流程实例id获取node节点,都是程序包节点
    * @param processInstanceId 流程实例id
    * @return 对应额系欸但那
    */
    public NcNode getByProcessInstanceId(String processInstanceId) {
      Optional<NcNode> nodeOpt = this.lambdaQuery().eq(NcNode::getProcessInstanceId,processInstanceId).oneOpt();
      return nodeOpt.orElse(null);
    }
   /**
    * 物理删除节点id下的子节点(性能考虑,否则数据太多)
    * @param nodeId 节点id
    */
   public void deleteSubNodes(Long nodeId) {
      this.baseMapper.deleteSubNodes(nodeId);
   }
   /**
    * 获取程序包下所有层序文件节点
    * @param packageNodeId 程序包名 节点id
    * @return 包下属的程序文件
    */
   public List<NcNode> getProgramFilesByPackageId(Long packageNodeId) {
      return this.lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_FILE)
         .eq(NcNode::getParentId,packageNodeId).eq(NcNode::getIsLastEdition,1).list();
   }
   /**
    * 升级版本号(+1)
    * @param nodeId 节点id
    */
   @Transactional
   public void upgradeVersionNumber(Long nodeId) {
      NcNode node = this.getById(nodeId);
      node.upgradeVersionNUmber();
      this.updateById(node);
   }
}