yangys
2025-08-14 a049dda2f63d59f5092994b44387fe0aa889d375
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/DispatchFinishListener.java
@@ -1,11 +1,11 @@
package org.springblade.mdm.flow.excution;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.history.HistoricProcessInstance;
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;
@@ -14,15 +14,18 @@
import org.springblade.mdm.flow.service.FlowProgramProperties;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgramApproved;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
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;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * 派工审批完成执行的事件,功能:插入审批表数据
 * 派工审批通过执行的事件,功能:插入审批表数据
 */
@Slf4j
@Component("dispatchFinishListener")
@@ -39,6 +42,8 @@
   private FlowCommonService flowCommonService;
   @Autowired
   private NcNodeService ncNodeService;
   @Autowired
   private NcNodeAutoCreateService ncNodeAutoCreateService;
   /**
    * 在流程结束时自动调用,(配置在审批结束事件的executelistener中了)
    * @param execution 执行对象
@@ -48,10 +53,9 @@
      String instId = execution.getProcessInstanceId();
      log.info("事件名称{},instid={}" , execution.getEventName(),instId);
      //将关联表中的数据插入审批表
      //NcNode packageNode = ncNodeService.getByProcessInstanceId(instId);
      FlowProgramProperties props = flowCommonService.getProgramProperties(instId);
      createProgramNodes(props);
      String programName = NcNodeService.genProgramName(props.getDrawingNo(),props.getProcessNo());
      NcNode packageNode = ncNodeService.getProgramPackageByName(programName);
@@ -63,28 +67,60 @@
      log.info("流程已完成in DispatchFinishListener");
   }
   //void updateFlowProgramFile(String instId){
   void addApproveTable(NcNode packageNode,String title){
      //List<FlowProgramFile> programFiles =  flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, instId).list();
      //if(!programFiles.isEmpty()) {
         //FlowProgramFile pf = programFiles.get(0);
         NcProgramApproved approved = new NcProgramApproved();
         //approved.setProgramName(pf.getProgramName());
         approved.setProgramName(packageNode.getName());
         approved.setNcNodeId(packageNode.getId());//程序包节点id
         approved.setTitle(title);
         approvedService.save(approved);
         /*
         NcNode pkgNode = ncNodeService.getProgramPackageByName(pf.getProgramName());
         if(pkgNode!=null) {
            approved.setNcNodeId(pkgNode.getId());//程序包节点id
            approvedService.save(approved);
         }else{
            log.warn("未找到名为{}的程序包",pf.getProgramName());
         }
   /**
    * 自动创建程序节点
    * @param progProperties 流程属性
    */
   void createProgramNodes(FlowProgramProperties progProperties){
      //FlowProgramProperties progProperties = flowCommonService.getProgramProperties(processInstanceId);
      if(!FlowContants.Y.equals(progProperties.getHasCuredProgram())) {
         //试切或者偏离
         ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);
      }else{
         log.warn("没有程序文件");
      }*/
         //有固化
         //TODO 还要区分是否可用判定是否可用。可用界
         if(!FlowContants.Y.equals(progProperties.getCureProgramUseable())) {
            //固化程序不可用,需要重新建立程序包名和文件节点;可用情况在流程审批中已经升级过节点了
            NcNode curedProgramPackage = ncNodeService.getById(Func.toLong(progProperties.getCuredNodeId()));
            NcNode newCuredNode = new NcNode();
            BeanUtils.copyProperties(curedProgramPackage, newCuredNode);
            EntityUtil.clearBaseProperties(newCuredNode);
            newCuredNode.setIsLastEdition(1);
            newCuredNode.setIsLocked(0);
            ncNodeService.save(newCuredNode);
            //新的流程对应的文件更新到新节点下
            List<FlowProgramFile> newFlowFileList = flowProgramFileService.lambdaQuery()
               .eq(FlowProgramFile::getProcessInstanceId, progProperties.getProcessInstanceId()).list();
            for (FlowProgramFile newFlowFile : newFlowFileList) {
               NcNode newProgramNode = new NcNode();
               newProgramNode.setName(newFlowFile.getName());
               newProgramNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
               newProgramNode.setParentId(newCuredNode.getParentId());
               newProgramNode.setIsLastEdition(1);
               newProgramNode.setIsLocked(0);
               newProgramNode.setParentIds(newCuredNode.getParentIds() + "," + newCuredNode.getId());
               ncNodeService.save(newProgramNode);
            }
            //原节点更新为老版本,锁定
            curedProgramPackage.setIsLastEdition(0);
            curedProgramPackage.setIsLocked(1);
            ncNodeService.updateById(curedProgramPackage);
         }
      }
   }
   void addApproveTable(NcNode packageNode,String title){
      NcProgramApproved approved = new NcProgramApproved();
      //approved.setProgramName(pf.getProgramName());
      approved.setProgramName(packageNode.getName());
      approved.setNcNodeId(packageNode.getId());//程序包节点id
      approved.setTitle(title);
      approvedService.save(approved);
   }