package com.ruoyi.flowable.factory;

import lombok.Getter;
import org.flowable.engine.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * flowable 引擎注入封装, 这个是流程引擎的封装。
 * @author XuanXuan
 * @date 2021-04-03
 */
@Component
@Getter
public class FlowServiceFactory {

    /**
     * 提供了管理与控制部署(deployments)与流程定义(process definitions)的操作
     */
    @Resource
    protected RepositoryService repositoryService;

    @Resource
    protected RuntimeService runtimeService;

    /**
     * 用于管理（创建，更新，删除，查询……）组与用户,Flowable实际上在运行时并不做任
     * 何用户检查。例如任务可以分派给任何用户，而引擎并不会验证系统中是否存在该用户
     */
    @Resource
    protected IdentityService identityService;

    @Resource
    protected TaskService taskService;

    @Resource
    protected FormService formService;
    /**
     * 暴露Flowable引擎收集的所有历史数据。当执行流程时，引擎会保存许多数据（可配置），
     * 例如流程实例启动时间、谁在执行哪个任务、完成任务花费的事件、每个流程实例的执行路
     * 径，等等。这个服务主要提供查询这些数据的能力。
     */
    @Resource
    protected HistoryService historyService;

    /**
     * 暴露通常在用Flowable编写用户应用时不需要使用。它可以读取数据库表与表原始数据的信
     * 息，也提供了对作业(job)的查询与管理操作。Flowable中很多地方都使用作业，例如定时
     * 器(timer)，异步操作(asynchronous continuation)，延时暂停/激活(delayed
     * suspension/activation)等等
     */
    @Resource
    protected ManagementService managementService;

    @Qualifier("processEngine")
    @Resource
    protected ProcessEngine processEngine;

}
