yangys
2025-08-06 053a438acf9ec33e182b25211ce8108f0367feac
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java
@@ -1,19 +1,80 @@
package org.springblade.mdm.flow.task.cure;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.springblade.mdm.flow.service.FlowCommonService;
import org.springblade.mdm.flow.service.FlowProgramProperties;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
import org.springblade.mdm.program.service.NcNodeService;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component("cureFinishOperateTask")
@AllArgsConstructor
public class CureFinishOperateTask {
   private final NcNodeService nodeService;
   private final NcNodeAutoCreateService ncNodeAutoCreateService;
   private final FlowCommonService flowCommonService;
   /**
    * 固化审批通过处理任务,
    * @param execution 流程execution
    */
   public void execute(DelegateExecution execution) {
      log.info("执行固化程序任务服务,流程实例id={}", execution.getProcessInstanceId());
      //固化程序检查有效期,
      String hasCuredProgram =  (String)execution.getVariable("hasCuredProgram");
      NcProgram ncProgram =  (NcProgram)execution.getVariable("curedNcProgram");
      //1.将流程设置
      dealWithNode(execution.getProcessInstanceId());
      System.out.println("执行固化程序任务服务");
   }
   /**
    * 处理node状态。
    * @param processInstanceId 流程实例id
    */
   void dealWithNode(String processInstanceId) {
      //程序包节点和下属程序节点(包括历史节点非最新版本的)从试切挪到固化下面
      //程序包节点 设置未已固化
      NcNode pkgNode =  nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, processInstanceId).one();
      pkgNode.setIsCured(1);
      List<NcNode> historyNodes = nodeService.getNodeHistorys(pkgNode);
      moveNodeToCuredTree(pkgNode,historyNodes,flowCommonService.getProgramProperties(processInstanceId));
   }
   /**
    * 将节点和历史节点挪动到固化的同级节点下
    * @param historyNodes
    */
   void moveNodeToCuredTree(NcNode pkgNode,List<NcNode> historyNodes, FlowProgramProperties programProperties) {
      NcNode node = historyNodes.get(0);
      //创建节点到机床级别.(固化树)
      NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(programProperties);
      //移动到固化树下的机床节点下层
      String newParentIds = machineNode.getParentIds()+","+machineNode.getId();
      for(NcNode hisNode : historyNodes){
         if(!hisNode.getId().equals(pkgNode.getId())){
            hisNode.setIsLastEdition(0);
         }
         hisNode.setParentId(machineNode.getParentId());
         hisNode.setParentIds(newParentIds);
         //处理程序包下层的程序节点
         List<NcNode> pragramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisNode.getId()).list();
         for(NcNode pragramNode : pragramNodes){
            pragramNode.setParentIds(hisNode.getParentIds()+","+hisNode.getId());
         }
         nodeService.updateBatchById(pragramNodes);
      }
      nodeService.updateBatchById(historyNodes);
   }
}