今天看到公司有一个项目,是关于activity工作流的,第一次接触,记录一下,方便巩固和之后的查询。
1.配置maven环境
2.运行测试代码
3.代码实现activity工作流
1.配置maven环境
activity是一个比较简单容易上手的工作流,主要操作分为一下步骤
- 利用activity插件画出需要的逻辑流程图
- 部署流程
- 启动流程
- 迭代处理流程
- 流程结束
(1)安装所需的画图插件(有在线安装和离线安装,建议是离线安装)
离线通过安装包来安装
下载链接:https://pan.baidu.com/s/1jZgTImyDFsQ62ttt5CyQKg,提取码:abw0
解压后,将 对应的plugins中j所有ar包(我的解压路径是:D:\activityWorkFlow\ActivitiDesigner\plugins)复制到maven工具的安装目录(
)下,然后删除configuration文件下的org.eclipse.update整个文件(不删掉的话,会报错的)

然后在 maven工具中选择help - install new software

点击进来后,选择 add - local… 选择画图插件解压后的位置,如下图:

验证是否安装成功,在maven工具中,点击 file - new - other...中 搜索activiti 如果出现 activiti diagram 和activiti project 两个文件 ,说明已经安装成功了。

2.运行测试代码
1.在maven工具中,新建一个maven工程

2.在pom.xml配置文件中导入需要依赖的jar包,以mysql数据库为例

<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>
<groupId>mavenPro</groupId>
<artifactId>activityWordFlow</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>activityWordFlow</name>
<url>http://maven.apache.org</url>
<properties>
</properties>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>6.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>6.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.5.7</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-jdk14 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
</dependencies>
</project>
注意:如果版本不对引起的报错,可以百度“maven中央仓库”,在里面找到对应依赖的jar包,复制粘贴,替换即可。
3.然后新建一个activiti.cfg.xml配置文件,来创建连接对应的数据库。
<?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"/>
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="qwer1234" />
</bean>
</beans>
4.新建一个java类,用来在msql数据库中创建表
package activityWordFlow;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
public class CreateTable {
public static void main(String[] args) {
ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
System.out.println("processEngine="+processEngine);
}
}
其中:是根据第3步的配置文件名称(activiti.cfg.xml),运行后,查看数据库,就会出现28张表,如下图:

5. 先把properties界面展示出来,方便之后使用。


6.以简单报销流程为例,在maven工具中,利用画图插件新建一个baoxiao.bpmn,如图:



7.在界面上palette(画板)中,把StartEvent节点拖出来即可,然后选择 new user task,新增一个用户,依次添加报销人、经理审批、财务审批和结束节点(EndEvent),添加完成后,如下图:

在该流程中的各个环节 ,配置属性 报销人---employee、经理审批---manager、财务审批 --- account,保存一下该流程



注:如果保存成功了,会有同名的.png图片生成,本例子中是baoxiao.png,如图:

如果没有生成的话,请在Window - preferences - save action 中,勾选 create process ...这一选项。

到第七步完成后,一个简单报销的activity工作流已经建好了,接下来就是要通过代码来实现该工作流。
3.代码实现activity工作流
package activityWordFlow;
import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
public class run {
/**
* 部署流程
* 执行完,就会像act_re_procdef、act_re_deployment和act_ge_bytearray三张表中,插入数据
*/
private static ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
public void delployFlow(){
Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的service
.createDeployment()//创建一个部署对象
.name("报销流程") //添加部署对象名称
.addClasspathResource("baoxiao.bpmn")//从classpath的资源加载,一次只能加载一个文件
.addClasspathResource("baoxiao.png")//从classpath的资源加载,一次只能加载一个文件
.deploy();//完成部署
// 存在在数据库 act_re_procdef的DEPLOYMENT_ID_
//act_re_procdef(流程定义数据表) act_re_deployment (部署信息表) act_ge_bytearray(资源文件表)
System.out.println(deployment.getId());
System.out.println(deployment.getName());
}
/**
* 启动流程 runtimeService对象
* 执行完,就会在 act.ru.task表中,插入数据(每次插入一条数据)
*/
public void flowStart() {
RuntimeService runtimeService = processEngine.getRuntimeService();// 获取runtimeService对象
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("员工报销单据");//act_re_procdef(流程定义数据表)中的key_字段
}
/**
* 查找代办任务信息
*/
public void findEmployeeTask(){
//数据库关系》》》》ID【act_re_deployment】 == ID【act_ru_execution】 == ID【act_ru_task】 ==》【ASSIGNEE_(cwh)】
String assignee = "employee"; //节点的assignee_
List<Task> taskList= processEngine.getTaskService()//获取任务启动流程的service
.createTaskQuery()//创建查询对象
.taskAssignee(assignee)//指定查询人
.list();
if(taskList.size()>0){
for (Task task : taskList){
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());
}
}
}
/**
* 处理流程
*
* 根据act_ru_task 任务表的id,获取流程的service对象,调用complete方法来处理流程。
*
* @Description:
*/
public void completeTask(){
// ID【act_ru_task】
String taskId = "2505";
processEngine.getTaskService().complete(taskId);//完成任务
System.out.println("完成任务,任务ID:"+taskId);
}
public static void main(String[] args) {
run r = new run();
//r.delployFlow();
//r.flowStart();
r.findEmployeeTask();
//r.completeTask();
}
}
如上图,注释上都写的很清楚了,一次执行以上方法,对应数据库中的表,就能查看到,工作流的数据流向。
来源:https://www.cnblogs.com/WQX-work24/p/12190657.html
