Activiti7学习_2

Activiti7_2

0、观看提醒

Activiti基础案例的测试方法基于我上一个篇章“Activiti 7学习_1”部署环境运行的

Activiti 7学习_1路径

一、Activiti的25张表

在这里插入图片描述

表名介绍
act_evt_log流程引擎通用日志表
act_procdef_info流程定义的动态变更信息
ACT_GE_*:
全局通用数据及设置(general),各种情况都使用的数据。
表名介绍
act_ge_bytearray二进制表,存储通用的流程资源
act_ge_property系统存储表,存储整个流程引擎数据,默认存储三条数据
ACT_RE_*:
’RE’表示repository(存储),RepositoryService接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)
表名介绍
act_re_deployment部署信息表
act_re_model流程设计实体表
act_re_procdef流程定义数据表
ACT_RU_*:
‘RU’表示runtime,运行时表-RuntimeService。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
表名介绍
act_ru_deadletter_job作业失败表,失败次数>重试次数
act_ru_event_subscr运行时事件表
act_ru_execution运行时流程执行实例表
act_ru_identitylink运行时用户信息表
act_ru_integration运行时综合表
act_ru_job作业表
act_ru_suspended_job作业暂停表
act_ru_task运行时任务信息表
act_ru_timer_job运行时定时器表
act_ru_variable运行时变量表
ACT_HI_*:
’HI’表示history,历史数据表,HistoryService。就是这些表包含着流程执行的历史相关数据,如结束的流程实例,变量,任务,等等
表名介绍
act_hi_actinst历史节点表
act_hi_attachment历史附件表
act_hi_comment历史意见表
act_hi_detail历史详情表
act_hi_identitylink历史用户信息表
act_hi_procinst历史流程实例表
act_hi_taskinst历史任务实例表
act_hi_varinst历史变量表

二、Activiti的6大服务

1、服务介绍
服务名介绍
RepositoryServiceActiviti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等 ),这些文件都存储在 Activiti 内建的 Repository 中。Repository Service 提供了对 repository 的存取服务。
RuntimeService在 Activiti 中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。Runtime Service 提供了启动流程、查询流程实例、设置获取流程实例变量等功能。此外它还提供了对流程部署,流程定义和流程实例的存取服务。
TaskService在 Activiti 中业务流程定义中的每一个执行节点被称为一个 Task,对流程中的数据存取,状态变更等操作均需要在 Task 中完成。Task Service 提供了对用户 Task 和 Form 相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。
ManagementServiceManagement Service 提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。
HistoryServiceHistory Service 用于获取正在运行或已经完成的流程实例的信息,与 Runtime Service 中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。
DynamicBpmnService提供对流程定义和部署存储库的访问的服务。
2、服务获取
public void test(){


    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 运行服务
     */
    RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();

    /**
     * 资源服务
     */
    RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();

    /**
     * 任务服务
     */
    TaskService taskService = defaultProcessEngine.getTaskService();

    /**
     * 历史服务
     */
    HistoryService historyService = defaultProcessEngine.getHistoryService();

    /**
     * 动态流程资源服务
     */
    DynamicBpmnService dynamicBpmnService = defaultProcessEngine.getDynamicBpmnService();

    /**
     * activiti管理服务
     */
    ManagementService managementService = defaultProcessEngine.getManagementService();

    
}

三、Activiti基础案例

1、创建Activiti的数据库表
(1)测试方法
/**
 * 获取Activiti引擎来创建Activiti的数据库表
 */
@Test
public void createActivitiTable() {
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
     System.out.println(defaultProcessEngine);
     System.out.println("创建成功");
}
(2)运行截图

在这里插入图片描述

2、工作流部署
 /**
     * 工作流部署
     */
    @Test
    public void workflowDeployment() {

        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti资源服务
         */
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();

        /**
         * 资源服务创建一个部署对象
         */
        DeploymentBuilder deployment = repositoryService.createDeployment();

        /**
         * 设置工作流名称
         */
        deployment.name("出差申请工作流");
        /**
         * 添加bpmn资源文件
         */
        deployment.addClasspathResource("bpmn/evection.bpmn20.xml");
        /**
         * 开始部署
         */
        deployment.deploy();


//        链式编程
//        deployment.name("出差申请工作流")
//                .addClasspathResource("bpmn/evection.bpmn20.xml")
//                .deploy();


         System.out.println("工作流部署成功");
    }
(2)运行截图

在这里插入图片描述

3、流程启动,完整执行一个流程实例
(1)测试方法
/**
 * 流程启动
 */
@Test
public void startProcessInstance() {

    /**
     * 工作流key
     */
    String key = "evection";

    /**
     * 获取Activiti流程引擎
     */
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 获取Activiti运行服务
     */
    RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();

    /**
     * 根据工作流key启动一个流程实例
     */
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key);

     System.out.println("流程定义id = " + processInstance.getProcessDefinitionId());
     System.out.println("流程实例id = " + processInstance.getId());
     System.out.println("当前活动id = " + processInstance.getActivityId());
     System.out.println("流程启动成功....");

}


/**
 * 完成任务:出差申请
 */
@Test
public void completTask01() {

    /**
     * 工作流key
     */
    String key = "evection";

    /**
     * 任务负责人
     */
    String assignee = "张三";


    /**
     * 获取Activiti流程引擎
     */
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 获取Activiti任务服务
     */
    TaskService taskService = defaultProcessEngine.getTaskService();

    /**
     * 获取任务查询对象
     */
    TaskQuery taskQuery = taskService.createTaskQuery();


    /**
     * 根据流程定义key和任务负责人查询任务
     */
    List<Task> list = taskQuery
            .processDefinitionKey(key)
            .taskAssignee(assignee)
            .list();

    /**
     * 遍历并完成任务
     */
    list.stream().forEach(task -> {
         System.out.println("---------------------------------");
         System.out.println("流程定义id:" + task.getProcessDefinitionId());
         System.out.println("流程实例id:" + task.getProcessInstanceId());
         System.out.println("任务id:" + task.getId());
         System.out.println("任务名称:" + task.getName());
         System.out.println("任务负责人:" + task.getAssignee());
         System.out.println("开始完成任务...");
         System.out.println("---------------------------------");
        taskService.complete(task.getId());
         System.out.println("任务完成...");
    });
}


/**
 * 完成任务:组长审核
 */
@Test
public void completTask02() {

    /**
     * 工作流key
     */
    String key = "evection";

    /**
     * 任务负责人
     */
    String assignee = "李四";


    /**
     * 获取Activiti流程引擎
     */
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 获取Activiti任务服务
     */
    TaskService taskService = defaultProcessEngine.getTaskService();

    /**
     * 获取任务查询对象
     */
    TaskQuery taskQuery = taskService.createTaskQuery();


    /**
     * 根据流程定义key和任务负责人查询任务
     */
    List<Task> list = taskQuery
            .processDefinitionKey(key)
            .taskAssignee(assignee)
            .list();

    /**
     * 遍历并完成任务
     */
    list.stream().forEach(task -> {
         System.out.println("---------------------------------");
         System.out.println("流程定义id:" + task.getProcessDefinitionId());
         System.out.println("流程实例id:" + task.getProcessInstanceId());
         System.out.println("任务id:" + task.getId());
         System.out.println("任务名称:" + task.getName());
         System.out.println("任务负责人:" + task.getAssignee());
         System.out.println("开始完成任务...");
         System.out.println("---------------------------------");
        taskService.complete(task.getId());
         System.out.println("任务完成...");

    });
}


/**
 * 完成任务:经理审批
 */
@Test
public void completTask03() {

    /**
     * 工作流key
     */
    String key = "evection";

    /**
     * 任务负责人
     */
    String assignee = "王五";


    /**
     * 获取Activiti流程引擎
     */
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 获取Activiti任务服务
     */
    TaskService taskService = defaultProcessEngine.getTaskService();

    /**
     * 获取任务查询对象
     */
    TaskQuery taskQuery = taskService.createTaskQuery();


    /**
     * 根据流程定义key和任务负责人查询任务
     */
    List<Task> list = taskQuery
            .processDefinitionKey(key)
            .taskAssignee(assignee)
            .list();

    /**
     * 遍历并完成任务
     */
    list.stream().forEach(task -> {
         System.out.println("---------------------------------");
         System.out.println("流程定义id:" + task.getProcessDefinitionId());
         System.out.println("流程实例id:" + task.getProcessInstanceId());
         System.out.println("任务id:" + task.getId());
         System.out.println("任务名称:" + task.getName());
         System.out.println("任务负责人:" + task.getAssignee());
         System.out.println("开始完成任务...");
         System.out.println("---------------------------------");
        taskService.complete(task.getId());
         System.out.println("任务完成...");
    });
}
(2)运行截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、获取历史信息
(1)测试方法
/**
 * 根据流程实例id查询流程实例任务完成后的历史信息
 */
@Test
public void queryHistoryInfoById() {


    /**
     * 任务负责人
     */
    String id = "2501";


    /**
     * 获取Activiti流程引擎
     */
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 获取历史服务类
     */
    HistoryService historyService = defaultProcessEngine.getHistoryService();

    /**
     * 获取历史活动实例查询对象
     */
    HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();

    /**
     * 根据流程实例id查询,并根据活动实例启动事件排序,正序
     */
    List<HistoricActivityInstance> list = historicActivityInstanceQuery.processInstanceId(id)
            .orderByHistoricActivityInstanceStartTime()
            .asc()
            .list();

    /**
     * 遍历
     */
    list.stream().forEach(historicActivityInstance -> {
         System.out.println("----------------------");
         System.out.println("流程定义id:" + historicActivityInstance.getProcessDefinitionId());
         System.out.println("流程实例id:" + historicActivityInstance.getProcessInstanceId());
         System.out.println("历史任务id:" + historicActivityInstance.getActivityId());
         System.out.println("历史任务名称:" + historicActivityInstance.getActivityName());
         System.out.println("历史任务负责人" + historicActivityInstance.getAssignee());
         System.out.println("历史任务开始时间:" + historicActivityInstance.getStartTime());
        if (historicActivityInstance.getEndTime() != null) {
             System.out.println("任务已完成...");
             System.out.println("历史任务结束时间:" + historicActivityInstance.getEndTime());
        } else {
             System.out.println("任务未完成...");
        }
         System.out.println("----------------------");
    });

}
(2)运行截图

在这里插入图片描述

5、查询流程实例
(1)测试方法
/**
 * 根据流程定义key查询该流程启动的流程实例
 */
@Test
public void queryProcessInstanceBykey() {

    /**
     * 工作流key
     */
    String key = "evection";

    /**
     * 获取Activiti流程引擎
     */
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 获取Activiti运行服务
     */
    RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();


    /**
     * 获取流程实例查询对象
     */
    ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();

    /**
     * 根据流程定义key查询
     */
    List<ProcessInstance> processInstanceList = processInstanceQuery.processDefinitionKey(key).list();

    /**
     * 遍历
     */
    processInstanceList.stream().forEach(processInstance -> {
         System.out.println("---------------------------------");
         System.out.println("流程实例id:" + processInstance.getId());
         System.out.println("流程实例名称:" + processInstance.getName());
         System.out.println("---------------------------------");
    });


}
6、查询任务
(1)测试方法
    /**
     * 根据流程实例id查询任务
     */
    @Test
    public void queryTaskById() {
        /**
         * 流程实例id
         */
        String id = "2501";

        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti任务服务
         */
        TaskService taskService = defaultProcessEngine.getTaskService();

        /**
         * 获取任务查询对象
         */
        TaskQuery taskQuery = taskService.createTaskQuery();

        /**
         * 根据流程实例id查询
         */
        List<Task> taskList = taskQuery.processInstanceId(id).list();

        /**
         * 遍历
         */
        taskList.stream().forEach(task -> {
             System.out.println("---------------------------------");
             System.out.println("流程定义id:" + task.getProcessDefinitionId());
             System.out.println("流程实例id:" + task.getProcessInstanceId());
             System.out.println("任务id:" + task.getId());
             System.out.println("任务名称:" + task.getName());
             System.out.println("任务负责人:" + task.getAssignee());
             System.out.println("---------------------------------");
        });
    }


    /**
     * 根据负责人,查询该负责人的任务
     */
    @Test
    public void queryTaskByAssignee() {
        /**
         * 流程实例id
         */
        String assignee = "张三";

        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti任务服务
         */
        TaskService taskService = defaultProcessEngine.getTaskService();

        /**
         * 获取任务查询对象
         */
        TaskQuery taskQuery = taskService.createTaskQuery();

        /**
         * 根据任务负责人查询
         */
        List<Task> taskList = taskQuery.taskAssignee(assignee).list();

        /**
         * 遍历
         */
        taskList.stream().forEach(task -> {
             System.out.println("---------------------------------");
             System.out.println("流程定义id:" + task.getProcessDefinitionId());
             System.out.println("流程实例id:" + task.getProcessInstanceId());
             System.out.println("任务id:" + task.getId());
             System.out.println("任务名称:" + task.getName());
             System.out.println("任务负责人:" + task.getAssignee());
             System.out.println("---------------------------------");
        });

    }
7、下载部署的资源文件
(1)测试方法
/**
 * 下载部署的资源文件
 */
@Test
public void downloadingResourceFiles() throws IOException {

    /**
     * 工作流key
     */
    String key = "evection";


    /**
     * 获取Activiti流程引擎
     */
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 获取资源服务类
     */
    RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();


    /**
     * 获取流程定义查询对象
     */
    ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();


    /**
     * 根据流程定义key查询流程定义
     */
    ProcessDefinition evection = processDefinitionQuery.processDefinitionKey("evection").singleResult();

    /**
     * 获取部署id
     */
    String deploymentId = evection.getDeploymentId();


    /**
     * 读取数据库bpmn文件
     */
    String resourceName = evection.getResourceName();
    InputStream resourceAsStream = repositoryService.getResourceAsStream(deploymentId, resourceName);


    /**
     * 构造输出流
     */
    File file = new File("C:\\Users\\dashu\\Desktop\\学习笔记\\Activiti\\"+resourceName);
    FileOutputStream fileOutputStream = new FileOutputStream(file);

    /**
     * 输入流转输出流
     */
    IOUtils.copy(resourceAsStream, fileOutputStream);


    /**
     * 关闭流
     */
    fileOutputStream.close();
    resourceAsStream.close();

     System.out.println("下载完成...");


}
8、根据流程定义id删除流程
(1)测试方法
/**
 * 根据流程定义id删除流程
 */
@Test
public void deleteProcessById(){

    /**
     * 流程定义id
     */
    String id = "1";

    /**
     * 获取Activiti流程引擎
     */
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 获取资源服务类
     */
    RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();

    /**
     * 根据流程定义id删除流程
     *
     * 当有流程实例未完成时,使用deleteDeployment(id)会报错
     * 需使用repositoryService.deleteDeployment(id,true)来完成
     *
     */
    repositoryService.deleteDeployment(id);
    //repositoryService.deleteDeployment(id,true);

     System.out.println("删除完成...");
}
9、完整测试类
package com.dahu.test;

import org.activiti.engine.*;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricActivityInstanceQuery;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.runtime.ProcessInstanceQuery;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @Author: dashu
 * @Description: Activiti测试类
 * @Date: 2022/1/24 21:35
 * @Version: 1.0
 */
public class ActivitiTest {


    private static Logger logger = Logger.getLogger(ActivitiTest.class);


    /**
     * 获取Activiti引擎来创建Activiti的数据库表
     */
    @Test
    public void createActivitiTable() {
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
         System.out.println(defaultProcessEngine);
         System.out.println("创建成功");
    }


    /**
     * 工作流部署
     */
    @Test
    public void workflowDeployment() {

        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti资源服务
         */
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();

        /**
         * 资源服务创建一个部署对象
         */
        DeploymentBuilder deployment = repositoryService.createDeployment();

        /**
         * 设置工作流名称
         */
        deployment.name("出差申请工作流");
        /**
         * 添加bpmn资源文件
         */
        deployment.addClasspathResource("bpmn/evection.bpmn20.xml");
        /**
         * 开始部署
         */
        deployment.deploy();


//        链式编程
//        deployment.name("出差申请工作流")
//                .addClasspathResource("bpmn/evection.bpmn20.xml")
//                .deploy();


         System.out.println("工作流部署成功");
    }


    /**
     * 流程启动
     */
    @Test
    public void startProcessInstance() {

        /**
         * 工作流key
         */
        String key = "evection";

        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti运行服务
         */
        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();

        /**
         * 根据工作流key启动一个流程实例
         */
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key);

         System.out.println("流程定义id = " + processInstance.getProcessDefinitionId());
         System.out.println("流程实例id = " + processInstance.getId());
         System.out.println("当前活动id = " + processInstance.getActivityId());
         System.out.println("流程启动成功....");

    }


    /**
     * 完成任务:出差申请
     */
    @Test
    public void completTask01() {

        /**
         * 工作流key
         */
        String key = "evection";

        /**
         * 任务负责人
         */
        String assignee = "张三";


        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti任务服务
         */
        TaskService taskService = defaultProcessEngine.getTaskService();

        /**
         * 获取任务查询对象
         */
        TaskQuery taskQuery = taskService.createTaskQuery();


        /**
         * 根据流程定义key和任务负责人查询任务
         */
        List<Task> list = taskQuery
                .processDefinitionKey(key)
                .taskAssignee(assignee)
                .list();

        /**
         * 遍历并完成任务
         */
        list.stream().forEach(task -> {
             System.out.println("---------------------------------");
             System.out.println("流程定义id:" + task.getProcessDefinitionId());
             System.out.println("流程实例id:" + task.getProcessInstanceId());
             System.out.println("任务id:" + task.getId());
             System.out.println("任务名称:" + task.getName());
             System.out.println("任务负责人:" + task.getAssignee());
             System.out.println("开始完成任务...");
             System.out.println("---------------------------------");
            taskService.complete(task.getId());
             System.out.println("任务完成...");
        });
    }


    /**
     * 完成任务:组长审核
     */
    @Test
    public void completTask02() {

        /**
         * 工作流key
         */
        String key = "evection";

        /**
         * 任务负责人
         */
        String assignee = "李四";


        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti任务服务
         */
        TaskService taskService = defaultProcessEngine.getTaskService();

        /**
         * 获取任务查询对象
         */
        TaskQuery taskQuery = taskService.createTaskQuery();


        /**
         * 根据流程定义key和任务负责人查询任务
         */
        List<Task> list = taskQuery
                .processDefinitionKey(key)
                .taskAssignee(assignee)
                .list();

        /**
         * 遍历并完成任务
         */
        list.stream().forEach(task -> {
             System.out.println("---------------------------------");
             System.out.println("流程定义id:" + task.getProcessDefinitionId());
             System.out.println("流程实例id:" + task.getProcessInstanceId());
             System.out.println("任务id:" + task.getId());
             System.out.println("任务名称:" + task.getName());
             System.out.println("任务负责人:" + task.getAssignee());
             System.out.println("开始完成任务...");
             System.out.println("---------------------------------");
            taskService.complete(task.getId());
             System.out.println("任务完成...");

        });
    }


    /**
     * 完成任务:经理审批
     */
    @Test
    public void completTask03() {

        /**
         * 工作流key
         */
        String key = "evection";

        /**
         * 任务负责人
         */
        String assignee = "王五";


        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti任务服务
         */
        TaskService taskService = defaultProcessEngine.getTaskService();

        /**
         * 获取任务查询对象
         */
        TaskQuery taskQuery = taskService.createTaskQuery();


        /**
         * 根据流程定义key和任务负责人查询任务
         */
        List<Task> list = taskQuery
                .processDefinitionKey(key)
                .taskAssignee(assignee)
                .list();

        /**
         * 遍历并完成任务
         */
        list.stream().forEach(task -> {
             System.out.println("---------------------------------");
             System.out.println("流程定义id:" + task.getProcessDefinitionId());
             System.out.println("流程实例id:" + task.getProcessInstanceId());
             System.out.println("任务id:" + task.getId());
             System.out.println("任务名称:" + task.getName());
             System.out.println("任务负责人:" + task.getAssignee());
             System.out.println("开始完成任务...");
             System.out.println("---------------------------------");
            taskService.complete(task.getId());
             System.out.println("任务完成...");
        });
    }


    /**
     * 根据流程实例id查询流程实例任务完成后的历史信息
     */
    @Test
    public void queryHistoryInfoById() {


        /**
         * 任务负责人
         */
        String id = "2501";


        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取历史服务类
         */
        HistoryService historyService = defaultProcessEngine.getHistoryService();

        /**
         * 获取历史活动实例查询对象
         */
        HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();

        /**
         * 根据流程实例id查询,并根据活动实例启动事件排序,正序
         */
        List<HistoricActivityInstance> list = historicActivityInstanceQuery.processInstanceId(id)
                .orderByHistoricActivityInstanceStartTime()
                .asc()
                .list();

        /**
         * 遍历
         */
        list.stream().forEach(historicActivityInstance -> {
             System.out.println("----------------------");
             System.out.println("流程定义id:" + historicActivityInstance.getProcessDefinitionId());
             System.out.println("流程实例id:" + historicActivityInstance.getProcessInstanceId());
             System.out.println("历史任务id:" + historicActivityInstance.getActivityId());
             System.out.println("历史任务名称:" + historicActivityInstance.getActivityName());
             System.out.println("历史任务负责人" + historicActivityInstance.getAssignee());
             System.out.println("历史任务开始时间:" + historicActivityInstance.getStartTime());
            if (historicActivityInstance.getEndTime() != null) {
                 System.out.println("任务已完成...");
                 System.out.println("历史任务结束时间:" + historicActivityInstance.getEndTime());
            } else {
                 System.out.println("任务未完成...");
            }
             System.out.println("----------------------");
        });

    }


    /**
     * 根据流程定义key查询该流程启动的流程实例
     */
    @Test
    public void queryProcessInstanceBykey() {

        /**
         * 工作流key
         */
        String key = "evection";

        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti运行服务
         */
        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();


        /**
         * 获取流程实例查询对象
         */
        ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();

        /**
         * 根据流程定义key查询
         */
        List<ProcessInstance> processInstanceList = processInstanceQuery.processDefinitionKey(key).list();

        /**
         * 遍历
         */
        processInstanceList.stream().forEach(processInstance -> {
             System.out.println("---------------------------------");
             System.out.println("流程实例id:" + processInstance.getId());
             System.out.println("流程实例名称:" + processInstance.getName());
             System.out.println("---------------------------------");
        });


    }


    /**
     * 根据流程实例id查询任务
     */
    @Test
    public void queryTaskById() {
        /**
         * 流程实例id
         */
        String id = "2501";

        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti任务服务
         */
        TaskService taskService = defaultProcessEngine.getTaskService();

        /**
         * 获取任务查询对象
         */
        TaskQuery taskQuery = taskService.createTaskQuery();

        /**
         * 根据流程实例id查询
         */
        List<Task> taskList = taskQuery.processInstanceId(id).list();

        /**
         * 遍历
         */
        taskList.stream().forEach(task -> {
             System.out.println("---------------------------------");
             System.out.println("流程定义id:" + task.getProcessDefinitionId());
             System.out.println("流程实例id:" + task.getProcessInstanceId());
             System.out.println("任务id:" + task.getId());
             System.out.println("任务名称:" + task.getName());
             System.out.println("任务负责人:" + task.getAssignee());
             System.out.println("---------------------------------");
        });
    }


    /**
     * 根据负责人,查询该负责人的任务
     */
    @Test
    public void queryTaskByAssignee() {
        /**
         * 流程实例id
         */
        String assignee = "张三";

        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取Activiti任务服务
         */
        TaskService taskService = defaultProcessEngine.getTaskService();

        /**
         * 获取任务查询对象
         */
        TaskQuery taskQuery = taskService.createTaskQuery();

        /**
         * 根据任务负责人查询
         */
        List<Task> taskList = taskQuery.taskAssignee(assignee).list();

        /**
         * 遍历
         */
        taskList.stream().forEach(task -> {
             System.out.println("---------------------------------");
             System.out.println("流程定义id:" + task.getProcessDefinitionId());
             System.out.println("流程实例id:" + task.getProcessInstanceId());
             System.out.println("任务id:" + task.getId());
             System.out.println("任务名称:" + task.getName());
             System.out.println("任务负责人:" + task.getAssignee());
             System.out.println("---------------------------------");
        });

    }



    /**
     * 下载部署的资源文件
     */
    @Test
    public void downloadingResourceFiles() throws IOException {

        /**
         * 工作流key
         */
        String key = "evection";


        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取资源服务类
         */
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();


        /**
         * 获取流程定义查询对象
         */
        ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();


        /**
         * 根据流程定义key查询流程定义
         */
        ProcessDefinition evection = processDefinitionQuery.processDefinitionKey("evection").singleResult();

        /**
         * 获取部署id
         */
        String deploymentId = evection.getDeploymentId();


        /**
         * 读取数据库bpmn文件
         */
        String resourceName = evection.getResourceName();
        InputStream resourceAsStream = repositoryService.getResourceAsStream(deploymentId, resourceName);


        /**
         * 构造输出流
         */
        File file = new File("C:\\Users\\dashu\\Desktop\\学习笔记\\Activiti\\"+resourceName);
        FileOutputStream fileOutputStream = new FileOutputStream(file);

        /**
         * 输入流转输出流
         */
        IOUtils.copy(resourceAsStream, fileOutputStream);


        /**
         * 关闭流
         */
        fileOutputStream.close();
        resourceAsStream.close();

         System.out.println("下载完成...");


    }


    /**
     * 根据流程定义id删除流程
     */
    @Test
    public void deleteProcessById(){

        /**
         * 流程定义id
         */
        String id = "1";

        /**
         * 获取Activiti流程引擎
         */
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /**
         * 获取资源服务类
         */
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();

        /**
         * 根据流程定义id删除流程
         *
         * 当有流程实例未完成时,使用deleteDeployment(id)会报错
         * 需使用repositoryService.deleteDeployment(id,true)来完成
         *
         */
        repositoryService.deleteDeployment(id);
        //repositoryService.deleteDeployment(id,true);

         System.out.println("删除完成...");
    }


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大树下躲雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值