在我不久前做的一个项目中,需要完成一个审批模块,选用了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); } }