首先创建一个新的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文件修改如下:
4.0.0
com.lvzh
WorkNewTest
1.0-SNAPSHOT
war
WorkNewTest Maven Webapp
http://www.example.com
UTF-8
1.7
1.7
junit
junit
4.12
org.activiti
activiti-spring
5.18.0
org.activiti
activiti-engine
5.18.0
slf4j-api
org.slf4j
spring-beans
org.springframework
jackson-core-asl
org.codehaus.jackson
commons-lang3
org.apache.commons
commons-lang3
org.apache.commons
com.oracle
ojdbc6
11.2.0.1.0
WorkNewTest
maven-clean-plugin
3.0.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.7.0
maven-surefire-plugin
2.20.1
maven-war-plugin
3.2.0
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
接着发现不能新建类和包的问题,用如下解决:
然后发现就可以新建包和类:
新建一个生成流程报表的类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文件,连接数据库,代码如下:
记得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 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 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》》》》用户完成任务》》》流程结束