基于若依的ruoyi-nbcio流程管理系统增加读取节点扩展属性的方法

更多ruoyi-nbcio功能请看演示系统

gitee源代码地址

前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio

演示地址:RuoYi-Nbcio后台管理系统

        我们的在流程设计器里会根据需要再不同的节点增加扩展属性,如何动态读取这些扩展属性,下面提供一种方法。

       1、比如设计里,在这个节点增加属性test2,值是属性2

2、可以在流程启动的时候读取发起人节点的扩展属性或在complete里增加读取扩展属性

下面是在complete读取当前节点的扩展属性

Map<String, Object> flowProperties = getFlowProperties(taskBo.getProcInsId());

/*** 完成任务** @param taskBo 请求实体参数*/@Transactional(rollbackFor = Exception.class)@Overridepublic void complete(WfTaskBo taskBo) {Task task = taskService.createTaskQuery().taskId(taskBo.getTaskId()).singleResult();if (Objects.isNull(task)) {throw new ServiceException("任务不存在");}//获取流程当前节点设置的扩展属性值,需要的时候可以使用//Map<String, Object> flowProperties = getFlowProperties(taskBo.getProcInsId());

3、其中相应的方法如下:

@Overridepublic Map<String, Object> getFlowProperties(String procInsId) {try {Task task = taskService.createTaskQuery().processInstanceId(procInsId).active().singleResult();ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult();BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());List<FlowViewerDto> flowViewerList = (List<FlowViewerDto>) getFlowViewer(task.getProcessInstanceId()).getData();FlowViewerDto dto = flowViewerList.stream().filter(flowViewerDto -> !flowViewerDto.isCompleted()).findFirst().orElse(null);String actId;if (ObjectUtils.isNotEmpty(dto)) {actId = dto.getKey();} else {return null;}FlowElement element = bpmnModel.getFlowElement(actId);List<ExtensionElement> extensionElements = element.getExtensionElements().get("properties");List<ExtensionElement> child = null;for (ExtensionElement extensionElement : extensionElements) {child = extensionElement.getChildElements().get("property");}List<Map<String, List<ExtensionAttribute>>> list = new ArrayList<>();child.stream().forEach(o -> {Map<String, List<ExtensionAttribute>> attributeMap = o.getAttributes();list.add(attributeMap);});Map<String, Object> result = new HashMap();list.stream().forEach(a -> {result.put(a.get("name").get(0).getValue(), a.get("value").get(0).getValue());});return result;} catch (NullPointerException nullExcption) {return null;}}/*** 获取流程执行过程** @param procInsId* @return*/@Overridepublic R getFlowViewer(String procInsId) {List<FlowViewerDto> flowViewerList = new ArrayList<>();FlowViewerDto flowViewerDto;// 获得活动的节点List<HistoricActivityInstance> hisActIns = historyService.createHistoricActivityInstanceQuery().processInstanceId(procInsId).orderByHistoricActivityInstanceStartTime().asc().list();for (HistoricActivityInstance activityInstance : hisActIns) {if (!"sequenceFlow".equals(activityInstance.getActivityType())) {flowViewerDto = new FlowViewerDto();flowViewerDto.setKey(activityInstance.getActivityId());flowViewerDto.setCompleted(!Objects.isNull(activityInstance.getEndTime()));flowViewerList.add(flowViewerDto);}}return R.ok(flowViewerList);}

4、其中FlowViewerDto如下: 

/***/
@Data
public class FlowViewerDto implements Serializable {private String key;private boolean completed;
}

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

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

相关文章

Python:Unittest框架快速入门:用例、断言、夹具、套件、HTML报告、ddt数据驱动

快速看了套Unittest的入门教程 软件测试全套资料赠送_哔哩哔哩_bilibili软件测试全套资料赠送是快速入门unittest测试框架&#xff01;全实战详细教学&#xff0c;仅此一套&#xff01;的第1集视频&#xff0c;该合集共计11集&#xff0c;视频收藏或关注UP主&#xff0c;及时了…

matlab GUI界面实现ZieglerNicholas调节PID参数

1、内容简介 略 11-可以交流、咨询、答疑 ZieglerNicholas、PID、GUI 2、内容说明 GUI界面实现ZieglerNicholas调节PID参数 通过ZieglerNicholas调节PID参数&#xff0c;设计了GUI 3、仿真分析 略 4、参考论文 略 链接&#xff1a;https://pan.baidu.com/s/1yQ1yDfk-_…

单片机定时器讲解和实现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、计数器是什么&#xff1f;二、单片机定时器结构2.1***两个8位如何合成16位&#xff0c;16位如何分成两个8位***2.2 计数器的位数组合&#xff1f;2.3 定时功…

常用网络命令ping、arp、tracert、route的详细用法,弄懂立马成大神

你们好&#xff0c;我的网工朋友。 做网工&#xff0c;你遇到最多的问题是啥&#xff1f;大部分人的回答都是网络故障吧。 所以有很多朋友多次问到&#xff0c;如何检测网络故障和对网络进行基础的操作。比如&#xff1a;网络经常掉线、网络时好时坏&#xff0c;ip地址冲突、…

通过Malloc 和 Free 的具体实现 加深对C指针 的理解(笔记)

【彻底搞懂C指针】Malloc 和 Free 的具体实现 https://danluu.com/malloc-tutorial/ 进程间的通信 : ①共享内存 ② 消息传递 &#xff08;内核实现&#xff09; 分配策略 (实现方面) by DUCK sbrk() malocal实现的主要函数 man sbrk 查看 数据结构 一个参考代码 https…

pytorch基础语法问题

这里写目录标题 pytorch基础语法问题shapetorch.ones_like函数和torch.zeros_like函数y.backward(torch.ones_like(x), retain_graphTrue)torch.autograd.backward参数grad_tensors: z.backward(torch.ones_like(x))来个复杂例子z.backward(torch.Tensor([[1., 0]])更复杂例子实…

1.0.0 IGP高级特性简要介绍(OSPF-下篇)

二、OSPF_精细的路由控制 1.OSPF数据库上限 简介 ​ OSPF技术要求同一个区域内的路由器保存着相同的LSDB信息。 ​ 但随着网络上路由数量不断增加&#xff0c;一些路由器由于系统资源有限&#xff0c;不能再承载如此多的路由信息&#xff0c;这种状态就被称为数据库超限&am…

STM32GPIO——上拉、下拉电阻

如上两个图所示&#xff0c;标号2都为上拉、下拉电阻部分&#xff0c;阻值约为30k~50k欧&#xff0c;通过对应开关进行控制&#xff0c;开关由寄存器控制。 当引脚外部的器件没有干扰引脚的电压时&#xff0c;即没有外部的上、下拉电压&#xff0c;引脚的电平由引脚内部上、下…

【机器学习】八、规则学习

知识图谱与基本概念 基本概念 规则学习定义&#xff1a;从训练数据中学习出一组能用于对未见示例进行判别的规则。 规则定义&#xff1a;规则一般是&#xff1a;语义明确、能描述数据分布所隐含的客观规律或领域概念。 逻辑规则定义&#xff1a;⊕←?1⋀?2⋀?3…⋀??⊕…

下载并安装DevEco Studio 3.1,初尝鸿蒙编程

摘自华为官网 DevEco Studio 3.1配套支持HarmonyOS 3.1版本及以上的应用及服务开发&#xff0c;提供了代码智能编辑、低代码开发、双向预览等功能&#xff0c;以及轻量构建工具DevEco Hvigor 、本地模拟器&#xff0c;持续提升应用及服务开发效率。 下载 官网下载地址 HUAWEI…

理解快速排序

理解快速排序 首先了解以下快速排序 快速排序&#xff08;QuickSort&#xff09;是一种常用的排序算法&#xff0c;属于比较排序算法的一种。它是由英国计算机科学家Tony Hoare于1960年提出的&#xff0c;是一种分而治之&#xff08;divide and conquer&#xff09;的算法。 …

模拟ASP.NET Core MVC设计与实现

前几天有人在我的《ASP.NET Core框架揭秘》读者群跟我留言说&#xff1a;“我最近在看ASP.NET Core MVC的源代码&#xff0c;发现整个系统太复杂&#xff0c;涉及的东西太多&#xff0c;完全找不到方向&#xff0c;你能不能按照《200行代码&#xff0c;7个对象——让你了解ASP.…

css实现进度条

预期样式 方法一 <script setup> import { ref } from "vue"; // import ScreenLeft from "./ScreenLeft/index.vue"; const width ref("76.5%"); </script><template>Screen<div class"progress-contain">…

详解数据仓库之拉链表(原理、设计以及在Hive中的实现)

最近发现一本好书&#xff0c;读完感觉讲的非常好&#xff0c;首先安利给大家&#xff0c;国内第一本系统讲解数据血缘的书&#xff01;点赞&#xff01;近几天也会安排朋友圈点赞赠书活动(ง•̀_•́)ง 0x00 前言 本文将会谈一谈在数据仓库中拉链表相关的内容&#xff0c;包…

ZYNQ_project:key_beep

通过按键控制蜂鸣器工作。 模块框图&#xff1a; 时序图&#xff1a; 代码&#xff1a; /*1位按键消抖 */ module key_filter (input wire sys_clk ,input wire sys_rst_n ,input wire key_in ,output …

springboot项目使用Swagger3

一、Swagger介绍 号称世界上最流行的Api框架&#xff1b;Restful Api 文档在线自动生成工具>Api文档与API定义同步更新直接运行&#xff0c;可以在在线测试API 接口支持多种语言&#xff1a;&#xff08;java&#xff0c;Php…&#xff09; 二、Swagger3 准备工作 1、在p…

VsCode 安装 GitHub Copilot插件 (最新)

##在线安装&#xff1a; 打开Vscode扩展商店&#xff0c;输入 "GitHub Copilot " ,选择下载人数最多的那个。&#xff08;这个是你写一部分代码或者注释&#xff0c;Ai自动帮你提示/补全代码&#xff09;,建议选择这个 注意下面有个和他类似的 "GitHub Copilo…

BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2306.02329 摘要&#xff1a; 训练模型将常识性语言知识和视觉概念从 2D 图像应用到 3D 场景理解是研究人员最近才开始探索的一个有前景的方向。然而&#xff0c…

APS、SAP解析BOM批量核对(我的APS项目三)

APS提供了解析BOM接口 SAP从CU50中解析了BOM 博主开发了一个程序&#xff0c;把两边的BOM数据拉到一起来比对&#xff0c;从最初的一个车型&#xff0c;增加到5个车型&#xff0c;最后成型是30个车型&#xff0c;几乎覆盖了F1、F2的全部车型。 并且程序还实现了消息提醒功能&…

Kotlin(十) 空指针检查、字符串内嵌表达式以及函数默认值

空指针检查 我们在之前的章节里&#xff0c;有定义一个Study的类&#xff0c;它有两个函数&#xff0c;一个doHomework(),一个readBooks()。然后我们定义个doStudy函数&#xff0c;来调用它们&#xff0c;代码如下&#xff1a; fun doStudy(study: Study) {study.doHomework(…