SpringBoot集合工作流(WorkFlow)Flowable
在我不久前做的一个项目中,需要完成一个审批模块,选用了flowable。
以下就是flowable简单的使用流程介绍
流程
一,引入依赖
<!--flowable依赖-->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>6.7.2</version>
</dependency>
二,创建流程图
此处使用到了IDEA的一个插件 Flowable BPMN visualizer
创建bpmn20.xml文件
利用插件绘制流程图
右键点击bpmn20.xml文件
绘制流程图
右键选择自己所需
绘制完成之后,bpmn20.xml文件内容就会自己生成了Wow Amazing! ! !
Controller
package com.cn.pioneer.controller;
import com.baomidou.mybatisplus.extension.api.R;
import com.cn.pioneer.util.ResultVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.Task;
import org.flowable.engine.*;
import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author 3DG
* @Description 请假审批控制器
* @date 2023/10/19 11:32
*/
@RestController
@RequestMapping("/leave")
@Slf4j
@Api(value = "请假审批 API 接口", tags = "请假审批 API 接口")
public class LeaveController {
@Autowired
private RuntimeService runtimeService;
//启动流程实例通过RuntimeServiced对象
@Autowired
private TaskService taskService;
//流程引擎
/**
* 创建流程
*/
/**
* 创建请假审批
* @param LeaveID
* @param LeaveName
* @param LeaveDays
* @param LeaveReason
* @return
*/
@PostMapping("add")
@ApiOperation("创建请假审批流程")
public ResultVo <String>addLeave(@RequestBody Integer LeaveID, String LeaveName, Integer LeaveDays, String LeaveReason){
//获取assigne的取值
Map<String,Object> map = new HashMap<>();
map.put("leaveID",LeaveID);
map.put("leaveName",LeaveName);
map.put("leaveDays",LeaveDays);
map.put("leaveReason",LeaveReason);
//启动流程实例,第一个参数是流程的id
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("LeaveID",map);
log.info(map.toString());
return ResultVo.success("提交成功:"+processInstance.getId());
}
/**
* 显示流程图
*/
/**
* 查看审批流程
* @param httpServletResponse
* @param processID
* @throws Exception
*/
@PostMapping("processDiagram")
@ApiOperation("查看流程")
public void getProcessDiagram(HttpServletResponse httpServletResponse,String processID)throws Exception{
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processID).singleResult();
if (pi ==null){
return;
}
Task task = (Task) taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
//使用流程实例ID,查询正在执行的对象,返回流程实例对象
String InstanceID = task.getId();
List<Execution> executions = runtimeService
.createExecutionQuery()
.processInstanceId(InstanceID)
.list();
}
/**
* 审批请假
*/
@PostMapping("approveLeave")
@ApiOperation("审批请假")
public ResultVo<String> approveLeave(String taskId,String approved){
Task task = (Task) taskService.createTaskQuery().taskId(taskId).singleResult();
if(task==null){
return ResultVo.success("流程不存在");
}
//设置流程变量
Map<String,Object> variables=new HashMap<>();
Boolean approve = approved.equals("1")? true: false;
//获取assignee的取值
variables.put("approved",approve);
taskService.complete(taskId,variables);
return ResultVo.success("审批是否通过"+approved);
}
}

浙公网安备 33010602011771号