基于若依的ruoyi-nbcio流程管理系统增加流程节点配置(二)

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

gitee源代码地址

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

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

    上一节把数据库与相关基础数据字典准备好,下面就来实现相应的功能,目前先针对自定义业务表单的规则。

    1、前端部分

     在流程模型的列表里增加配置,如下图

 相应前端代码如下:

<el-buttontype="text"size="mini"icon="el-icon-setting"v-hasPermi="['workflow:model:config']"@click.native="handleConfig(scope.row)">配置</el-button>

    下面的组件可以通过生成的流程配置代码修改,具体下一节再说。

<el-dialog :title="flowConfigData.title" :visible.sync="flowConfigOpen" append-to-body fullscreen><flow-config:key="flowConfigOpen"style="border:1px solid rgba(0, 0, 0, 0.1);"ref="flowConfig"v-loading="flowConfigData.loading":flowConfigData="flowConfigData"/></el-dialog>
/** 配置流程 */handleConfig(row) {this.loading = true;console.log("row=",row);getAppType(row.category).then(res => {console.log("res=",res);configModel(row.modelId,res.data[0].id).then(response => {this.$modal.msgSuccess(response.msg);this.flowConfigOpen = true;this.flowConfigData.modelId = row.modelId;console.log("response=",response);}).finally(() => {this.loading = false;})}).finally(() => {this.loading = false;})},

2、后端接口

@Override@Transactional(rollbackFor = Exception.class)public String configModel(String modelId, String appType) {// 获取流程模型Model model = repositoryService.getModel(modelId);if (ObjectUtil.isNull(model)) {throw new RuntimeException("流程模型不存在!");}// 获取流程图byte[] bpmnBytes = repositoryService.getModelEditorSource(modelId);if (ArrayUtil.isEmpty(bpmnBytes)) {throw new RuntimeException("请先设计流程图!");}String bpmnXml = StringUtils.toEncodedString(bpmnBytes, StandardCharsets.UTF_8);BpmnModel bpmnModel = ModelUtils.getBpmnModel(bpmnXml);String processName = model.getName();Process process = bpmnModel.getMainProcess();Collection<FlowElement> flowElements = process.getFlowElements();for (FlowElement flowElement : flowElements) {WfFlowConfigBo flowConfigBo = new WfFlowConfigBo();if (flowElement instanceof StartEvent) {StartEvent startEvent =  (StartEvent)flowElement;WfFlowConfigVo flowConfigVo = new WfFlowConfigVo();flowConfigVo.setModelId(modelId);flowConfigVo.setNodeKey(startEvent.getId());if(ObjectUtils.isEmpty(flowConfigService.selectByModelIdAndNodeKey(flowConfigVo))) {flowConfigBo.setModelId(modelId);flowConfigBo.setAppType(appType);flowConfigBo.setFormKey(startEvent.getFormKey());flowConfigBo.setNodeName(startEvent.getName());flowConfigBo.setNodeKey(startEvent.getId());flowConfigService.insertByBo(flowConfigBo);}else {flowConfigVo.setAppType(appType);flowConfigVo.setFormKey(startEvent.getFormKey());flowConfigVo.setNodeName(startEvent.getName());flowConfigService.updateFlowConfig(flowConfigVo);}}if (flowElement instanceof UserTask) {UserTask userTask = (UserTask)flowElement;WfFlowConfigVo flowConfigVo = new WfFlowConfigVo();flowConfigVo.setModelId(modelId);flowConfigVo.setNodeKey(userTask.getId());if(ObjectUtils.isEmpty(flowConfigService.selectByModelIdAndNodeKey(flowConfigVo))) {flowConfigBo.setModelId(modelId);flowConfigBo.setAppType(appType);flowConfigBo.setFormKey(userTask.getFormKey());flowConfigBo.setNodeName(userTask.getName());flowConfigBo.setNodeKey(userTask.getId());flowConfigService.insertByBo(flowConfigBo);}else {flowConfigVo.setAppType(appType);flowConfigVo.setFormKey(userTask.getFormKey());flowConfigVo.setNodeName(userTask.getName());flowConfigService.updateFlowConfig(flowConfigVo);}}}return modelId;}

3、相应界面如下:

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

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

相关文章

问答社区运营的核心是什么?

问答社区是用户在平台上获得信息的一种方式&#xff0c;一般问答社区适用于医疗行业&#xff0c;法律行业等专业领域的行业&#xff0c;可以划分为知识型分享社区的一种&#xff0c;用户提供提问&#xff0c;邀请回答&#xff0c;选择最佳回复&#xff0c;设置问题围观&#xf…

《微信小程序开发从入门到实战》学习三十六

4.2 云开发JSON数据库 4.2.6 云开发JSON数据库 在集合对象上调用add方法可以在集和中可以插入一条记录&#xff0c;代码如下&#xff1a; db.collection(testOne).add({ // 在JSON数据库的testOne集合中增加一个记录 data:{ name: "write paper" }, // 插入数据成功…

力扣2.两数相加

题目描述 把题读懂后&#xff0c;这道题存在两个需要解决的问题&#xff1a;1.进位问题&#xff1b;2.两个链表长度不一 代码 class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//创建新链表的伪指针&#xff0c;指向链表的头结点ListNode prev n…

选择更灵活的设计工具:SOLIDWORKS 软件网络版与单机版的比较

随着科技的飞速发展&#xff0c;工程设计领域对于高效、灵活的设计工具需求日益增加。SOLIDWORKS 作为一款广受欢迎的三维设计软件&#xff0c;提供了网络版和单机版两种选择。在本文中&#xff0c;我们将深入探讨这两个版本的区别&#xff0c;并为您详细介绍它们的价格差异。 …

如何通过Portal实现消息集成

在数字化时代浪潮下&#xff0c;信息的流通与交互已变得至关重要&#xff0c;不论是在企业内部日常协作&#xff0c;还是与外部客户的紧密沟通&#xff0c;信息的快速、准确、实时传递都成为了确保业务顺畅进行的关键因素、决策精准的核心要素。 为了满足这种日益增长的需求&a…

超实用电脑技巧分享,快速提高工作效率!

“我是个刚开始学习使用电脑的新手&#xff0c;想问问大家有什么比较好用的电脑使用技巧可以推荐一下吗&#xff1f;非常感谢&#xff01;” 在使用电脑时&#xff0c;如果我们适当掌握一些技巧&#xff0c;可以有效提高效率。那么&#xff0c;今天小编就给大家分享一些常见的电…

类 —— 友元、常/静态成员函数

类 类的大小 和结构体大小求法一致。但需注意&#xff0c;普通空类也会占用 1 字节大小&#xff0c;因为普通空类可以实例化对象。 而 抽象空类占 4 字节&#xff08;32 位机中&#xff09;&#xff0c;因为抽象空类中含有虚指针&#xff08;含有虚函数的非抽象空类同理&am…

leetcode:455. 分发饼干

一、题目 原题链接&#xff1a;455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 函数原型&#xff1a;int findContentChildren(int* g, int gSize, int* s, int sSize) 二、思路 将胃口数组和饼干尺寸数组降序排序 遍历两个数组&#xff0c;从胃口数组中找到符合饼干尺…

xcode opencv

1、导入报错 Undefined symbols: linker command failed with exit code 1 (use -v to see invocation) 直接添加如下图内容即可

【Python基础】爬取豆瓣电影Top250+爬取知乎专栏文章标题

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

队列的实现

1.队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾出队列&#xff1a;进行删除操作的一端称为队头 …

局域网协议:ICMP (Internet Control Message Protocol,互联网控制消息协议)

ICMP&#xff08;Internet Control Message Protocol&#xff0c;互联网控制消息协议&#xff09;是用于在IP网络中传递控制消息的协议。它通常被用于网络设备之间交换状态信息和错误报告&#xff0c;以及执行网络诊断和故障排除。 文章目录 ICMP主要功能ICMP的工作原理ICMP消…