Flowable流程中自定义业务表单并行审批的bug修复

简介: Flowable流程中自定义业务表单并行审批的bug修复

   根据网友反馈开源项目宁波阿成 (nbacheng) - Gitee.com

   有自定义业务表单并行审批的bug需要修复,主要是后端自定义业务审批逻辑上的问题

 自定义表的完成任务completeForDataID里的问题

主要是下面代码部分

if (nextFlowNode!=null){
            //**有下一个节点
            UserTask nextUserTask = nextFlowNode.getUserTask();
            //能够处理下个节点的候选人
            List<SysUser> nextFlowNodeUserList = nextFlowNode.getUserList();
            List<String> collect_username = nextFlowNodeUserList.stream().map(SysUser::getUsername).collect(Collectors.toList());
            //collect_username转换成realname
            List<String> newusername = new ArrayList<String>();
            // 流程发起人
            ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(taskVo.getInstanceId()).singleResult();
            String startUserId = processInstance.getStartUserId();
            if(taskVo.getValues() !=null && taskVo.getValues().containsKey("approval")) {//前端传回的变量值
              SysUser sysUser = iFlowThirdService.getUserByUsername(taskVo.getValues().get("approval").toString());
              newusername.add(sysUser.getRealname());
            }
            else {
              for (String oldUser : collect_username) {
                  if(StrUtil.equals(oldUser,"${INITIATOR}")) {
                    SysUser sysUser = iFlowThirdService.getUserByUsername(startUserId);
                      newusername.add(sysUser.getRealname());
                  }
                  else {
                   SysUser sysUser = iFlowThirdService.getUserByUsername(oldUser);
                     newusername.add(sysUser.getRealname());
                  }
                }
            }
            //下一个实例节点
            List<Task> listtask = taskService.createTaskQuery().processInstanceId(business.getProcessInstanceId()).active().list();
            Task nexttask = null;
            if(listtask.size()==1) {
              nexttask = taskService.createTaskQuery().processInstanceId(business.getProcessInstanceId()).active().singleResult();
            }
            else {
              nexttask = taskService.createTaskQuery().processInstanceId(business.getProcessInstanceId()).active().list().get(0);
            }
            
            // 下个节点候选人,目前没有实现这功能,返回null
            List<String> beforeParamsCandidateUsernames = Lists.newArrayList();
            if(nexttask!=null){
                beforeParamsCandidateUsernames = flowCallBackService.flowCandidateUsernamesOfTask(nexttask.getTaskDefinitionKey(),taskVo.getValues());
            }
            business.setActStatus(ActStatus.doing)
                    .setTaskId(nexttask.getId())
                    .setTaskNameId(nextUserTask.getId())
                    .setTaskName(nextUserTask.getName())
                    .setPriority(nextUserTask.getPriority())
                    .setDoneUsers(doneUserList.toJSONString())
                    .setTodoUsers(JSON.toJSONString(newusername))
                ;
            // 删除后重写
            for (String oldUser : collect_username) {
                taskService.deleteCandidateUser(nexttask.getId(),oldUser);
            }
            if (CollUtil.isNotEmpty(beforeParamsCandidateUsernames)){
                // 业务层有指定候选人,覆盖
                for (String newUser : beforeParamsCandidateUsernames) {
                    taskService.addCandidateUser(nexttask.getId(),newUser);
                }
                business.setTodoUsers(JSON.toJSONString(beforeParamsCandidateUsernames));
            } else {
                for (String oldUser : collect_username) {
                  if(StrUtil.equals(oldUser,"${INITIATOR}")) {
                    taskService.addCandidateUser(nexttask.getId(),startUserId);
                  }
                  else {
                    taskService.addCandidateUser(nexttask.getId(),oldUser);
                  }
                    
                }
            }

1、其中多个并行任务的时候对nexttask的任务进行处理,避免报错

2、增加对发起人设置的支持,原先在自定义业务这块漏了这个

相关文章
|
7月前
22activiti - 流程管理定义(查询流程状态)
22activiti - 流程管理定义(查询流程状态)
58 0
|
5天前
|
前端开发
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
31 0
|
5天前
修正flowable的发起流程中根据用户信息流转不同的流程
修正flowable的发起流程中根据用户信息流转不同的流程
11 0
|
5天前
|
前端开发
基于jeecgboot的flowable流程并行审批的bug修复
基于jeecgboot的flowable流程并行审批的bug修复
15 2
|
5天前
|
前端开发
基于jeecgboot的flowable流程设计器的用户选择问题修复
基于jeecgboot的flowable流程设计器的用户选择问题修复
10 1
|
5天前
基于jeecgboot的flowable流程增加节点表单的支持(二)
基于jeecgboot的flowable流程增加节点表单的支持(二)
11 0
|
5天前
|
前端开发
基于jeecgboot的flowable流程增加节点表单的支持(四)
基于jeecgboot的flowable流程增加节点表单的支持(四)
14 1
|
5天前
基于jeecgboot的flowable流程增加节点表单的支持(一)
基于jeecgboot的flowable流程增加节点表单的支持(一)
10 0
|
5天前
基于jeecgboot的flowable流程增加节点表单的支持(三)
基于jeecgboot的flowable流程增加节点表单的支持(三)
10 1
|
5天前
基于jeecgboot的flowable流程支持online表单审批线上发布
基于jeecgboot的flowable流程支持online表单审批线上发布
10 1