activiti util (1)

一、xml

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
<process id="beck" name="测试流程" isExecutable="true">
<startEvent id="start" name="开始" activiti:initiator="${applyUserId}"></startEvent>
<userTask id="manager" name="上线领导审批" activiti:assignee="tom"></userTask>
<userTask id="hr" name="人事审批" activiti:assignee="xiaoxiao"></userTask>
<endEvent id="sid-100F784A-0EEB-4A77-A852-03B709F712B5"></endEvent>
<sequenceFlow id="sid-161808BF-58A5-4101-90F3-2D659DE303BE" sourceRef="manager" targetRef="hr"></sequenceFlow>
<sequenceFlow id="sid-2CF6A2AC-5986-4F06-832F-0A5C01457529" sourceRef="hr" targetRef="sid-100F784A-0EEB-4A77-A852-03B709F712B5"></sequenceFlow>
<sequenceFlow id="sid-BE6C82F9-64C0-4416-94B9-C00F4D06D952" sourceRef="start" targetRef="manager"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_beck">
<bpmndi:BPMNPlane bpmnElement="beck" id="BPMNPlane_beck">
<bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
<omgdc:Bounds height="30.0" width="30.0" x="150.0" y="45.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="manager" id="BPMNShape_manager">
<omgdc:Bounds height="80.0" width="100.0" x="270.0" y="15.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="hr" id="BPMNShape_hr">
<omgdc:Bounds height="80.0" width="100.0" x="465.0" y="20.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-100F784A-0EEB-4A77-A852-03B709F712B5" id="BPMNShape_sid-100F784A-0EEB-4A77-A852-03B709F712B5">
<omgdc:Bounds height="28.0" width="28.0" x="660.0" y="46.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-2CF6A2AC-5986-4F06-832F-0A5C01457529" id="BPMNEdge_sid-2CF6A2AC-5986-4F06-832F-0A5C01457529">
<omgdi:waypoint x="565.0" y="60.0"></omgdi:waypoint>
<omgdi:waypoint x="660.0" y="60.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-161808BF-58A5-4101-90F3-2D659DE303BE" id="BPMNEdge_sid-161808BF-58A5-4101-90F3-2D659DE303BE">
<omgdi:waypoint x="370.0" y="55.0"></omgdi:waypoint>
<omgdi:waypoint x="417.5" y="55.0"></omgdi:waypoint>
<omgdi:waypoint x="417.5" y="60.0"></omgdi:waypoint>
<omgdi:waypoint x="465.0" y="60.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-BE6C82F9-64C0-4416-94B9-C00F4D06D952" id="BPMNEdge_sid-BE6C82F9-64C0-4416-94B9-C00F4D06D952">
<omgdi:waypoint x="180.0" y="60.0"></omgdi:waypoint>
<omgdi:waypoint x="225.0" y="60.0"></omgdi:waypoint>
<omgdi:waypoint x="225.0" y="55.0"></omgdi:waypoint>
<omgdi:waypoint x="270.0" y="55.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

二、测试类
package com.albert.test03;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricProcessInstanceQuery;
import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@RunWith(SpringRunner.class)
@SpringBootTest
public class Test03ApplicationTests {

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

@Test
public void contextLoads() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println("==============" + processEngine.getName());
}

@Test
public void deployProcessDefinition() {

Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署相关的Service
.createDeployment()//创建部署对象
.addClasspathResource("bpmn/beck.bpmn20.xml")
.deploy();//完成部署

System.out.println("部署ID:" + deployment.getId());//部署ID:1
System.out.println("部署时间:" + deployment.getDeploymentTime());//部署时间
}

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

String processDefinitionKey = "beck";//流程定义的key,也就是bpmn中存在的ID

ProcessInstance pi = processEngine.getRuntimeService()//管理流程实例和执行对象,也就是表示正在执行的操作
.startProcessInstanceByKey(processDefinitionKey);////按照流程定义的key启动流程实例

System.out.println("流程实例ID:" + pi.getId());//流程实例ID:101
System.out.println("流程实例ID:" + pi.getProcessInstanceId());//流程实例ID:101
System.out.println("流程实例ID:" + pi.getProcessDefinitionId());//myMyHelloWorld:1:4
}

// 3.查看任务
@Test
public void quertTask() {
try {
ProcessEngine processEngine = ProcessEngines
.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();

String userId = "beck_guo";
//String userId = "fucai";
//String userId = "zhangsan";
//String userId = "xiaoxiao";
List<Task> tasks = taskService.createTaskQuery()
.taskAssignee(userId).list();
for (Task task : tasks) {
System.out.println("taskId:" + task.getId() + ",name:"
+ task.getName() + ",assignee:" + task.getAssignee()
+ ",ProcessInstanceId:" + task.getProcessInstanceId());
}
System.out.println("查讯任务结束");
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 会签操作
*
* 会签人账号集合
* @throws Exception
*/
@Test
public void jointProcess()
throws Exception {
String taskId="17505";
List<String> userCodes=new ArrayList<>();
userCodes.add("fucai");
userCodes.add("zhangsan");
for (String userCode : userCodes) {
TaskEntity task = (TaskEntity) processEngine.getTaskService().newTask(UUID.randomUUID().toString());
task.setAssignee(userCode);
task.setName(findTaskById(taskId).getName() + "-会签");
task.setProcessDefinitionId(findProcessDefinitionEntityByTaskId(
taskId).getId());
task.setProcessInstanceId(findProcessInstanceByTaskId(taskId)
.getId());
task.setParentTaskId(taskId);
task.setDescription("jointProcess");
processEngine.getTaskService().saveTask(task);
}
System.out.println("taskId:" + taskId+" ==会签线束");

}

// 5.办理任务
@Test
public void completeTask() throws Exception {
try {
ProcessEngine processEngine = ProcessEngines
.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
String taskId = "7e55dc2a-a4fd-4db3-b6a2-607e5f124605";
taskService.complete(taskId);
System.out.println("办理任务结束 taskId=" + taskId);
} catch (Exception e) {
e.printStackTrace();
}
}

// 历史流程实例查看(查找按照某个规则一共执行了多少次流程)
@Test
public void queryHistoricProcessInstance() throws Exception {
// 获取历史流程实例的查询对象
HistoricProcessInstanceQuery historicProcessInstanceQuery = processEngine.getHistoryService().createHistoricProcessInstanceQuery();
// 设置查询参数
historicProcessInstanceQuery
//过滤条件
.processDefinitionKey("beck")
// 分页条件
// .listPage(firstResult, maxResults)
// 排序条件
.orderByProcessInstanceStartTime().desc();
// 执行查询
List<HistoricProcessInstance> hpis = historicProcessInstanceQuery.list();
// 遍历查看结果
System.out.print("===================");
for (HistoricProcessInstance hpi : hpis) {
System.out.print("pid:" + hpi.getId() + ",");
System.out.print("pdid:" + hpi.getProcessDefinitionId() + ",");
System.out.print("startTime:" + hpi.getStartTime() + ",");
System.out.print("endTime:" + hpi.getEndTime() + ",");
System.out.print("duration:" + hpi.getDurationInMillis() + ",");
System.out.println("vars:" + hpi.getProcessVariables());
}

}

/**
* 根据任务ID获得任务实例
*
* @param taskId
* 任务ID
* @return
* @throws Exception
*/
private TaskEntity findTaskById(String taskId) throws Exception {
TaskEntity task = (TaskEntity) processEngine.getTaskService().createTaskQuery().taskId(
taskId).singleResult();
if (task == null) {
throw new Exception("任务实例未找到!");
}
return task;
}

/**
* 根据任务ID获取流程定义
*
* @param taskId 任务ID
* @return
* @throws Exception
*/
private ProcessDefinitionEntity findProcessDefinitionEntityByTaskId(
String taskId) throws Exception {
// 取得流程定义
ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) processEngine.getRepositoryService())
.getDeployedProcessDefinition(findTaskById(taskId)
.getProcessDefinitionId());

if (processDefinition == null) {
throw new Exception("流程定义未找到!");
}

return processDefinition;
}


/**
* 根据任务ID获取对应的流程实例
*
* @param taskId 任务ID
* @return
* @throws Exception
*/
private ProcessInstance findProcessInstanceByTaskId(String taskId)
throws Exception {
// 找到流程实例
ProcessInstance processInstance = processEngine.getRuntimeService()
.createProcessInstanceQuery().processInstanceId(
findTaskById(taskId).getProcessInstanceId())
.singleResult();
if (processInstance == null) {
throw new Exception("流程实例未找到!");
}
return processInstance;


}

}

三、activiti.cfg.xml
<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.StandaloneProcessEngineConfiguration">

<property name="jdbcUrl" value="jdbc:mysql://localhost:3309/test3" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="123456" />

<property name="databaseSchemaUpdate" value="true" />

<property name="jobExecutorActivate" value="false" />
<property name="asyncExecutorEnabled" value="true" />
<property name="asyncExecutorActivate" value="false" />

<property name="mailServerHost" value="mail.my-corp.com" />
<property name="mailServerPort" value="5025" />
</bean>

</beans>
四 pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.albert.test03</groupId>
<artifactId>test03</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test03</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
<activiti.version>5.22.0</activiti.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!--MySQL依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>

<!-- actviti begin -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-modeler</artifactId>
<version>${activiti.version}</version>
</dependency>

<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-diagram-rest</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- actviti end -->
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
posted @ 2019-06-10 14:47  albert_think  阅读(326)  评论(0编辑  收藏  举报