Flowable + Spring Boot 自定义审批流实战教程

发布于:2025-07-25 ⋅ 阅读:(8) ⋅ 点赞:(0)

目录

一、项目初始化

二、编写 BPMN 流程模型

三、启动流程的Service

四、创建 Controller 进行调用

五、运行项目

六、扩展方向


一、项目初始化

  1. 创建 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 流程模型

  1. 在 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 做更复杂的图形化设计
  • 接入数据库保存审批流状态
  • 添加多级审批流、多条件判断、自动化节点

网站公告

今日签到

点亮在社区的每一天
去签到