Activiti
项目中有流程审批的需求,为了应对更多需求,决定加入工作流,选用activiti。本篇旨在入门认识
jar依赖
本该使用5或者6的版本,这里是为了学习,加的7版本。本该集成springboot的,因其需要springSecurity,故用原始jar
<properties>
<activiti.version>7.1.0.M6</activiti.version>
<activiti.cloud.version>7-201802-EA</activiti.cloud.version>
</properties>
需要以来的jar
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-converter</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>${activiti.version}</version>
</dependency>
示例
流程示例图
指定任务名称
指定任务处理人
如果找不到Properties,Window -> Show View —> Other —> General —> Properties
测试代码
@Slf4j
@RunWith(SpringRunner.class)
@ActiveProfiles("dev5566")
@SpringBootTest
public class ActivitiTest {
@Autowired
ProcessEngineConfiguration configuration;
/**
* 生成表结构
*/
@Test
public void testGenTable() { // 1.创建一个ProcessonEngineConfig对象
// 创建 ProcessonEngine 对象 ProcessEngine processEngine =
ProcessEngine processEngine = configuration.buildProcessEngine(); // 3.输出测试
System.out.println("------------->" + processEngine);
log.error("******************>" + processEngine.getName());
}
/**
* 流程部署
*/
@Test
public void testDeployment() {
// 创建processEngine对象
ProcessEngine processEngine = configuration.buildProcessEngine();
// 得到RepositoryService
RepositoryService repositoryService = processEngine.getRepositoryService(); // 与流程定义部署相关的service
// 进行部署
Deployment deployment = repositoryService.createDeployment() // 创建一个对象
.addClasspathResource("diagram/aa.bpmn") // 一次只能加载一个文件,加载流程定义
.addClasspathResource("diagram/aa.png") // 一次只能加载一个文件,加载图片
.name("请假流程") // 起一个名字
.deploy(); // 进行部署
System.out.println("部署ID " + deployment.getId()); // 部署ID 10001
System.out.println("部署名称 " + deployment.getName()); // 部署名称 请假流程
}
/**
* 启动流程实例 使用key启动默认是使用流程最新版本的流程定义启动
*/
@Test
public void startProcessTest() {
ProcessEngine processEngine = configuration.buildProcessEngine();
String processDefinitionKey = "helloworld";
ProcessInstance processInstance = processEngine.getRuntimeService() // 与正在执行的流程实例和执行对象相关的service
.startProcessInstanceByKey(processDefinitionKey); // 使用流程定义的key启动流程实例.key对应helloworld.bppmn文件中ID的属性值;
System.out.println("流程实例ID " + processInstance.getId()); // 流程实例ID 12501
System.out.println("流程定义ID " + processInstance.getProcessDefinitionId()); // 流程定义ID helloworld:5:10004
}
/**
* 查询当前个人任务
*/
@Test
public void findMyTaskTest() {
ProcessEngine processEngine = configuration.buildProcessEngine();
String assignee = "张三";
List<Task> list = processEngine.getTaskService() // 和任务相关的service
.createTaskQuery() // 创建任务查询对象
.taskAssignee(assignee).list(); // 指定个人任务查询.指定办理人
if (CollectionUtils.isEmpty(list)) {
return;
}
for (Task task : list) {
System.out.println("任务ID " + task.getId()); // 任务ID 12505
System.out.println("任务名称 " + task.getName()); // 任务名称 提交请假单
System.out.println("任务的创建时间 " + task.getCreateTime()); // 任务的创建时间 Thu Aug 27 11:57:56 CST 2020
System.out.println("任务的办理人 " + task.getAssignee()); // 任务的办理人 张三
System.out.println("流程实例ID " + task.getProcessInstanceId()); // 流程实例ID 12501
System.out.println("流程对象ID " + task.getExecutionId()); // 流程对象ID 12502
System.out.println("流程定义ID " + task.getProcessDefinitionId()); // 流程定义ID helloworld:5:10004
System.out.println("----------------------------------------------");
}
}
/** 完成我的任务 */
@Test
public void completeMyProcessTask() {
ProcessEngine processEngine = configuration.buildProcessEngine();
String taskId = "12505";
processEngine.getTaskService().complete(taskId);
System.out.println("完成任务, 任务ID: " + taskId);
}
/**
* 查询当前个人任务
*/
@Test
public void findMyTaskTestLiSi() {
ProcessEngine processEngine = configuration.buildProcessEngine();
String assignee = "李四";
List<Task> list = processEngine.getTaskService() // 和任务相关的service
.createTaskQuery() // 创建任务查询对象
.taskAssignee(assignee).list(); // 指定个人任务查询.指定办理人
if (CollectionUtils.isEmpty(list)) {
System.out.println(assignee + "当前没有需要处理的任务");
return;
}
for (Task task : list) {
System.out.println("任务ID " + task.getId()); // 任务ID 12505
System.out.println("任务名称 " + task.getName()); // 任务名称 提交请假单
System.out.println("任务的创建时间 " + task.getCreateTime()); // 任务的创建时间 Thu Aug 27 12:47:26 CST 2020
System.out.println("任务的办理人 " + task.getAssignee()); // 任务的办理人 李四
System.out.println("流程实例ID " + task.getProcessInstanceId()); // 流程实例ID 12501
System.out.println("流程对象ID " + task.getExecutionId()); // 流程对象ID 12502
System.out.println("流程定义ID " + task.getProcessDefinitionId()); // 流程定义ID helloworld:5:10004
System.out.println("----------------------------------------------");
}
}
}