栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot整合flowable

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot整合flowable

目录
  • 前言
  • 一、环境
    • 1、引入依赖
    • 2、创建表
    • 3、配置文件
  • 二、bpmn文件
  • 三、测试


前言

Flowable是一个使用Java编写的轻量级业务流程引擎,可以实现需要工作流的业务流程。

一、环境 1、引入依赖

引入 flowable 相关依赖



    org.flowable
    flowable-spring-boot-starter
    6.7.2




    xerces
    xercesImpl
    2.12.2

2、创建表

(1)自动创建表

打开配置

 flowable.database-schema-update=true

自动创建表的语句都在各个模块的包下面

(2)手动创建表

下载官网的sql文件

https://documentation.flowable.com/latest/develop/dbs/overview

下载下来是db-scripts-3.11.0.zip,解压后如下图,从里面找出对应数据库的sql文件,导入到数据库中

数据库表如图所示:

3、配置文件
# standalone 模式
flowable.standalone.server.enabled=false
# 允许 bean overriding
spring.main.allow-bean-definition-overriding=true
# 关闭定时任务
flowable.async-executor-activate=false
# 检测身份信息
flowable.idm.enabled=false
# 生成数据库表
flowable.database-schema-update=false
二、bpmn文件

1、holiday-request.bpmn20.xml

将文件放在classpath下




    
        
        
        
        
        
        
        
        
        
        
        
        
            
                
                approved}
        ]]>
            
        
        
        
            
                
                !approved}
        ]]>
            
        
        
        
        
        
        
        
        
        
        
        
        
    

2、ApprovalSuccessDelegate

审批通过回调任务

public class ApprovalSuccessDelegate implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) {
        System.out.println("审批通过了");
    }
}

3、ApprovalFailedDelegate

审批驳回回调任务

public class ApprovalFailedDelegate implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) {
        System.out.println("审批驳回了");
    }
}
三、测试

1、测试类

@RunWith(SpringRunner.class)
@SpringBootTest(classes = BizApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class FlowableTest {
	
    @Autowired
    private RepositoryService repositoryService;
    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private HistoryService historyService;

}

2、部署流程

 	@Test
    public void createDeployment() {
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("holiday-request.bpmn20.xml")
                .deploy();
        System.out.println(deployment.getId());
    }

打印出流程id

ce2bb094-caaf-11ec-90e1-00ff2b067e93

3、获取流程定义

	@Test
    public void getProcessDefinition() {
        ProcessDefinition result = repositoryService.createProcessDefinitionQuery()
                .deploymentId("ce2bb094-caaf-11ec-90e1-00ff2b067e93")
                .singleResult();

        System.out.println("definitionId: " + result.getId());
        System.out.println("definition: " + JsonUtils.toJson(result));
    }

结果:

definitionId: holidayRequest:1:ce44dde6-caaf-11ec-90e1-00ff2b067e93
definition: {
    "id":"holidayRequest:1:ce44dde6-caaf-11ec-90e1-00ff2b067e93",
    "revision":1,
    "isInserted":false,
    "isUpdated":false,
    "isDeleted":false,
    "originalPersistentState":{
        "suspensionState":1,
        "category":"http://www.flowable.org/processdef"
    },
    "name":"请假流程",
    "key":"holidayRequest",
    "version":1,
    "category":"http://www.flowable.org/processdef",
    "deploymentId":"ce2bb094-caaf-11ec-90e1-00ff2b067e93",
    "resourceName":"holiday-request.bpmn20.xml",
    "tenantId":"",
    "isGraphicalNotationDefined":false,
    "hasStartFormKey":false,
    "suspensionState":1,
    "isIdentityLinksInitialized":false,
    "definitionIdentityLinkEntities":[

    ],
    "derivedVersion":0,
    "suspended":false,
    "graphicalNotationDefined":false,
    "inserted":false,
    "updated":false,
    "deleted":false
}

4、启动流程

模拟用户发起一个请假流程

	@Test
    public void startProcessDefinition() {
        Map variables = new HashMap();
        variables.put("employee", "张三");
        variables.put("nrOfHolidays", 3);
        variables.put("description", "有事请假");
        ProcessInstance processInstance =
                runtimeService.startProcessInstanceByKey("holidayRequest", variables);
    }

5、获取任务

用户发起流程后,相关的人员能够查询该任务

	@Test
    public void getTask() {
        List tasks = taskService.createTaskQuery()
                .active()
                .includeProcessVariables()
                .taskCandidateOrAssigned("admin")
                .list();
        System.out.println("You have " + tasks.size() + " tasks:");
        for (int i = 0; i < tasks.size(); i++) {
            Task task = tasks.get(i);
            System.out.println((i + 1) + ") " + "taskId: " + task.getId() + ", taskName: " + task.getName());
        }
    }

结果:

You have 1 tasks:
1) taskId: 696f2831-cab0-11ec-aa1d-00ff2b067e93, taskName: 同意或驳回请求

6、审批任务

查询到任务后,对任务进行审批

	@Test
    public void completeTask() {
        Map variables = new HashMap();
        variables.put("approved", true);
        taskService.complete("696f2831-cab0-11ec-aa1d-00ff2b067e93", variables);
    }

结果回调了 ApprovalSuccessDelegate ,打印出"审批通过了"

7、查询历史任务

任务完成审批以后,会作为历史任务存储起来

	@Test
    public void historyTask() {
        List list = historyService.createHistoricActivityInstanceQuery()
                .taskAssignee("admin")
                .finished()
                .list();
        list.stream().map(JsonUtils::toJson).forEach(System.out::println);
    }

结果:

{
    "id":"696c1af0-cab0-11ec-aa1d-00ff2b067e93",
    "revision":2,
    "isInserted":false,
    "isUpdated":false,
    "isDeleted":false,
    "originalPersistentState":{
        "executionId":"696b308d-cab0-11ec-aa1d-00ff2b067e93",
        "activityId":"approveTask",
        "transactionOrder":3,
        "durationInMillis":134771,
        "activityName":"同意或驳回请求",
        "endTime":"2022-05-03 15:14:51",
        "assignee":"admin",
        "taskId":"696f2831-cab0-11ec-aa1d-00ff2b067e93"
    },
    "processInstanceId":"696a9449-cab0-11ec-aa1d-00ff2b067e93",
    "processDefinitionId":"holidayRequest:1:ce44dde6-caaf-11ec-90e1-00ff2b067e93",
    "startTime":"2022-05-03 15:12:37",
    "endTime":"2022-05-03 15:14:51",
    "durationInMillis":134771,
    "transactionOrder":3,
    "activityId":"approveTask",
    "activityName":"同意或驳回请求",
    "activityType":"userTask",
    "executionId":"696b308d-cab0-11ec-aa1d-00ff2b067e93",
    "assignee":"admin",
    "taskId":"696f2831-cab0-11ec-aa1d-00ff2b067e93",
    "tenantId":"",
    "inserted":false,
    "updated":false,
    "deleted":false
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856848.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号