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

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

更多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、相应界面如下:


相关文章
|
7月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统修复自定义业务表单的收回功能
基于若依的ruoyi-nbcio流程管理系统修复自定义业务表单的收回功能
70 1
|
7月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统自定义业务流程出现多个时相应的流程选择问题(二)
基于若依的ruoyi-nbcio流程管理系统自定义业务流程出现多个时相应的流程选择问题(二)
72 3
|
7月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统自定义业务回写状态的一种新方法(二)
基于若依的ruoyi-nbcio流程管理系统自定义业务回写状态的一种新方法(二)
80 2
|
7月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统自定义业务回写状态的一种新方法(一)
基于若依的ruoyi-nbcio流程管理系统自定义业务回写状态的一种新方法(一)
85 1
|
7月前
|
JSON 移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(二)
基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(二)
97 2
|
7月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(三)
基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(三)
81 2
|
7月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统自定义业务实现一种简单的动态任务标题(续)
基于若依的ruoyi-nbcio流程管理系统自定义业务实现一种简单的动态任务标题(续)
55 1
|
7月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统自定义业务实现一种简单的动态任务标题需求
基于若依的ruoyi-nbcio流程管理系统自定义业务实现一种简单的动态任务标题需求
95 1
|
7月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统自定义业务流程出现多个时相应的流程选择问题(一)
基于若依的ruoyi-nbcio流程管理系统自定义业务流程出现多个时相应的流程选择问题(一)
62 1
|
7月前
|
移动开发 前端开发 数据库
基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(一)
基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(一)
84 1