Spring Boot 集成 Flowable UI 实现请假流程 Demo

embedded/2024/10/9 7:38:20/

 ​

博客主页:     南来_北往

系列专栏:Spring Boot实战


在现代企业应用中,工作流管理是一个至关重要的部分。通过使用Spring Boot和Flowable,可以方便地构建和管理工作流。本文将详细介绍如何在Spring Boot项目中集成Flowable UI,并实现一个简单的请假流程。

1. 环境准备
  • JDK版本:1.8
  • Maven版本:3.x
  • Spring Boot版本:2.7.5
  • Flowable版本:6.6.0
  • 数据库:MySQL 8.0
2. 创建Spring Boot项目

首先,使用Spring Initializr或任何你喜欢的IDE(如IntelliJ IDEA或Eclipse)创建一个新的Spring Boot项目。

3. 添加依赖

pom.xml文件中添加以下依赖:

<properties>  <maven.compiler.source>8</maven.compiler.source>  <maven.compiler.target>8</maven.compiler.target>  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  <flowable.version>6.6.0</flowable.version>  
</properties>  <parent>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-parent</artifactId>  <version>2.7.5</version>  
</parent>  <dependencies>  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <dependency>  <groupId>org.flowable</groupId>  <artifactId>flowable-spring-boot-starter</artifactId>  <version>${flowable.version}</version>  </dependency>  <dependency>  <groupId>org.flowable</groupId>  <artifactId>flowable-spring-boot-starter-ui-idm</artifactId>  <version>${flowable.version}</version>  </dependency>  <dependency>  <groupId>org.flowable</groupId>  <artifactId>flowable-spring-boot-starter-ui-modeler</artifactId>  <version>${flowable.version}</version>  </dependency>  <dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <version>8.0.31</version>  </dependency>  <dependency>  <groupId>org.mybatis.spring.boot</groupId>  <artifactId>mybatis-spring-boot-starter</artifactId>  <version>2.2.2</version>  </dependency>  <dependency>  <groupId>org.projectlombok</groupId>  <artifactId>lombok</artifactId>  </dependency>  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-test</artifactId>  <scope>test</scope>  </dependency>  
</dependencies>
4. 配置数据库连接

application.properties文件中配置数据库连接信息:

# 端口  
server.port=8081  # UI相关信息  
flowable.idm.app.admin.user-id=admin  
flowable.idm.app.admin.password=admin  
flowable.idm.app.admin.first-name=xxx  
flowable.idm.app.admin.last-name=xxx  
flowable.database-schema-update=true  # 关闭定时任务JOB  
flowable.async-executor-activate=false  # 数据库  
spring.datasource.url=jdbc:mysql://localhost:3306/flowable-test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true  
spring.datasource.username=root  
spring.datasource.password=123456  
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver  
spring.datasource.type=com.zaxxer.hikari.HikariDataSource  # 日志  
logging.level.org.flowable=DEBUG

确保在MySQL中创建一个名为flowable-test的数据库,Flowable会在启动时自动创建所需的表。

5. 配置Flowable UI

Flowable UI是一个用于设计和管理工作流的Web应用。在Spring Boot项目中集成Flowable UI需要添加相应的依赖并配置相应的资源。

确保你的pom.xml中已经包含了Flowable UI的依赖:

<dependency>  <groupId>org.flowable</groupId>  <artifactId>flowable-spring-boot-starter-ui-idm</artifactId>  <version>${flowable.version}</version>  
</dependency>  
<dependency>  <groupId>org.flowable</groupId>  <artifactId>flowable-spring-boot-starter-ui-modeler</artifactId>  <version>${flowable.version}</version>  
</dependency>

然后,在Spring Boot应用的resources目录下创建META-INF文件夹,并复制flowable-default.properties文件到该文件夹中。这个文件用于配置Flowable UI的默认设置。

6. 设计请假流程
  1. 启动Spring Boot应用。
  2. 访问Flowable UI的Modeler页面(通常是http://localhost:8081/flowable-modeler)。
  3. 在Modeler中创建一个新的流程模型,并设计请假流程。例如,你可以添加“申请请假”、“组长审批”、“经理审批”等节点。
  4. 保存并发布流程模型。
7. 实现请假流程的控制逻辑

在Spring Boot项目中实现请假流程的控制逻辑,包括启动流程、查询任务、审批任务等。

java">import org.flowable.engine.RuntimeService;  
import org.flowable.engine.TaskService;  
import org.flowable.engine.runtime.ProcessInstance;  
import org.flowable.task.api.Task;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.*;  import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  @RestController  
@RequestMapping("/leave")  
public class LeaveController {  @Autowired  private RuntimeService runtimeService;  @Autowired  private TaskService taskService;  // 发起请假流程  @PostMapping("/apply")  public String applyLeave(@RequestParam String userId, @RequestParam int days, @RequestParam String description) {  Map<String, Object> variables = new HashMap<>();  variables.put("userId", userId);  variables.put("days", days);  variables.put("description", description);  ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess", variables);  return "流程启动成功,流程ID:" + processInstance.getId();  }  // 查询待办任务  @GetMapping("/my-tasks")  public List<Task> getMyTasks(@RequestParam String userId) {  return taskService.createTaskQuery().taskAssignee(userId).list();  }  // 审批任务  @PostMapping("/approve")  public String approveTask(@RequestParam String taskId, @RequestParam String outcome) {  taskService.complete(taskId, Collections.singletonMap("outcome", outcome));  return "任务审批成功";  }  
}
8. 启动应用并测试

启动Spring Boot应用,并访问Flowable UI页面进行流程设计和管理。然后,通过API接口或Postman等工具测试请假流程的控制逻辑。

至此,你已经成功地在Spring Boot项目中集成了Flowable UI,并实现了一个简单的请假流程。你可以根据实际需求进一步扩展和优化这个流程。


http://www.ppmy.cn/embedded/124950.html

相关文章

正态分布的极大似然估计一个示例,详细展开的方程求解步骤

此示例是 什么是极大似然估计 中的一个例子&#xff0c;本文的目的是给出更加详细的方程求解步骤&#xff0c;便于数学基础不好的同学理解。 目标 假设我们有一组样本数据 x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1​,x2​,…,xn​&#xff0c;它们来自一个正态分布 N…

前端的全栈混合之路Meteor篇:分布式数据协议DDP深度剖析

本文属于进阶篇&#xff0c;并不是太适合新人阅读&#xff0c;但纯粹的学习还是可以的&#xff0c;因为后续会实现很多个ddp的版本用于web端、nodejs端、安卓端和ios端&#xff0c;提前预习和复习下。ddp协议是一个C/S架构的协议&#xff0c;但是客户端也同时可以是服务端。 什…

【stm32】寄存器(stm32技术手册下载链接)

1、资料下载 RM0008_STM32F101xx,STM32F102xx,STM32F103xx,STM32F105xx和STM32F107xx单片机参考手册 | STMCU中文官网 2、代码 设置PB7 //设置PB7 #define SDA_IN() {GPIOB->CRL&0X0FFFFFFF;GPIOB->CRL|(u32)8<<28;} #define SDA_OUT() {GPIOB->…

C语言期中自测试卷

选择题 1、若有变量定义int a; double b; 要输入数据存放在a和b中&#xff0c;则下面正确的输入数据的语句为&#xff1a; 【 正确答案: C】 A. scanf("%d%f",a,b); B. scanf("%d%f",&a,&b); C. scanf("%d%lf",&a,&b); D. scan…

四、Python基础语法(数据类型转换)

数据类型转换就是将一种类型的数据转换为另外一种类型的数据&#xff0c;数据类型转换不会改变原数据&#xff0c;是产生一个新的数据。 变量 要转换为的类型(原数据) -> num int(28) 一.int()将其他类型转换为整型 1.整数类型的字符串转换为整型 num1 28 print(type…

spring揭秘25-springmvc05-过滤器与拦截器区别(补充)

文章目录 【README】【1】springmvc拦截器回顾【1.1】定义与应用【1.2】拦截器作用范围 【2】servlet过滤器回顾【2.1】过滤器定义与应用【2.2】过滤器作用范围 【3】springmvc拦截器与servlet过滤器区别&#xff08;重要*&#xff09;【3.1】拦截方法调用代码实现 【README】 …

芯课堂 | Synwit_UI_Creator(μgui)平台之图像处理篇

今天小编给大家介绍的是UI_Creator&#xff08;μgui&#xff09;平台下关于图像处理的选项。 UI_Creator&#xff08;μgui&#xff09;平台图片类控件有图像控件和分级图像控件&#xff0c;均包含以下选项&#xff1a; 1、消除水波纹&#xff1a; 由于16位真彩色&#xff08…

微服务——分布式事务

目录 分布式事务 1.1分布式事务的特性 1.2分布式事务应用背景 ​编辑 1.3.认识Seata 1.4部署TC服务 1.4.1.准备数据库表 1.4.2.准备配置文件 1.4.3.Docker部署 1.5.微服务集成Seata 1.5.1.引入依赖 1.5.2.改造配置 1.5.3.添加数据库表 ​编辑1.6.XA模式 1.6.1.两…