package com.zkqy.execution.produce.dispersed.service;


import com.zkqy.common.core.domain.AjaxResult;
import com.zkqy.execution.produce.dispersed.entity.runbpm.BpmRunNodeFromVo;
import com.zkqy.execution.produce.dispersed.entity.runbpm.IRunBPMEntity;
import com.zkqy.system.entity.CommonEntity;

/**
 * 执行流程节点接口
 * 作用： 仅为一个标识接口，实现类可以直接被注入到流程执行引擎。
 *
 * @author hzh
 */
public interface IRunBPMService {

    /**
     * 当前节点表单的回显数据
     *
     * @param iRunBPMEntity
     * @return
     */
    CommonEntity getNodeFormData(BpmRunNodeFromVo bpmRunNodeFromVo);


//    AjaxResult submitNodeForm(CommonEntity commonEntity);


    /**
     * 前置验证节点
     *
     * @param iRunBPMEntity 节点执行参数
     * @return
     */
    AjaxResult preValidation(IRunBPMEntity iRunBPMEntity);


    /**
     * 节点执行流程
     *
     * @param iRunBPMEntity 节点执行参数
     * @return
     */
    AjaxResult executeNode(IRunBPMEntity iRunBPMEntity);

    /**
     * 后置验证节点
     *
     * @param iRunBPMEntity 节点执行参数
     * @return
     */
    AjaxResult afterValidation(IRunBPMEntity iRunBPMEntity);

    /**
     * 验证脚本bean是否存在 在流程执行前会验证当前流程所绑定的节点脚本等
     * 或其他验证使用
     *
     * @return
     */
    boolean isVerificationMethod();

    /**
     * 用来清理prototype作用域bean 因spring不会帮助清理
     * 注：定义成prototype类型的bean，可以避免并发的操作。applicationContext.getBean() 每次都会返回一个新的实例
     */
    boolean preDestroy();


}
