Activiti工作流进阶笔记(一)_activitiutils.approve_back-程序员宅基地

技术标签: junit  java  开发语言  

package com.greenery.activity_demo;

import org.activiti.engine.*;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.jupiter.api.Test;

/**
 * @author xxx
 * @date 2022/9/3 15:24
 */
public class ActivitiBusinessDemo {
    

    /**
     * 添加业务key到Activiti表
     */
    @Test
    public void addBusinessKey(){
    
        //    1.获取流程引擎
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        //    2.获取RuntimeService
        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
        //    3.启动流程的过程中添加businesskey
        // 第一个参数流程定义的key
        // 第二个参数为businessKey 存出差申请单的id
        // 该businessKey 添加到了 ACT_RU_EXECUTION表
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myEvection", "1001");
        //    4.输出
        System.out.println("businessKey="+processInstance.getBusinessKey());
      }

    /**
     * 全部流程的挂起与激活
     */
    @Test
    public void suspendAllProcessInstance(){
    
    //    1.获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //    2.获取RespositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //    3.查询流程定义,获取流程定义查询对象
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("myEvection")
                .singleResult();

        //    4.获取当前流程定义的实例是否都是挂起状态
        boolean suspended = processDefinition.isSuspended();
        //    5.获取流程定义的id
        String definitionId = processDefinition.getId();
        //    6.如果是挂起状态,改为激活状态
        if(suspended){
    
            //如果是挂起,可以执行激活的操作,参数1:流程定义id,参数2:是否激活;参数3:激活时间
            repositoryService.activateProcessDefinitionById(definitionId,true,null);
            System.out.println("流程定义id="+definitionId+"已激活");
        }else{
    
            //    7.如果是激活状态,改为挂起状态 参数1:流程定义id,参数2:是否挂起,参数3:挂起时间
            repositoryService.suspendProcessDefinitionById(definitionId,true,null);
            System.out.println("流程定义id="+definitionId+"已挂起");
        }

    }

    /**
     * 挂起或激活单个实例
     */
    @Test
    public void suspendSingleProcessInstance(){
    
    //    1.获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //    2.获取RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //    3.通过RuntimeService获取流程实例对象
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId("20001")
                .singleResult();
        //    4.获取当前流程实例的状态
        boolean suspended = processInstance.isSuspended();
        //    5.获取流程实例id
        String instanceId = processInstance.getId();
        //    6.判断是否已经暂停,如果已经暂停,执行激活操作
        if(suspended){
    
            runtimeService.activateProcessInstanceById(instanceId);
            System.out.println("流程实例id="+instanceId+"已激活");
        }else{
    
            //    7.如果是激活状态,执行挂起操作
            runtimeService.suspendProcessInstanceById(instanceId);
            System.out.println("流程实例id="+instanceId+"已挂起");
        }

    }

    /**
     * 完成个人任务
     */
    @Test
    public void completeTask(){
    
    //    1.获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //    2.获取TaskServie
        TaskService taskService = processEngine.getTaskService();
        //    3.使用TaskService获取任务
        Task task = taskService.createTaskQuery()
                .processInstanceId("20001")
                .taskAssignee("zhangsan")
                .singleResult();
        System.out.println("流程实例id="+task.getProcessInstanceId());
        System.out.println("流程任务id"+task.getId());
        System.out.println("负责人="+task.getAssignee());
        System.out.println("任务名称="+task.getName());
        //    4.根据任务的id完成任务
        taskService.complete(task.getId());
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43956692/article/details/126679550

智能推荐

为什么 UDP 头只有 8 个字节_udp头-程序员宅基地

文章浏览阅读2.2k次。​UDP 与 TCP 两种传输协议是 IP 协议簇的核心成员,1980 年发布的 RFC 768 定义了 UDP 协议,我们可以通过它在多个计算机连接构成的网络中传递数据。常见的 DNS 协议就可以使用 UDP 协议获取域名解析的结果,我们在这一系列前面的 为什么 DNS 使用 UDP 协议 中曾经讨论过 DNS 使用的传输协议。UDP 是能够传输数据的最简单的协议,它的协议首部(也称作协议头)只有 8 个字节,很多人,尤其是应届毕业生都能通过死机硬背暂时记住 UDP 协议头包含的内容,但是知道协议头的内容_udp头

@RequestMapping中的URL占位符详解_接口占位符怎么 写url-程序员宅基地

文章浏览阅读4.2k次。首先这是个SpringMVC里的Controller文件下的注解@RequestMapping()括号里面就是URL地址,本文专门分析一下占位符的意思和作用,首先占位符就是顾名思义就只是一个占位置的,大概是这样的:(”/{id}“),这个id没有任何意义,你甚至可以改成abc,你写出来的注释大概就是@RequestMapping(”/{id}“),让我们来看看整个方法@RequestMapping(”/{id}“)public String test5(@PathVariable String id){_接口占位符怎么 写url

HTML5&CSS3新特性_html5和css3新特性-程序员宅基地

文章浏览阅读7.9k次,点赞23次,收藏222次。一.HTML5新特性HTML5新特性针对于以前的不足,增加了一些新的标签,新的表单,新的表单属性等。1.新增语义化标签新增的带有语义化的标签二.CSS3新特性_html5和css3新特性

pytorch中torch.nn.Conv2d中的groups参数_torch depthwise conv group=-程序员宅基地

文章浏览阅读1.4k次。先来看官方的说明:groups = 1 时就是标准的卷积运算groups=2 时就是分组为2的组卷积分组后分两半进行卷积运算,6个卷积核分两组,最后将结果cat在一起groups = input_channels的情况是这样的当输入通道数等于输出通道数时,就是深度可分离卷积的depthwise conv,可查看mobilenet的论文理解该卷积令我迷惑的时输出通道数不..._torch depthwise conv group=

嵌入式软件学习,你知道如何将屏幕翻转180度吗?i.MX6ULL ---- ElfBoard 的ELF1 板卡_qt 屏幕旋转180度-程序员宅基地

文章浏览阅读94次。MatchDevicePath "/dev/input/event*" //设备节点。3.断电,连接屏幕,上电,等待系统启动完成,此时可以看到qt界面已经翻转180度。MatchProduct "goodix-ts" //设置当前触摸设备。Option "InvertY" "1" //翻转 Y 轴。Option "InvertX" "1" //翻转 X 轴。Option "Rotate" "UD" //显示旋转 180°。2.添加如下标红内容。_qt 屏幕旋转180度

idea maven部分依赖无法导入_idea 引入项目,部分maven依赖引入不进来-程序员宅基地

文章浏览阅读103次。在网络和maven配置都没有问题的时候,仍然无法导入部分依赖的原因:大概率是所需要的依赖版本与idea版本或者是jdk有冲突,换一个idea版本能适应的版本就可以了。_idea 引入项目,部分maven依赖引入不进来

随便推点

升余弦滤波器与根升余弦滤波器_根升余弦和升余弦区别-程序员宅基地

文章浏览阅读4w次,点赞45次,收藏183次。1 升余弦滚降滤波器有啥用? 1, 升余弦滚降滤波器本质上只是一个低通滤波器,只不过它的滚降因子(rolloff effect)会对波形的幅度产生一定影响,一般是降低了波形的幅度并且低通,2.升余弦滚降信号用来消除码间串扰,实际实现时采用的方式是由发送端的基带成行滤波器和接收端的匹配滤波器两个环节公共实现。传输系统的传递函数二者的乘 积,所以每个环节均为平方根升余弦滚降滤波器。2 根升余弦_根升余弦和升余弦区别

Java程序设计——Swing UI 布局管理器(四)-程序员宅基地

文章浏览阅读2.8k次。目录 布局管理器4.1.FlowLayout4.2.BorderLayout4.3.GridLayout4.4.CardLayout4.5.BoxLayout4.6.NULL FlowLayout(); FlowLayout(int align); //align一般取值有:CENTER、LEFT、RIGHT FlowLayout(int align, int hga_swing ui

常见问题之Golang——invalid character ‘-‘ in numeric literal错误_invalid character '-' in numeric literal-程序员宅基地

文章浏览阅读5.2k次,点赞7次,收藏3次。常见问题之Golang——invalid character '-' in numeric literal错误背景本系列文章均为学习过程中记录的笔记,欢迎和我一起来学习Go语言。全文使用环境如下:操作系统:windows10使用工具:Goland开发工具golang版本:1.17简介本文主要是对我日常在使用golang时遇到的一些问题与解决方式进行的汇总,在此提供给大家便于排查..._invalid character '-' in numeric literal

(详细教程)笔记本电脑安装Ubuntu系统_ultraso-程序员宅基地

文章浏览阅读7.7k次,点赞21次,收藏24次。(详细教程)笔记本电脑安装Ubuntu系统_ultraso

Python爬虫手机版-程序员宅基地

文章浏览阅读636次。Python爬虫是一种用于抓取网站数据的自动化程序,其中包括手机版网站。 在进行爬虫编程时,需要使用Python语言编写代码,通过编写代码来自动发送HTTP请求,抓取网站的HTML源代码,并解析源代码中的数据。要编写Python爬虫程序来抓取手机版网站的数据,需要了解如何发送HTTP请求,如何解析HTML源代码,以及如何使用Python处理数据。 常用的Python库有: requests、be..._手机python爬虫工具

魔兽世界燃烧的远征最新服务器,6月2日加入“燃烧的远征” 立刻了解《魔兽世界》经典怀旧服的服务器抉择...-程序员宅基地

文章浏览阅读1.4k次。在诅咒之地的黑暗之门彼岸,有一个被燃烧军团的阴谋诡计撕碎的国度:外域,这里曾经是兽人们美丽的家园“德拉诺”。“燃烧的远征”将于北京时间6月2日于全球上线,一同探索这个国度的奥秘吧。但在此之前,所有英雄都必须做出选择。5月20日,国服服务器的例行维护结束后,“燃烧的远征”前夕补丁就将上线,每个角色都要做出选择,是踏上“燃烧的远征”、转入旧世经典服务器,或是使用角色复制服务在两款游戏中并肩同行。你可以...

推荐文章

热门文章

相关标签