目录
一、项目初始化
- 创建 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 {
@Autowired
private RuntimeService runtimeService;
@Autowired
private 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 {
@Autowired
private 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.";
}
}
五、运行项目
- 访问接口:
六、扩展方向
- 使用 Flowable Modeler 做更复杂的图形化设计
- 接入数据库保存审批流状态
- 添加多级审批流、多条件判断、自动化节点