首先创建一个新的Maven项目,创建完成后我们要安装Activiti的插件,首先打开FIle的setting功能,搜索Plugins:
输入actiBPM,然后点击搜索:
如图点击安装,它就会下载安装
安装好后点击应用:
然后重启IDEA,点击File文件中的New下的BpmnFile:
给这个文件起好名字后拖动右边的图标到左边:
把鼠标放到节点中心,中心会变成黑白扇形:
拖拽连线到另一个图标进行画图:
全部连线后:
左键单击节点就会出现左边的修改按钮
接着改文件的后缀名为.xml:
接着:
如果没有出现图中的按钮,可以按快捷键Ctrl+alt+Shift+U,按了以后,以后这个图标就会出现了
接着选择我们放这个文件的文件夹:
然后发现产生了图片:
不过如果有中文会出现乱码,需要在这两个文件下的后面都加上-Dfile.encoding=UTF-8
然后重启IDEA,把原来的PNG图片删掉,再生成一次就不会出现乱码了
参考至:https://blog.csdn.net/qq_41728540/article/details/79506463
还有修改接受人 和流程名称:
第二步配置依赖,pom.xml文件修改如下:
<?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>
<groupId>com.lvzh</groupId>
<artifactId>WorkNewTest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>WorkNewTest Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--<scope>test</scope>-->
</dependency>
<!--- Activiti依赖导入 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.18.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.18.0</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>jackson-core-asl</artifactId>
<groupId>org.codehaus.jackson</groupId>
</exclusion>
<exclusion>
<artifactId>commons-lang3</artifactId>
<groupId>org.apache.commons</groupId>
</exclusion>
<exclusion>
<artifactId>commons-lang3</artifactId>
<groupId>org.apache.commons</groupId>
</exclusion>
</exclusions>
</dependency>
<!--MySQL 驱动包,如果是其他库的话需要换驱动包-->
<!--<dependency>-->
<!--<groupId>mysql</groupId>-->
<!--<artifactId>mysql-connector-java</artifactId>-->
<!--<version>5.1.35</version>-->
<!--</dependency>-->
<!-- 添加oracle驱动依赖 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
<!--<dependency>-->
<!--<groupId>org.junit.jupiter</groupId>-->
<!--<artifactId>junit-jupiter-api</artifactId>-->
<!--<version>RELEASE</version>-->
<!--</dependency>-->
</dependencies>
<build>
<finalName>WorkNewTest</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
接着发现不能新建类和包的问题,用如下解决:
然后发现就可以新建包和类:
新建一个生成流程报表的类MyWorkTable,代码如下:
package com.lzh;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;
public class MyWorkTable {
@Test
public void creatTable(){
ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
}
}
在resource文件下新建一个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.StandaloneProcessEngineConfiguration">-->
<!--<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>-->
<!--<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8"></property>-->
<!--<property name="jdbcUsername" value="username"></property>-->
<!--<property name="jdbcPassword" value="password"></property>-->
<!--<property name="databaseSchemaUpdate" value="true"></property>-->
<!--</bean>-->
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="oracle.jdbc.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<!--<property name="jdbcUrl" value="jdbc:oracle:thin:@(description=(address_list= (address=(host=localhost) (protocol=tcp)(port=1521))(address=(host=localhost)(protocol=tcp) (port=1521)) (load_balance=yes)(failover=yes))(connect_data=(service_name= orcl.genomics.cn)))"></property>-->
<property name="jdbcUsername" value="用户名"></property>
<property name="jdbcPassword" value="密码"></property>
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
</beans>
记得resource文件要改成这样:
否则会文件找不到的错误,再接着运行生成报表的类:
生成流程报表24张:
流程部署表
SELECT * FROM `act_re_deployment`
流程定义表
SELECT * FROM `act_re_procdef`
资源文件表
SELECT * FROM `act_ge_bytearray`
系统配置表
SELECT * FROM `act_ge_property`
启动流程实例涉及到的表
流程实例运行时 执行对象表
SELECT * FROM `act_ru_execution`
流程实例运行时 身份联系表
SELECT * FROM `act_ru_identitylink`
流程实例运行时 用户任务表
SELECT * FROM `act_ru_task`
活动节点历史表
SELECT * FROM `act_hi_actinst`
身份联系表 历史
SELECT * FROM `act_hi_identitylink`
流程实例表 历史
SELECT * FROM `act_hi_procinst`
历史任务表
SELECT * FROM `act_hi_taskinst`
参考来至:https://blog.csdn.net/artaganan8/article/details/77838019
接着部署流程,部署之后就可以在act_re_procdef 流程定义表 中看到对相应的流程信息,首先先建一个部署类MyWorkDeploy:
package com.lzh;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.junit.Test;
public class MyWorkDeploy {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//部署流程
@Test
public void deployProcess(){
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder builder = repositoryService.createDeployment();
builder.addClasspathResource("WorkTestNew.bpmn");//bpmn文件的名称
builder.deploy();
}
}
我们得把原来的WorkTestNew.xml重新改为WorkTestNew.Bpmn,接着我们新建一个启动流程类MyWorkStart:
package com.lzh;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.junit.Test;
public class MyWorkStart {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//启动流程
@Test
public void startProcess(){
RuntimeService runtimeService = processEngine.getRuntimeService();
runtimeService.startProcessInstanceByKey("myProcess_1");//流程的名称,对应流程定义表的key字段,也可以使用ByID来启动流程
}
}
启动流程之后就会有相应的任务产生,存在act_ru_task 运行时任务节点表 中,可以查看任务节点,再接着我们新建一个查询流程类MyWorkQuery:
package com.lzh;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.junit.Test;
import java.util.List;
public class MyWorkQuery {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//查询流程
@Test
public void queryTask(){
TaskService taskService = processEngine.getTaskService();
//根据assignee(节点接受人)查询任务
String assignee = "张三";//
List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
int size = tasks.size();
for (int i = 0; i < size; i++) {
Task task = tasks.get(i);
}
//首次运行的时候这个没有输出,因为第一次运行的时候扫描act_ru_task的表里面是空的,但第一次运行完成之后里面会添加一条记录,之后每次运行里面都会添加一条记录
for (Task task : tasks) {
System.out.println("taskId=" +"流程任务节点信息ID:"+ task.getId() +
",taskName:" +"流程任务节点名称ID:" +task.getName() +
",assignee:" + "流程任务节点接受人:"+task.getAssignee() +
",createTime:" +"流程任务节点创建时间:"+ task.getCreateTime());
}
}
}
新建一个类MyWorkQueryProcess,用来查询流程明细定义明细:
package com.lzh;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.junit.Test;
import java.util.List;
public class MyWorkQueryProcess {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//查询流程定义明细
@Test
public void queryProcdef(){
RepositoryService repositoryService = processEngine.getRepositoryService();
//创建查询对象
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
//添加查询条件
query.processDefinitionKey("myProcess_1");//通过key获取
// .processDefinitionName("My process")//通过name获取
// .orderByProcessDefinitionId()//根据ID排序
//执行查询获取流程定义明细
List<ProcessDefinition> pds = query.list();
for (ProcessDefinition pd : pds) {
System.out.println("ID:"+pd.getId()+",NAME:"+pd.getName()+",KEY:"+pd.getKey()+",VERSION:"+pd.getVersion()+",RESOURCE_NAME:"+pd.getResourceName()+",DGRM_RESOURCE_NAME:"+pd.getDiagramResourceName());
}
}
}
新建一个审核过程完成任务节点审批的类MyWorkProcessApproval:
package com.lzh;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.junit.Test;
//审核过程
public class MyWorkProcessApproval {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@Test
public void startProcessApproval(){
TaskService taskService = processEngine.getTaskService();
//taskId 就是查询任务中的 ID
String taskId = "12502";
//完成请假申请任务
taskService.complete(taskId);
}
}
参考来至https://blog.csdn.net/c1225992531/article/details/81181017
https://blog.csdn.net/a67474506/article/details/38266129
运行部署流程MyWorkDeploy类的deployProcess方法后,我们可以看到act_re_procdef 流程定义表产生相应的流程信息:
再接着我们启动流程类MyWorkStart 的方法startProcess后 ,act_ru_task 运行时任务节点表 中,可以查看任务节点:
到了第一个任务节点审核,接下来由第一个任务节点的用户审批完成节点任务,先查询节点id,再启动审核流程方法,先是运行MyWorkQuery类的queryTask方法,再启动MyWorkProcessApproval的startProcessApproval方法,然后你就会看到流程走到下一个节点,所以整个 流程的运行
部署流程》》》》》》启动流程》》》》》》查询用户id》》》》用户完成任务》》》流程结束