当前位置: 首页 > news >正文

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

目录

一、项目初始化

二、编写 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 {@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 做更复杂的图形化设计
  • 接入数据库保存审批流状态
  • 添加多级审批流、多条件判断、自动化节点
http://www.lryc.cn/news/598450.html

相关文章:

  • 「iOS」黑魔法——方法交换
  • 词嵌入维度与多头注意力关系解析
  • 51c视觉~3D~合集4
  • 【C语言进阶】柔性数组
  • 11款Scrum看板软件评测:功能、价格、优缺点
  • C++标准库算法实战指南
  • Java基础day16-Vector类-Stack类-Collection子接口Set接口
  • 基础NLP | 02 深度学习基本原理
  • EasyExcel 模板导出数据 + 自定义策略(合并单元格)
  • 亚马逊云科技 EC2 部署 Dify,集成 Amazon Bedrock 构建生成式 AI 应用
  • 货车手机远程启动的扩展功能有哪些
  • QML 模型
  • java如何声明函数
  • Vulnhub Matrix-Breakout-2-Morpheus靶机攻略
  • jd h5st参数纯算
  • 现代C++的一般编程规范
  • Linux内核中动态内存分配函数解析
  • MYSQL中NOT IN和NOT EXISTS
  • 【Guava】1.1.我的报告
  • 宝塔通过docker部署JupyterHub指南【常见错误处理】
  • 从java到vue3:第二天
  • Vue3 面试题及详细答案120道(91-105 )
  • 个人笔记GUI
  • 【Python】Python多线程爬虫实战:从基础原理到分布式架构实现
  • Linux 基本命令整理
  • #来昇腾学AI 【十天成长计划】大模型LLM Prompt初级班
  • 详解力扣高频 SQL 50 题-1757.可回收且低脂的产品【入门】
  • 保障工业核心命脉:深度解读工业交换机QoS的“智能流量治理”之道
  • docker设置字体及时间,映射到宿主机上
  • rustfs/rustfs基于 Rust 的高性能分布式存储系统