2023最新版本Activiti7系列-身份服务

身份服务

在这里插入图片描述

  在流程定义中在任务结点的 assignee 固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn 文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多个候选人或者候选人组,可以从候选人中选择参与者来完成任务。

1.审批人

  前面案例中直接指派审批的用户的处理

2.候选人

  一个审批节点可能有多个人同时具有审批的权限。这时我们就可以通过候选人来处理。

2.1 绘制流程图

  我们定义一个简单的审批流程图。如下:

在这里插入图片描述

  人事审批中我们设置多个候选人来处理,分别是张三,李四,王五

在这里插入图片描述

在总经理的位置我们统一设置几个候选人来审批

在这里插入图片描述

创建的对应的流程图的xml文件中内容如下:

在这里插入图片描述

2.2 部署和启动流程

  流程图设计好后我们就可以部署流程和启动流程实例了。

/*** 流程部署操作*/
@Test
public void test1(){// 1.获取ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2.完成流程的部署操作 需要通过RepositoryService来完成RepositoryService repositoryService = processEngine.getRepositoryService();// 3.完成部署操作Deployment deploy = repositoryService.createDeployment().addClasspathResource("flow/test5.bpmn20.xml").name("候选人").deploy(); // 是一个流程部署的行为 可以部署多个流程定义的System.out.println(deploy.getId());System.out.println(deploy.getName());
}/*** 发起一个流程*/
@Test
public void test3(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 发起流程 需要通过 runtimeService来实现RuntimeService runtimeService = engine.getRuntimeService();// 通过流程定义ID来启动流程  返回的是流程实例对象ProcessInstance processInstance = runtimeService.startProcessInstanceById("holiday1:2:90003");System.out.println("processInstance.getId() = " + processInstance.getId());System.out.println("processInstance.getDeploymentId() = " + processInstance.getDeploymentId());System.out.println("processInstance.getDescription() = " + processInstance.getDescription());
}

启动流程实例后。在act_ru_task中的审批人是空的,

在这里插入图片描述

但是在对应的act_ru_identitylink中我们可以看到对应的候选人信息

在这里插入图片描述

1.3 任务的拾取

  候选要操作我们需要通过拾取的行为把候选人转换为处理人.那么候选人登录后需要能查询出来他可以拾取的任务。

   /*** 候选人 审批任务查询* 张三 登录OA系统*/@Testpublic void test4(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = engine.getTaskService();List<Task> list = taskService.createTaskQuery().taskCandidateUser("张三") // 根据候选人查询审批任务.list();if(list != null && list.size() > 0){for (Task task : list) {System.out.println("task.getId() = " + task.getId());//taskService.complete(task.getId());}}}/*** 待办任务的 拾取 操作*    从候选人 --> 处理人* 一个任务如果被拾取后。其他的候选人就查询不到改任务信息了*/
@Test
public void test5(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = engine.getTaskService();List<Task> list = taskService.createTaskQuery().taskCandidateUser("王五") // 根据候选人查询审批任务.list();if(list != null && list.size() > 0){for (Task task : list) {// 李四 拾取了 这个任务的审批权限 --> 变成了这个任务的审批人taskService.claim(task.getId(),"王五");}}
}

1.4.任务的归还

  拾取任务后如果不想操作那么可以归还任务

/***  归还:拾取的用户 不审批了。就放弃审批人的操作*  其他的候选人可以重新拾取人了*/
@Test
public void test6(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = engine.getTaskService();List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned("李四") // 根据 审批人或者 候选人来查询待办任务.list();if(list != null && list.size() > 0){for (Task task : list) {// System.out.println("task.getId() = " + task.getId());// 归还操作的本质其实就是设置审批人为空taskService.unclaim(task.getId());}}
}

3.候选人组

  当候选人很多的情况下,我们可以分组来处理。先创建组,然后把用户分配到这个组中。

3.1 流程图绘制

在这里插入图片描述

然后在设置审批人的时候通过候选人组来设定

在这里插入图片描述

对应的流程图xml中的定义信息

在这里插入图片描述

3.2 流程操作

  流程操作包括部署,启动,拾取,归还交接等操作

/*** 流程部署操作*/
@Test
public void test1(){// 1.获取ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 2.完成流程的部署操作 需要通过RepositoryService来完成RepositoryService repositoryService = processEngine.getRepositoryService();// 3.完成部署操作Deployment deploy = repositoryService.createDeployment().addClasspathResource("flow/test6.bpmn20.xml").name("候选人组").deploy(); // 是一个流程部署的行为 可以部署多个流程定义的System.out.println(deploy.getId());System.out.println(deploy.getName());
}/*** 发起一个流程*/
@Test
public void test3(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 发起流程 需要通过 runtimeService来实现RuntimeService runtimeService = engine.getRuntimeService();// 通过流程定义ID来启动流程  返回的是流程实例对象ProcessInstance processInstance = runtimeService.startProcessInstanceById("holiday1:3:97503");System.out.println("processInstance.getId() = " + processInstance.getId());System.out.println("processInstance.getDeploymentId() = " + processInstance.getDeploymentId());System.out.println("processInstance.getDescription() = " + processInstance.getDescription());
}/*** 候选人组:*    具体的用户。比如 张三  登录了系统*    查询张三对应的 组 根据 组来查询待办的任务*/
@Test
public void test4(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = engine.getTaskService();String group = "销售部"; // 根据当前登录用户查询到的List<Task> list = taskService.createTaskQuery().taskCandidateGroup(group).list();if(list != null && list.size() > 0){for (Task task : list) {System.out.println("task.getId() = " + task.getId());//taskService.complete(task.getId());}}
}/*** 待办任务的 拾取 操作*    从候选人 --> 处理人* 一个任务如果被拾取后。其他的候选人就查询不到改任务信息了*/
@Test
public void test5(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = engine.getTaskService();String group = "销售部"; // 根据当前登录用户查询到的List<Task> list = taskService.createTaskQuery().taskCandidateGroup(group) // 根据组来查询.list();if(list != null && list.size() > 0){for (Task task : list) {// 张三1 拾取了 这个任务的审批权限 --> 变成了这个任务的审批人taskService.claim(task.getId(),"张三1");}}
}/***  归还:拾取的用户 不审批了。就放弃审批人的操作*  其他的候选人可以重新拾取人了*/
@Test
public void test6(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = engine.getTaskService();String group = "销售部"; // 根据当前登录用户查询到的List<Task> list = taskService.createTaskQuery().taskAssignee("张三1").list();if(list != null && list.size() > 0){for (Task task : list) {// System.out.println("task.getId() = " + task.getId());// 归还操作的本质其实就是设置审批人为空taskService.unclaim(task.getId());}}
}/***  获取用户审批权限的用户没有时间审批了*  但是他也可以不用归还而是做任务的交接。把这个任务让另一个人来审批*/
@Test
public void test8(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = engine.getTaskService();String group = "销售部"; // 根据当前登录用户查询到的List<Task> list = taskService.createTaskQuery().taskAssignee("张三1").list();if(list != null && list.size() > 0){for (Task task : list) {// System.out.println("task.getId() = " + task.getId());// 任务交接taskService.setAssignee(task.getId(),"李四1");}}
}/*** 任务审批*/
@Test
public void test7(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = engine.getTaskService();taskService.complete("92505");
}

对应的流程中的候选人组信息同样记录在act_ru_identitylink

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26528.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue-next-admin vue3.x版本,table自定义

vue3.x版本&#xff0c;将table进行了封装。使用起来更方便了。但是&#xff0c;有时候我们需要将一组信息显示到一列中。所以我将其进行了简单的二次改造。支持table-column自定义。 table改造代码 <template><div class"table-container"><el-tabl…

【Ajax】笔记-POST请求(原生)

POST请求 html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>AJAX POST 请求</title><…

VScode——NPM脚本窗口找不到

一、问题描述&#xff08;NPM终端在任务栏左侧找不到&#xff09; VScode&#xff08;Visual Studio Code&#xff09;版本&#xff1a;1.79.2 二、解决办法 第一步&#xff1a;通过设置/用户设置/扩展/MPM更改NPM默认配置&#xff0c;如下图所示&#xff1a; 第二步&#xff…

springboot实现全局异常捕获

导言&#xff1a; 为什么要做异常处理&#xff1a; 原因有三&#xff1a; 1、将系统产生的全部异常统一捕获处理。 2、自定义异常需要由全局异常来捕获。 3、JSR303规范的validator参数校验器、参数校验不通过、本身无法使用try…catch 其实对于前后端分离的项目做异常处理…

分布式应用之Zookeeper和Kafka

分布式应用之Zookeeper和Kafka 一、Zookeeper 1.定义 分布式系统管理框架&#xff0c;主要用来解决分布式集群中应用系统的一致性问题 相当于各种分布式应用服务的 注册中心 文件系统 通知机制2.特点 &#xff08;1&#xff09;Zookeeper&#xff1a;一个领导者&#…

【Java基础教程】(十五)面向对象篇 · 第九讲:抽象类和接口——定义、限制与应用的细节,初窥模板设计模式、工厂设计模式与代理设计模式~

Java基础教程之面向对象 第九讲 本节学习目标1️⃣ 抽象类1.1 抽象类定义1.2 抽象类的相关限制1.3 抽象类应用——模板设计模式 2️⃣ 接口2.1 接口定义2.2 接口的应用——标准2.3 接口的应用——工厂设计模式 (Factory)2.4 接口的应用——代理设计模式 (Proxy) 3️⃣ 抽象类与…

数据库的扩展策略

了解不同的数据库扩展技术可以帮助我们选择适合我们需求和目的的合适策略。 因此&#xff0c;在本文中&#xff0c;我们将展示不同的解决方案和技术&#xff0c;用于扩展数据库服务器。它们分为读取和写入策略。 读取/加载 有时我们的应用程序承受着巨大的负载。为了解决这个…

【VSCode | 使用技巧集锦】中文插件突然失效、配置单个工程(工作区)编码

目录 ✨技巧一&#xff1a;中文插件失效的解决办法✨技巧二&#xff1a;配置单个工程(工作区)编码 ✨技巧一&#xff1a;中文插件失效的解决办法 问题描述&#xff1a;VSCode之前安装了中文插件&#xff0c;可以正常汉化&#xff0c;用了一段时间都没问题&#xff0c;今天打开v…

51单片机的智能交通控制系统【含仿真+程序+演示视频带原理讲解】

51单片机的智能交通控制系统【含仿真程序演示视频带原理讲解】 1、系统概述2、核心功能3、仿真运行及功能演示4、程序代码 1、系统概述 该系统由AT89C51单片机、LED灯组、数码管组成。通过Protues对十字路口红绿灯控制逻辑进行了仿真。 每个路口包含了左转、右转、直行三条车道…

【UE4 塔防游戏系列】08-敌人到达终点对玩家造成伤害

目录 效果 步骤 一、敌人到终点时扣除玩家生命值 二、显示玩家生命值 效果 可以看到敌人进入终点后&#xff0c;左上角的玩家生命值会减少。 步骤 一、敌人到终点时扣除玩家生命值 新建一个Actor蓝图类&#xff0c;命名为“BP_EnemyEndPlace”&#xff0c;用来表示终点…

Pytest测试框架搭建需求及实现方案

目录 框架需求及实现方案 框架需求 实现方案 支持接口自动化、Web UI自动化及App自动化# 可以批量运行用例并生成测试报告 测试完成发送邮件 提供灵活的运行方式&#xff0c;如按功能模块运行、按脚本运行、按用例等级运行等等 提供运行日志方便定位问题 支持切换环境 …

三季度上市,比亚迪海豹DM-i内饰官图发布,延续海洋风格

据报道&#xff0c;比亚迪海洋网旗下全新车型海豹 DM-i今日发布了内饰官方图片。新车内部采用了独特的“海洋美学”设计理念&#xff0c;并体现了海洋网最新一代内饰风格。消息称&#xff0c;这款车型将于第三季度上市&#xff0c;定位为中大型混合动力轿车。 值得注意的是&…