首页 > 其他分享 >flowable多人会签

flowable多人会签

时间:2023-04-26 12:12:06浏览次数:32  
标签:map HashMap flowable 会签 多人 org import

12、多人会签

1、流程图绘制

​ 多人会签是指一个任务需要多个来处理,案例讲解

流程绘制本人用了flowable

主键ID:userTask1 #自己来决定
名称:用户任务 #自己决定
多实例类型:Parallel
基数(多实例):3 #输入会签人数
集合(多实例) : persons
元素变量(多实例) : person
完成条件(多实例 completeTask) : ${mulitiInstanceCompleteTask.completeTask(execution)} #调用监听器组件里的completeTask方法记得参数名写对了
completeTask:${mulitiInstanceTaskListener.completeListener(execution)} #表达式,事件下拉框中选择create,类名为空

完整的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" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef" exporter="Flowable Open Source Modeler" exporterVersion="6.8.0">
  <process id="MyHolidayUI" name="用户多实例会签" isExecutable="true">
    <documentation>请假流程</documentation>
    <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
    <userTask id="userTask1" name="用户任务" flowable:assignee="$INITIATOR" flowable:formFieldValidation="true">
      <extensionElements>
        <flowable:taskListener event="create" expression="${mulitiInstanceTaskListener.completeListener(execution)}"></flowable:taskListener>
        <modeler:activiti-idm-initiator xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator>
      </extensionElements>
      <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="persons" flowable:elementVariable="person">
        <extensionElements></extensionElements>
        <loopCardinality>3</loopCardinality>
        <completionCondition>${mulitiInstanceCompleteTask.completeTask(execution)}</completionCondition>
      </multiInstanceLoopCharacteristics>
    </userTask>
    <sequenceFlow id="sid-611184F4-3FB0-4151-A9DA-041802A716C0" sourceRef="startEvent1" targetRef="userTask1"></sequenceFlow>
    <endEvent id="sid-7002B6DC-458F-409A-8D71-286DC617B942"></endEvent>
    <sequenceFlow id="sid-D1309118-5A7A-40E9-BC28-F734AB72B884" sourceRef="userTask1" targetRef="sid-7002B6DC-458F-409A-8D71-286DC617B942"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_MyHolidayUI">
    <bpmndi:BPMNPlane bpmnElement="MyHolidayUI" id="BPMNPlane_MyHolidayUI">
      <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
        <omgdc:Bounds height="30.0" width="30.0" x="194.99999710552157" y="509.99998485965136"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="userTask1" id="BPMNShape_userTask1">
        <omgdc:Bounds height="79.99999999999983" width="100.0" x="345.0000086241834" y="480.00001199886384"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-7002B6DC-458F-409A-8D71-286DC617B942" id="BPMNShape_sid-7002B6DC-458F-409A-8D71-286DC617B942">
        <omgdc:Bounds height="28.0" width="28.0" x="504.99999465634755" y="510.9999704614771"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sid-D1309118-5A7A-40E9-BC28-F734AB72B884" id="BPMNEdge_sid-D1309118-5A7A-40E9-BC28-F734AB72B884" flowable:sourceDockerX="50.0" flowable:sourceDockerY="39.999999999999915" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
        <omgdi:waypoint x="444.95000862416634" y="520.0000119988638"></omgdi:waypoint>
        <omgdi:waypoint x="475.0000016402655" y="520.0000119988638"></omgdi:waypoint>
        <omgdi:waypoint x="475.0000016402655" y="524.9999704614771"></omgdi:waypoint>
        <omgdi:waypoint x="504.99999465634755" y="524.9999704614771"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-611184F4-3FB0-4151-A9DA-041802A716C0" id="BPMNEdge_sid-611184F4-3FB0-4151-A9DA-041802A716C0" flowable:sourceDockerX="14.999999999999996" flowable:sourceDockerY="15.0" flowable:targetDockerX="50.00000000000001" flowable:targetDockerY="39.999999999999915">
        <omgdi:waypoint x="224.94999385865802" y="524.9999848596514"></omgdi:waypoint>
        <omgdi:waypoint x="285.0000028648525" y="524.9999848596514"></omgdi:waypoint>
        <omgdi:waypoint x="285.0000028648525" y="520.0000119988638"></omgdi:waypoint>
        <omgdi:waypoint x="345.0000086241834" y="520.0000119988638"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

2、流程说明

3、案例演示

3.1部署流程


测试代码:

yaml文件

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/flowable1?serverTimezone=UTC&nullCatalogMeansCurrent=true
    username: root
    password: 123456
    hikari:
      minimum-idle: 5
      idle-timeout: 600000
      maximum-pool-size: 10
      auto-commit: true
      pool-name: MyHikariCP
      max-lifetime: 180000
      connection-timeout: 30000
      connection-test-query: SELECT 1
flowable:
  async-executor-activate: false #关闭定时任务
  #J0B将databaseSchemaupdate 设置为true。当FLowable发现库与数库表结构不一致时,会自动将数据库表结构升级至新版本.
  database-schema-update: true
server:
  port: 8082

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.bonc</groupId>
    <artifactId>flowable-springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>flowable-springboot</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>6.6.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.16</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

package com.bonc;

import org.flowable.engine.ProcessEngine;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.repository.Deployment;
import org.flowable.task.api.Task;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;

/**
 * @description:
 * @author: defu
 * @date: 2023/3/21 13:42
 * @version:1.0
 */
@SpringBootTest
@RunWith(SpringRunner.class)
public class FlowableSpringBootApplicationTests {
    @Qualifier("processEngine")
    @Autowired
    private ProcessEngine processEngine;
    @Autowired
    private RepositoryService repositoryService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private RuntimeService runtimeService;

    /**
     * 部署
     */
    @Test
    public void testDeploy() {
        Deployment deploy = repositoryService.createDeployment().addClasspathResource("用户多实例会签.bpmn20.xml").name("会签案例").deploy();
        System.out.println("deploy.getId() = " + deploy.getId());
        System.out.println("deploy.getName() = " + deploy.getName());
        System.out.println("部署开始时间: " + new Date());
    }

    /**
     * 启动流程
     */
    @Test
    public void testStratFlow() {
        HashMap<String, Object> map = new HashMap<>();
        //设置多人会签的数据,一定要大于等于3
        map.put("persons", Arrays.asList("张三", "李四", "王五", "赵六"));
        runtimeService.startProcessInstanceById("MyHolidayUI:1:a275fa34-e3e5-11ed-9555-00ffaabbccdd", map);
    }

    /**
     * 完成任务
     */
    @Test
    public void completeTask() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("flag", false);//设置为true,结束多人会签
        taskService.complete("d41b1f43-e3e0-11ed-b803-00ffaabbccdd", map);
        System.out.println("complete....");
    }

    /**
     * 完成任务
     * 执行完成任务,在数据库里的task表中数据为空
     */
    @Test
    public void completeTask2() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("flag", true);//设置为true,结束多人会签
        taskService.complete("d41d6938-e3e0-11ed-b803-00ffaabbccdd", map);
        System.out.println("complete....");
    }

    /**
     * 完成任务
     */
    @Test
    public void completeTask3() {
        Task task = taskService.createTaskQuery()
                .processDefinitionId("holiday-springboot:1:94b7de0c-c7b1-11ed-8c58-00ffaabbccdd")
                .taskAssignee("zhangsan")
                .singleResult();
        if (task != null) {
            taskService.complete(task.getId());
            System.out.println("处理完成。。。。。");
        }
    }

}

/**
 * 部署
 */
@Test
public void testDeploy() {
    Deployment deploy = repositoryService.createDeployment()
        .addClasspathResource("用户多实例会签.bpmn20.xml").name("会签案例").deploy();
    System.out.println("deploy.getId() = " + deploy.getId());
    System.out.println("deploy.getName() = " + deploy.getName());
    System.out.println("部署开始时间: " + new Date());
}

执行结果

3.2 启动流程

/**
 * 启动流程
 */
@Test
public void testStratFlow() {
    HashMap<String, Object> map = new HashMap<>();
    //设置多人会签的数据,一定要大于等于3
    map.put("persons", Arrays.asList("张三", "李四", "王五", "赵六"));
    runtimeService.startProcessInstanceById("MyHolidayUI:1:a275fa34-e3e5-11ed-9555-00ffaabbccdd", map);
}

执行结果

3.3 会签处理任务

/**
 * 完成任务
 */
@Test
public void completeTask() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("flag", false);//设置为true,结束多人会签
    taskService.complete("f7517575-e3e5-11ed-bc21-00ffaabbccdd", map);
    System.out.println("complete....");
}

结束多人会签

/**
 * 完成任务
 * 执行完成任务,在数据库里的task表中数据为空
 */
@Test
public void completeTask2() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("flag", true);//设置为true,结束多人会签
    taskService.complete("d41d6938-e3e0-11ed-b803-00ffaabbccdd", map);
    System.out.println("complete....");
}

标签:map,HashMap,flowable,会签,多人,org,import
From: https://www.cnblogs.com/zhaodefu/p/17355246.html

相关文章

  • web3 产品介绍: safe --多签钱包 多人审批更放心
    Safe是一款由Gnosis团队开发的多签钱包,它提供了一种安全、灵活和易于使用的方式来管理加密资产。在本文中,我们将介绍Safe的主要特点以及如何使用Safe来保护您的数字资产。一、Safe的特点多重签名:Safe使用多重签名机制来保护用户的资产,需要至少两个签名才能完成交易。这使得用......
  • boot-admin整合flowable官方editor-app源码进行BPMN2-0建模(续)
    boot-admin整合flowable官方editor-app源码进行BPMN2-0建模(续)书接上回项目源码仓库github项目源码仓库giteeboot-admin是一款采用前后端分离模式、基于SpringCloud微服务架构的SaaS后台管理框架。系统内置基础管理、权限管理、运行管理、定义管理、代码生成器和办公管理6个功......
  • PageOffice调用本地office实现多人在线同时编辑Word文档
    说明:多人同时在线编辑文件大多数会出现文档相互覆盖的问题,后保存的文档会覆盖先保存的文档。pageoffice的这个功能可以用程序控制不同用户打开文件后,编辑Word文档中属于自己的区域,并且不会互相影响。1、环境:前端:vue后端:springboot、pageoffice5.4.0.3版本vue+springboot集成pa......
  • Springboot整合Flowable6.x导出bpmn20
    项目源码仓库BPMN2.0(BusinessProcessModelandNotation)是一套业务流程模型与符号建模标准,以XML为载体,以符号可视化业务,支持精准的执行语义来描述元素的操作。Flowable诞生于Activiti,是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN2.0流程定义,可以......
  • Flowable6.x导出查看跟踪流程图
    项目源码仓库Flowable诞生于Activiti,是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN2.0流程定义,可以十分灵活地加入你的应用/服务/构架。本文介绍4种绘制流程图的方式,前3种是在后台绘制静态图(image/png格式),以Stream形式返回前端显示。最后1种是后端......
  • Flowable6.x导出查看跟踪流程图(续)
    书接上回项目源码仓库无论是待办、已办,亦或是流转中、已结束的流程实例,通过使用JS绘制SVG格式的交互式流程图,与以上篇博文中三种方式相比,在效果上都具有明显优势。运行效果如下图所示:整合、改造Flowable中displaymodel页面从flowable官方发布包获取前端源码下载官方数据包......
  • WhatsSaaS 优秀项目管理,企业网盘平台分享,支持私有化部署,多人实时协同办公
    项目管理、任务管理器、OKR,多种功能一网打尽,25人以内永久免费,让团队高效协作!在当今的数字化时代,企业需要高效协同办公软件来支持团队的日常工作。whatssaas是一款全新的企业协同办公软件,为团队提供高效的协作和管理工具,让团队成员之间更容易地分享信息和协同完成工作。一、项目管......
  • Java 基础 -- NIO 多人聊天室
    packagecom.atguigu.nio.groupchat;importjava.io.IOException;importjava.net.InetSocketAddress;importjava.nio.ByteBuffer;importjava.nio.channels.*;importjava.util.Iterator;publicclassGroupChatServer{//定义属性privateSelectorselector......
  • 前端工程化实践 - 多人开发分支管理、Git记录提交规范(二)
    一、前言Git在工作中是很重要的一部分,如果操作不熟练或者使用不规范,很容易给工作造成很多麻烦比如习惯所有功能写在一个分支,导致无法分开上线比如提交了依赖目录,导致Git仓库的代码过大比如合并分支出现错误,将不用上线的代码提交比如分支命名不规范,导致误删分支这一篇正好是前端工程......
  • git多人协同(三)
    1.分支分为dev、test、pro1).开发人员开发完的代码放到dev然后发布到开发环境验证2).开发环境验证通过再发布到test   3).测试环境没问题再合并到pro2......