首先,eclipse添加activiti插件,操作自行百度。
新建一个activiti project,添加activiti.cfg.xml,设置数据库连接,注意MySQL中应已有activiti数据库:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
<property name="databaseSchemaUpdate" value="true"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useSSL=false"></property>
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="password" />
</bean>
</beans>
画请假流程图MyProcess.bpmn:
张三提交请假申请:
项目经理李四审批申请:
部门经理王五审批申请:
eclipse自动按流程图生成PNG。
接下来在数据库中建表,新建createTable.java:
package activitiTest_03;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;
public class createTable {
/** 使用配置文件创建工作流需要的25张表 */
@Test
public void creteTable_2() {
ProcessEngine processEngine = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti.cfg.xml").buildProcessEngine();
}
}
数据库中新增25张表:
项目结构如下:
接下来新建ActivitiTest.java来测试流程,每次替换@test内容,通过run as->Junit Test运行。
1. 按照MyProcess.bpmn部署一个新流程:
@Test
public void creatActivitiTask() throws FileNotFoundException{
FileInputStream bpmnStream = new FileInputStream("/home/cxy/eclipse-workspace/activitiTest_03/src/main/resources/diagrams/MyProcess.bpmn");
//得到流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getRepositoryService()
.createDeployment()
.addInputStream("MyProcess.bpmn", bpmnStream)
.deploy();
System.out.println("部署");
}
输出:部署
表act_re_procdef:
表act_re_deployment:
2. 启动刚刚部署的流程:
@Test
public void testStartProcessInstance(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getRuntimeService()
.startProcessInstanceById("myProcess:1:4"); //这个是act_re_procdef表ID
System.out.println("启动");
}
输出:启动
表act_ru_execution:usertask1是流程节点id
表act_ru_task:
3. 申请者查询当前正在执行任务
@Test
public void testQueryTask(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
List<Task> tasks = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee("zhangsan")
.list();
for (Task task : tasks) {
System.out.println(task.getName());
System.out.println("代办任务ID:"+task.getId());
System.out.println("代办任务name:"+task.getName());
System.out.println("代办任务创建时间:"+task.getCreateTime());
System.out.println("代办任务办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
}
}
输出:
tijiao
代办任务ID:12504
代办任务name:tijiao
代办任务创建时间:Fri May 17 17:43:55 CST 2019
代办任务办理人:zhangsan
流程实例ID:12501
执行对象ID:12501
4. 申请者完成任务
@Test
public void testFinishTask_manager(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
engine.getTaskService()
.complete("12504"); //查看act_ru_task数据表id
System.out.println("完成任务,到李四");
}
输出:完成任务,到李四
5. 项目经理李四查询任务
@Test
public void testQueryTask(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
List<Task> tasks = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee("lisi")
.list();
for (Task task : tasks) {
System.out.println(task.getName());
System.out.println("代办任务ID:"+task.getId());
System.out.println("代办任务name:"+task.getName());
System.out.println("代办任务创建时间:"+task.getCreateTime());
System.out.println("代办任务办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
}
}
输出:
projectLeader
代办任务ID:17502
代办任务name:projectLeader
代办任务创建时间:Mon May 20 15:12:42 CST 2019
代办任务办理人:lisi
流程实例ID:12501
执行对象ID:12501
表act_ru_task:
6. 项目经理完成任务
@Test
public void testFinishTask_manager(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
engine.getTaskService()
.complete("17502"); //查看act_ru_task数据表
System.out.println("完成任务,到王五");
}
输出:完成任务,到王五
7. 部门经理查询任务
@Test
public void testQueryTask(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
List<Task> tasks = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee("wangwu")
.list();
for (Task task : tasks) {
System.out.println(task.getName());
System.out.println("代办任务ID:"+task.getId());
System.out.println("代办任务name:"+task.getName());
System.out.println("代办任务创建时间:"+task.getCreateTime());
System.out.println("代办任务办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
}
}
输出:
department
代办任务ID:20002
代办任务name:department
代办任务创建时间:Mon May 20 15:17:35 CST 2019
代办任务办理人:wangwu
流程实例ID:12501
执行对象ID:12501
表act_ru_task:
8. 部门经理结束任务:
@Test
public void testFinishTask_Boss(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
processEngine.getTaskService()
.complete("20002"); //查看act_ru_task数据表
}
请假流程结束。