直接上干货
1:引入相关包
我的环境是springboot3.X 所以引入的7.0版本
<!--工作流 -->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>7.0.0</version>
</dependency>
2:配置相关参数
flowable:
database-schema-update: true # 默认false 不自动创建表 true 自动创建表
async-executor-activate: true #关闭定时任务
3:数据库也配置以下
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/xx?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: xx
password: xx
4: 把流程配置文件放到目录下 如图
5:部署流程
/**
* 流程部署
* @param processResource 流程文件地址
*/
public void deployProcess(String processResource,String name) {
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource(processResource).name(name)
.deploy();
logger.info("部署的Id:"+deploy.getId());
}
这里传入流程文件的地址 具体使用方法 控制器里调用
@GetMapping("deploy")
public void deploy(){
flowableService.deployProcess("processess/leave1.bpmn20.xml","第一个简单流程图");
}
6:启动流程
可以通过ID或则KEY启动流程
/**
* 执行流程 /启动流程 通过key启动
* @param processKey
* @return
*/
public ProcessInstance startProcessInstanceByKey(String processKey) {
return runtimeService.startProcessInstanceByKey(processKey);
}
/**
* 执行流程 /启动流程 通过id启动
* @param id
* @return
*/
public ProcessInstance startProcessInstanceById(String id) {
return runtimeService.startProcessInstanceById(id);
}
调用方法
这里通过ID启动 ID可以在数据库的act_re_procdef中找到
@GetMapping("start")
public String start(){
String id = "leave1:1:ccdf3b3e-5485-11ef-8292-f67b09581d21";
ProcessInstance processInstance = flowableService.startProcessInstanceById(id);
return processInstance.getName();
}
流程定义存储表
7:查找待审批流程
/**
* 等待审批的任务
* @return
*/
public List<Task> find() {
List<Task> list = taskService.createTaskQuery().list();
list.forEach(task -> {
System.out.println(task.getId()+" "+task.getName());
});
if(list.size() >0){
System.out.println("代办任务"+list.size());
}else{
System.out.println("没有任务");
}
return list;
}
也可以查询某个用户的待审批
List<Task> list = taskService.createTaskQuery().taskAssignee("用户名").list();
8:审批
通过传入审批ID进行审批
/**
* 审批 根据ID(每次审批后ID会变化) 审批流程全部完成后会从run-task表中消失
*/
public void finsh() {
taskService.complete("b42f7b63-548c-11ef-9a41-f67b09581d21");
}