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

news2024/11/28 7:44:18

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

gitee源代码地址

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

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

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

    1、前端部分

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

 相应前端代码如下:

<el-button
            type="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.coloradmin.cn/o/1266783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python语言学习笔记之五(Python代码注解)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 注解与注释是不一样的&#xff0c;注解有更广泛的应用&#xff1b; 通过注解与注释都能提高代码的可读性和规…

探索三种生成模型:基于DDPMs、NCSNs和SDEs方法的Diffusion

探索三种生成模型&#xff1a;基于DDPMs、NCSNs和SDEs方法的Diffusion 去噪扩散概率模型&#xff08;DDPMs&#xff09;正向过程反向过程 噪声条件得分网络&#xff08;NCSNs&#xff09;正向过程初始化训练 NCSNs生成样本 反向过程 随机微分方程&#xff08;SDEs&#xff09;原…

2 线、3 线和 4 线 RTD 配置之间有什么区别?

电阻温度检测器 (RTD) 是温度传感器的一种&#xff0c;由于其准确性、可重复性和稳定性而广泛应用于各种工业应用。这些设备通过感测材料温度变化时电阻的变化来测量温度。 RTD 探头有多种配置&#xff0c;包括 2 线、3 线和 4 线型号。这些类型之间存在显着差异&#xff0c;在…

【古月居《ros入门21讲》学习笔记】08_发布者Publisher的编程实现

目录 说明&#xff1a; 1. 话题模型 图示 说明 2. 实现过程&#xff08;C&#xff09; 创建功能包 创建发布者代码&#xff08;C&#xff09; 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程&#xff08;Python&#xff09; 创建发布者代码&#xff08;…

双音多频的通信(数字信号处理实验3)

&#xff08;1&#xff09;从数字信号处理的角度分析双音多频通信&#xff0c;查阅资料了解双音多频通信的原理及工作过程&#xff0c;总结在实验报告中。 &#xff08;2&#xff09;了解DTMF接收信号时&#xff0c;离散傅立叶变化的过程。 &#xff08;3&#xff09;在程序中改…

电力智能化系统(智能电力综合监控系统)

电力智能化系统是一个综合性的系统&#xff0c;它利用物联网、云计算、大数据、人工智能等技术&#xff0c;依托电易云-智慧电力物联网&#xff0c;采用智能采集终端和物联网关&#xff0c;将电力设备、用电负荷、电力市场等各个环节有机地联系起来&#xff0c;实现了对电力配送…

sqli-labs靶场详解(less25/25a-less28/28a)

在SQL注入过程中难点就是判断注入点 只要注入点确定了 获取数据库数据的过程就是复制 从这关开始 只进行判断注入点了和代码逻辑分析了 因为注入操作太简单了&#xff08;不演示了&#xff09; 目录 less-25 less-25a less-26 less-26a less-27 less-27a less-28 less-…

vue使用echarts中国地图

需求&#xff1a;Vue3 vite TS 项目内使用 Echarts 5 绘制中国地图。鼠标悬浮省份上面显示指定的数据&#xff0c;地图支持缩放和拖拽的功能&#xff0c;页面放大缩小支持自适应&#xff0c;window.addEventListener(‘resize’, resize); 添加防抖动函数debounce。 一、安装…

房屋租赁出售经纪人入驻小程序平台

一款专为房屋中介开发的小程序平台&#xff0c;支持独立部署&#xff0c;源码交付&#xff0c;数据安全无忧。 核心功能&#xff1a;房屋出租、经纪人独立后台、分佣后台、楼盘展示、房型展示、在线咨询、地址位置配套设施展示。 程序已被很多房屋交易中介体验使用过&#x…

操作系统校招知识点总结

文章目录 前言1. 操作系统概述1.1 操作系统的四大特征&#xff08;并共虚异&#xff09;1.2 操作系统的主要功能&#xff1f;1.3 动态链接库和静态链接库的区别&#xff1f;1.4 并发和共享之间的关系&#xff1f;1.5 中断和异常的概念&#xff1f; 2. 进程与线程2.1 进程和线程…

台灯怎么选对眼睛好?适合考研使用的护眼台灯推荐

现在晚上仍然需要工作、学习的人有很多&#xff0c;这样的一件事似乎已经成为“家常便饭”&#xff0c;尤其事对于一些学生党而言。每天都有写不完的作业、做不完的功课&#xff0c;这样高强度的用眼下来&#xff0c;容易导致眼睛疲劳、近视等等。很多人会选择在夜晚的时候使用…

基于Java SSM框架+Vue实现房屋租赁网站项目【项目源码+论文说明】

基于java的SSM框架Vue实现房屋租赁网站演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;房屋租赁系统当然也不能排除在外。房屋租赁系统是以实际运用为开发背景&…

计算机网络 一到二章 PPT 复习

啥币老师要隔段时间测试&#xff0c;我只能说坐胡狗吧旁边 第一章 这nm真的会考&#xff0c;我是绷不住的 这nm有五种&#xff0c;我一直以为只有三种 广播帧在后面的学习中经常遇到 虽然老师在上课的过程中并没有太过强调TCP/IP的连接和断开&#xff0c;但我必须强调一下&…

数组元素积的符号

数组元素积的符号 描述 : 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。如果 x 是负数&#xff0c;返回 -1 。如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的…

ER图-重新学习与应用实践

1.应用场景 主要用于利用ER图快速实现项目需求开发实现. 2.学习/操作 1.文档阅读 chatgpt & 其他资料 ER图-相关 ER 图是什么&#xff1f;这一篇让你搞懂 ER 图&#xff01;_数据分析_产品海豚湾_InfoQ写作社区 2.整理输出 2.1 是什么 ER 图也称实体-联系图(Entity Relat…

界限与不动产测绘乙级申请条件

整理一期关于测绘资质界限与不动产测绘乙级资质的申请要求 测绘资质是由测绘资质主管部门自然资源部制定的 想要了解标准、正规的申请条件&#xff0c;可以到当地省份的政务网搜索测绘资质办理相关标准&#xff08;例如下图&#xff09; 1、通用标准 http://gi.mnr.gov.cn/20…

visual c++ 2019 redistributable package

直接安装下面包只有24M Microsoft Visual C Redistributable 2019 x86: https://aka.ms/vs/16/release/VC_redist.x86.exe x64: https://aka.ms/vs/16/release/VC_redist.x64.exe ———————————————— 版权声明&#xff1a;本文为CSDN博主「kpacnB_Z」的原创文章…

Unity安装

DAY1 下载Unity 打开Unity3D官网&#xff0c;下载Unity Hub&#xff0c;管理Unity的软件。链接https://unity.cn/releases (可能需要注册账号&#xff0c;就正常注册登录即可) 如果是新版的hub&#xff0c;可能长下面这个样子&#xff0c;还是英文的&#xff0c;点击圆圈的设…

【模电】晶闸管

晶闸管 结构和等效模型工作原理晶闸管的伏安特性晶闸管的主要参数额定正向平均电流 I F I\tiny F IF维持电流 I H I\tiny H IH触发电压 U G U\tiny G UG和触发电流 I G I\tiny G IG正向重复峰值电压 U D R M U\tiny DRM UDRM反向重复峰值电压 U R R M U\tiny RRM URRM 晶体闸流…

使用Python实现SVM来解决二分类问题

下面是一个使用Python实现SVM来解决二分类问题的例子&#xff1a; # 导入所需的库 from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split from sklearn.svm import SVC import matplotlib.pyplot as plt# 生成一个二分类数据集 X, …