package cn.axzo.workflow.core.listener;

import cn.axzo.workflow.core.common.context.OperationContext;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.core.Ordered;

/**
 * 流程审批任务相关事件, 供外部引入 jar 包方式使用的钩子
 * <p>
 * 微服版本使用, 统一在 Server module 中进行实现扩展, 不在该 module 中实现.
 *
 * 特别注意: 在 Flowable Engine 中 onAssigned 执行优先级比 onCreated 更高
 *
 * @author shao_hua
 */
public interface BpmnTaskEventListener extends OperationContext, Ordered {

    /**
     * 用户任务已指派审核人
     */
    default void onAssigned(DelegateTask delegateTask) {}

    /**
     * 用户任务已创建,未指派审核人
     */
    default void onCreated(DelegateTask delegateTask) {}

    /**
     * 用户任务已通过
     * <p>
     * 仅审核通过一个用户任务时触发, 如果任务是驳回了, 则直接走实例撤回事件
     */
    default void onCompleted(DelegateTask delegateTask) {}

    /**
     * 用户任务已删除
     *
     * 删除不代表驳回或拒绝,因为通过也会走该事件
     */
    default void onDeleted(DelegateTask delegateTask) {}

}
