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


import com.ruoyi.common.core.domain.AjaxResult;

import java.util.Map;

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

    /**
     * 前置验证节点
     *
     * @param executionFlowKey 执行流程key
     * @param executionNodeKey 执行节点key
     * @param executionMap     其他执行参数
     * @return
     */
    AjaxResult preValidation(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap);


    /**
     * 节点执行流程
     *
     * @param executionFlowKey 执行流程key
     * @param executionNodeKey 执行节点key
     * @param executionMap     其他执行参数
     * @return
     */
    AjaxResult executeNode(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap);

    /**
     * 后置验证节点
     *
     * @param executionFlowKey 执行流程key
     * @param executionNodeKey 执行节点key
     * @param executionMap     其他执行参数
     * @return
     */
    AjaxResult afterValidation(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap);

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

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


}
