基于jeecgboot的flowable流程并行审批的bug修复

简介: 基于jeecgboot的flowable流程并行审批的bug修复

  对于下面的并行流程,会出现流程错误,特别是下面角色的处理与一个任务节点多个用户处理问题,所以需要进行修复bug。

     1、后端处理

    设置下一个审批人员的时候需要对一个任务节点多个数据进行容错处理,对于要是用户最好选择不通的用户处理,以最后审批选择的人员为准。

/**
     * 设置下一个审批人的操作
     *
     * @param taskVo
     */
    private void taskSetAssignee(FlowTaskVo taskVo, FlowNextDto nextFlowNode) {
      if(taskVo.getValues().containsKey("approval")) {//有approval
        if(taskService.createTaskQuery().processInstanceId(taskVo.getInstanceId()).taskDefinitionKey(nextFlowNode.getUserTask().getId()).active().count() == 1) {//一个目标用户任务节点只能设置一次
          Task nexttask = taskService.createTaskQuery().processInstanceId(taskVo.getInstanceId()).taskDefinitionKey(nextFlowNode.getUserTask().getId()).active().singleResult();
        if(Objects.nonNull(nexttask)) {
          String assignee = taskVo.getValues().get("approval").toString();  
          taskService.setAssignee(nexttask.getId(), assignee);
        }
        }
        else {
          TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(taskVo.getInstanceId()).taskDefinitionKey(nextFlowNode.getUserTask().getId()).active();
          for(Task task : taskQuery.list()) {
            String assignee = taskVo.getValues().get("approval").toString();  
            taskService.setAssignee(task.getId(), assignee);  
          }
        }
      }
    }

对于myProcessNew和allProcess的任务ID统一做下面处理

// 当前所处流程
            List<Task> taskList = taskService.createTaskQuery().processInstanceId(hisIns.getId()).list();
            if (CollUtil.isNotEmpty(taskList)) {
              flowTask.setTaskId(taskList.get(0).getId());
            } else {
                List<HistoricTaskInstance> historicTaskInstance = historyService.createHistoricTaskInstanceQuery().processInstanceId(hisIns.getId()).orderByHistoricTaskInstanceEndTime().desc().list();
                flowTask.setTaskId(historicTaskInstance.get(0).getId());
            }

2、前端处理

对于角色的处理,无论是多人还是单人都进行选择处理

else if (data.type === 'candidateUsers') { // 指定人员(多个)
              this.userDataList = res.result.userList;
              //console.log("candidateUsers nodeType,bmutiInstanceFinish=",this.taskForm.nodeType,this.taskForm.bmutiInstanceFinish) 
              if(this.userDataList.length===1) {
                this.checkSendUser = true;
              }

同时对下面的函数做出错提示

getProcessVariables(taskId).then(res => {
            console.log("getProcessVariables res=",res);
            // this.variables = res.result.variables;
            if(res.success) {
              if(res.result.hasOwnProperty('variables')) {
                this.variablesData = res.result.variables;
                console.log("this.variablesData=",this.variablesData)
                this.variableOpen = true;
                this.formViewData = JSON.stringify(this.variablesData);
                this.formVal = JSON.stringify(this.variablesData.formValue);
                this.taskForm.values = JSON.parse(this.formVal);
                console.log("this.taskForm.values=",this.taskForm.values);
              }
            }
            else {
              this.$message.error(res.message);
            }

3、具体的流程图如下:


相关文章
|
6月前
|
前端开发
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
607 0
|
6月前
|
前端开发
基于jeecgboot的flowable流程设计器的用户选择问题修复
基于jeecgboot的flowable流程设计器的用户选择问题修复
89 1
|
6月前
|
监控 前端开发 NoSQL
基于jeecgboot的flowable复杂会签加用户选择流程实现
基于jeecgboot的flowable复杂会签加用户选择流程实现
145 2
|
6月前
基于jeecgboot的flowable流程支持online表单审批线上发布
基于jeecgboot的flowable流程支持online表单审批线上发布
73 1
|
6月前
基于jeecgboot的flowable流程按照条件进行流转的例子
基于jeecgboot的flowable流程按照条件进行流转的例子
174 1
|
6月前
基于jeecgboot的flowable流程增加节点表单的支持(三)
基于jeecgboot的flowable流程增加节点表单的支持(三)
150 1
|
6月前
|
前端开发
基于jeecgboot的flowable流程增加节点表单的支持(四)
基于jeecgboot的flowable流程增加节点表单的支持(四)
76 1
|
6月前
|
前端开发
基于jeecgboot的flowable流程任务excel导出功能
基于jeecgboot的flowable流程任务excel导出功能
61 1
|
6月前
基于jeecgboot的flowable流程设计器的几个bug修复
基于jeecgboot的flowable流程设计器的几个bug修复
62 0
|
6月前
Flowable流程中自定义业务表单并行审批的bug修复
Flowable流程中自定义业务表单并行审批的bug修复
136 0