package com.example;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.Model;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.jupiter.api.Test;
import java.util.List;
/**
* 1.流程部署
* 2.流程发起
* 3.流程审核完成
* 4.前3个当中的查询
*/
class ActivitiTest01 {
/**
* 获取ProcessEngine对象的第一种方式
*/
@Test
public void test1(){
//通过 getDefaultProcessEngine()方法获取流程引擎对象 会加载resources下的activiti.cfg.xml
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(processEngine);
}
/**
* 基于Java代码获取ProcessEngine对象
*/
@Test
public void test2(){
ProcessEngine engine = ProcessEngineConfiguration
.createStandaloneInMemProcessEngineConfiguration()
.setJdbcUrl("jdbc:mysql://localhost:3306/activiti7")
.setJdbcDriver("com.mysql.cj.jdbc.Driver")
.setJdbcPassword("root")
.setJdbcUsername("root")
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
.buildProcessEngine();
System.out.println(engine);
}
/**
* 流程部署操作
*/
@Test
public void test3(){
// 1.获取ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 2.完成流程的部署操作 需要通过RepositoryService来完成
RepositoryService repositoryService = processEngine.getRepositoryService();
// 3.完成部署操作
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("flow/test1.bpmn20.xml")
.name("第一个流程") //流程部署的名称
.key("first") //流程部署的key
.category("动漫类") //流程部署的类别
.deploy();//是一个流程部署的行为 可以部署多个流程定义(act_re_procdef表)
System.out.println(deploy.getId());
System.out.println(deploy.getName());
System.out.println(deploy.getKey());
System.out.println(deploy.getCategory());
System.out.println(deploy.getDeploymentTime());
}
/**
* 查询当前部署的流程有哪些
*/
@Test
public void test4(){
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
// 查询有哪些部署的流程-->查询相关的流程定义信息
// repositoryService.createDeploymentQuery() 查询流程部署的相关信息
// repositoryService.createProcessDefinitionQuery() 查询部署的流程的相关的定义
//查询的是act_re_deployment(流程部署表)这张表的数据
List<Deployment> list = repositoryService.createDeploymentQuery().list();
for (Deployment deployment : list) {
System.out.println(deployment.getId());
System.out.println(deployment.getName());
}
//查询的是act_re_procdef(流程定义表)这张表的数据
List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().list();
for (ProcessDefinition processDefinition : processDefinitions) {
System.out.println(processDefinition.getId());
System.out.println(processDefinition.getName());
System.out.println(processDefinition.getDescription());
}
//查询的是act_re_model这张表的数据
List<Model> models = repositoryService.createModelQuery().list();
for (Model model : models) {
System.out.println(model.getId());
}
}
@Test
public void testQueryDeployment(){
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeploymentQuery().deploymentKey("first").latest().singleResult();
System.out.println(deployment.getId());
}
/**
* 发起一个流程
*/
@Test
public void test5(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 发起流程 需要通过 runtimeService 来实现
RuntimeService runtimeService = engine.getRuntimeService();
// 通过流程定义来启动流程 返回的是流程实例对象
//这里流程实例和流程定义 有点像实例和类的关系
ProcessInstance processInstance = runtimeService.startProcessInstanceById("test:1:3");//值是流程定义表act_re_procdef的ID_字段值
System.out.println(processInstance.getId());
System.out.println(processInstance.getDeploymentId());
System.out.println(processInstance.getDescription());
}
/**
* 待办查询
*/
@Test
public void test6(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 待办查询 执行中的任务处理通过 TaskService来实现
TaskService taskService = engine.getTaskService();
// Task 对象对应的其实就是 act_ru_task 这张表的记录
List<Task> list = taskService.createTaskQuery().taskAssignee("lisi").list();
if(list != null && list.size() > 0){
for (Task task : list) {
System.out.println(task.getId());//对应act_ru_task表的ID_字段
System.out.println(task.getName());//对应act_ru_task表的NAME_字段
System.out.println(task.getAssignee());//对应act_ru_task表的ASSIGNEE_字段
}
}else{
System.out.println("当前没有待办任务");
}
}
/**
* 任务审批-张三
*/
@Test
public void test7(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 做任务申请 也需要通过 TaskService 来实现
TaskService taskService = engine.getTaskService();
// 完成任务
taskService.complete("10005");//该值拿的是act_ru_task表的ID_字段值
}
/**
* 任务审批-李四
*/
@Test
public void test7lisi(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 做任务申请 也需要通过 TaskService 来实现
TaskService taskService = engine.getTaskService();
// 完成任务
taskService.complete("17502");//该值拿的是act_ru_task表的ID_字段值
}
}