Flowable + Spring Boot 自定义审批流实战教程
目录
一、项目初始化
二、编写 BPMN 流程模型
三、启动流程的Service
四、创建 Controller 进行调用
五、运行项目
六、扩展方向
一、项目初始化
- 创建 Spring Boot 项目,添加依赖(pom.xml):
<dependencies><dependency><groupId>org.flowable</groupId><artifactId>flowable-spring-boot-starter-process</artifactId><version>6.7.2</version></dependency>
</dependencies>
二、编写 BPMN 流程模型
- 在
src/main/resources/processes
目录下创建leave-request.bpmn20.xml
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"targetNamespace="http://www.flowable.org/processdef"><process id="leaveRequest" name="Leave Request Process" isExecutable="true"><startEvent id="startEvent" name="Start"/><userTask id="applyTask" name="Employee Applies" flowable:assignee="${employee}"/><userTask id="managerApproval" name="Manager Approval" flowable:assignee="${manager}"/><endEvent id="endEvent" name="End"/><sequenceFlow id="flow1" sourceRef="startEvent" targetRef="applyTask"/><sequenceFlow id="flow2" sourceRef="applyTask" targetRef="managerApproval"/><sequenceFlow id="flow3" sourceRef="managerApproval" targetRef="endEvent"/></process>
</definitions>
三、启动流程的Service
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.HashMap;
import java.util.List;
import java.util.Map;@Service
public class LeaveRequestService {@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate TaskService taskService;// 启动流程实例public void startLeaveRequest(String employee, String manager) {Map<String, Object> variables = new HashMap<>();variables.put("employee", employee);variables.put("manager", manager);runtimeService.startProcessInstanceByKey("leaveRequest", variables);}// 查询任务public List<Task> getTasks(String assignee) {return taskService.createTaskQuery().taskAssignee(assignee).list();}// 完成任务public void completeTask(String taskId) {taskService.complete(taskId);}
}
四、创建 Controller 进行调用
import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/leave")
public class LeaveRequestController {@Autowiredprivate LeaveRequestService leaveRequestService;@PostMapping("/start")public String startProcess(@RequestParam String employee, @RequestParam String manager) {leaveRequestService.startLeaveRequest(employee, manager);return "Process started.";}@GetMapping("/tasks")public List<Task> getTasks(@RequestParam String assignee) {return leaveRequestService.getTasks(assignee);}@PostMapping("/complete")public String completeTask(@RequestParam String taskId) {leaveRequestService.completeTask(taskId);return "Task completed.";}
}
五、运行项目
- 访问接口:
-
- 启动流程:http://localhost:8080/leave/start?employee=john&manager=manager1
- 查询任务:http://localhost:8080/leave/tasks?assignee=manager1
- 完成任务:http://localhost:8080/leave/complete?taskId=xxxxxx
六、扩展方向
- 使用 Flowable Modeler 做更复杂的图形化设计
- 接入数据库保存审批流状态
- 添加多级审批流、多条件判断、自动化节点