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、增加对发起人设置的支持,原先在自定义业务这块漏了这个

相关文章
22activiti - 流程管理定义(查询流程状态)
22activiti - 流程管理定义(查询流程状态)
136 0
|
6月前
|
前端开发
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
593 0
|
6月前
修正flowable的发起流程中根据用户信息流转不同的流程
修正flowable的发起流程中根据用户信息流转不同的流程
60 0
|
5月前
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
49322 11
|
6月前
|
前端开发
基于jeecgboot的flowable流程并行审批的bug修复
基于jeecgboot的flowable流程并行审批的bug修复
99 2
|
6月前
|
监控 前端开发 NoSQL
基于jeecgboot的flowable复杂会签加用户选择流程实现
基于jeecgboot的flowable复杂会签加用户选择流程实现
137 2
|
6月前
|
前端开发
基于jeecgboot的flowable流程设计器的用户选择问题修复
基于jeecgboot的flowable流程设计器的用户选择问题修复
84 1
|
6月前
|
前端开发
基于jeecgboot的flowable流程增加节点表单的支持(四)
基于jeecgboot的flowable流程增加节点表单的支持(四)
76 1
|
6月前
基于jeecgboot的flowable流程增加节点表单的支持(三)
基于jeecgboot的flowable流程增加节点表单的支持(三)
148 1
|
6月前
基于jeecgboot的flowable流程支持online表单审批线上发布
基于jeecgboot的flowable流程支持online表单审批线上发布
71 1