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

时间:2024-10-06 09:27:00

 ​

博客主页:     南来_北往

系列专栏: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项目中实现请假流程的控制逻辑,包括启动流程、查询任务、审批任务等。

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,并实现了一个简单的请假流程。你可以根据实际需求进一步扩展和优化这个流程。