yangys
2025-08-20 295bf6f10ad0b668d2dbaa4525a15d6d52807ef1
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
ÎļþÃû´Ó blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/DispatchFinishListener.java ÐÞ¸Ä
@@ -1,15 +1,11 @@
package org.springblade.mdm.flow.excution;
package org.springblade.mdm.flow.excution.dispatch;
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;
import org.springblade.mdm.flow.service.FlowCommonService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.service.FlowProgramProperties;
import org.springblade.mdm.program.entity.NcNode;
@@ -25,13 +21,11 @@
import java.util.List;
/**
 * æ´¾å·¥å®¡æ‰¹é€šè¿‡æ‰§è¡Œçš„事件,功能:插入审批表数据
 * æ™®é€šæ´¾å·¥å®Œæˆæ•°æ®å¤„理器,功能:插入审批表数据,DispatchFinishListener调用
 */
@Slf4j
@Component("dispatchFinishListener")
public class DispatchFinishListener {
   @Autowired
   private RuntimeService runtimeService;
@Component("normalDispatchFinishDataHandler")
public class NormalFinishDataHandler implements FinishDataHandler{
   @Autowired
   private NcProgramApprovedService approvedService;
   @Autowired
@@ -39,32 +33,35 @@
   @Autowired
   private FlowProgramFileService flowProgramFileService;
   @Autowired
   private FlowCommonService flowCommonService;
   @Autowired
   private NcNodeService ncNodeService;
   @Autowired
   private NcNodeAutoCreateService ncNodeAutoCreateService;
   /**
    * åœ¨æµç¨‹ç»“束时自动调用,(配置在审批结束事件的executelistener中了)
    * @param execution æ‰§è¡Œå¯¹è±¡
    * DispatchFinishListener中调用
    * @param props æ‰§è¡Œå¯¹è±¡
    */
   public void handle(DelegateExecution execution) {
   public void handleData(FlowProgramProperties props) {
      // æ‰§è¡Œä¸šåŠ¡é€»è¾‘
      String instId = execution.getProcessInstanceId();
      log.info("事件名称{},instid={}" , execution.getEventName(),instId);
      String instId = props.getProcessInstanceId();
      FlowProgramProperties props = flowCommonService.getProgramProperties(instId);
      String programPkgName = NcNodeService.genProgramName(props.getDrawingNo(),props.getProcessNo());
      createProgramNodes(props);
      String programName = NcNodeService.genProgramName(props.getDrawingNo(),props.getProcessNo());
      NcNode packageNode = ncNodeService.getProgramPackageByName(programName);
      //TODO åç¦»å•,和已经固化的程序,没有处理,:已经处理没有验证
      NcNode packageNode;
      if(FlowContants.Y.equals(props.getHasCuredProgram()) && FlowContants.Y.equals(props.getCureProgramUseable())){
         //有固化,且程序可用,从固化树查询节点
         packageNode = ncNodeService.getLastEditionCuredProgramPackage(programPkgName);
      }else if(Func.isNotBlank(props.getDeviation())){
         //有偏离单
         packageNode = ncNodeService.getLastEditionDeviationProgramPackage(programPkgName);
      }else{
         //普通试切,或者有固化不可用
         packageNode = ncNodeService.getLastEditionTryingProgramPackage(programPkgName);
      }
      addApproveTable(packageNode,props);
      updateApproveRecordNodeId(instId,packageNode.getId());
      log.info("流程已完成in DispatchFinishListener");
      updateApproveRecordNodeId(instId, packageNode.getId());
      log.info("普通流程已完成in DispatchFinishListener");
   }
   /**
@@ -72,12 +69,11 @@
    * @param progProperties æµç¨‹å±žæ€§
    */
   void createProgramNodes(FlowProgramProperties progProperties){
      if(!FlowContants.Y.equals(progProperties.getHasCuredProgram())) {
         //试切或者偏离
      if(FlowContants.N.equals(progProperties.getHasCuredProgram())) {
         //无固化(试切或者偏离)
         ncNodeAutoCreateService.createNodeTreeWithProgram(progProperties);
      }else{
         //有固化
         //TODO è¿˜è¦åŒºåˆ†æ˜¯å¦å¯ç”¨åˆ¤å®šæ˜¯å¦å¯ç”¨ã€‚可用界
         //有固化,程序不可用
         if(FlowContants.N.equals(progProperties.getCureProgramUseable())) {
            //固化程序不可用,需要重新建立程序包名和文件节点;可用情况在流程审批中已经升级过节点了
            NcNode curedProgramPackage = ncNodeService.getById(Func.toLong(progProperties.getCuredNodeId()));