yangys
2025-08-12 0db6d993345160e624293382a2c66aebe159c10b
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/replace/ReplaceFinishListener.java
@@ -3,13 +3,17 @@
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.DelegateExecution;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.ApproveRecord;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.service.ApproveRecordService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.service.ReplaceFlowService;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgramApproved;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.NcProgramApprovedService;
import org.springblade.mdm.utils.EntityUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,7 +33,8 @@
   private ApproveRecordService approveRecordService;
   @Autowired
   private FlowProgramFileService flowProgramFileService;
   @Autowired
   private NcProgramApprovedService ncProgramApprovedService;
   @Autowired
   private NcNodeService ncNodeService;
   /**
@@ -37,21 +42,37 @@
    * @param execution 执行对象
    */
   public void handle(DelegateExecution execution) {
      ReplaceFlowService a;
      // 执行业务逻辑
      String instId = execution.getProcessInstanceId();
      Long nodeId = runtimeService.getVariable(execution.getId(),ReplaceFlowService.NODE_ID,Long.class);
      log.info("事件名称{},instid={}" , execution.getEventName(),instId);
      List<FlowProgramFile> programFiles =  flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, instId).list();
      replaceProgram(nodeId,programFiles);
      NcNode newProgramPackage = replaceProgram(nodeId,programFiles);
      addToApproved(newProgramPackage,Func.toStr(execution.getVariables().get(FlowContants.TITLE)));
      log.info("流程已完成 in replaceFinishListener");
   }
   /**
    * 增加审批通过记录,供用户导出到工控网
    * @param newProgramPackage 新的程序包节点
    * @param title 标题
    */
   void addToApproved(NcNode newProgramPackage,String title){
      NcProgramApproved approve = new NcProgramApproved();
      approve.setProgramName(newProgramPackage.getName());
      approve.setNcNodeId(newProgramPackage.getId());
      approve.setTitle(title);
      ncProgramApprovedService.save(approve);
   }
   /**
    * 替换原来程序的文件
    * @param programFiles 新的文件
    * @return 新的程序包名节点
    */
   void replaceProgram(Long nodeId, List<FlowProgramFile> programFiles){
   NcNode replaceProgram(Long nodeId, List<FlowProgramFile> programFiles){
      //原节点改为老版本
      NcNode oldPackageNode = ncNodeService.getById(nodeId);
      oldPackageNode.setIsLastEdition(0);
@@ -93,13 +114,14 @@
         node.setMachineCode(newPackageNode.getMachineCode());
         node.setProcessName(newPackageNode.getProcessName());
         node.setNodeType(NcNode.TYPE_PROGRAM_FILE);
         node.setVersionNumber(1);
         node.setVersionNumber(newPackageNode.getVersionNumber());//新版本,应为需要比对
         node.setCraftEdition(newPackageNode.getCraftEdition());
         node.setIsLocked(0);
         ncNodeService.save(node);
      }
      return newPackageNode;
   }
   void updateApproveRecordNodeId(NcNode pkgNode){