21.flowable 加签 向前加签 向后加签

项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base
视频讲解地址 https://www.bilibili.com/video/av78471660/

加签:同时让多人处理任务
1、向前加签
任务在A这里,A这个时候需要BCD核对一下,等BCD核对之后又回到A这里
2、向后加签
任务在A这里,A这个时候需要BCD处理这个事情,处理完毕之后就不用管了,继续后面的审批环节

实际情况中,我们应该只有一种加签比较合适,因为用户的使用的时候,如果是一排按钮的话,他自己都搞不清楚到底点击哪个了。我在实际的情况下是使用向后加签的。

第一演示:

21.flowable 加签 向前加签 向后加签_第1张图片
21.flowable 加签 向前加签 向后加签_第2张图片


代码分享


1、加签的方法

public ReturnVo<String> addSignTask(AddSignTaskVo addSignTaskVo, Boolean flag) {
        ReturnVo<String> returnVo = null;
        TaskEntityImpl taskEntity = (TaskEntityImpl) taskService.createTaskQuery().taskId(addSignTaskVo.getTaskId()).singleResult();
        //1.把当前的节点设置为空
        if (taskEntity != null) {
            //如果是加签再加签
            String parentTaskId = taskEntity.getParentTaskId();
            if (StringUtils.isBlank(parentTaskId)) {
                taskEntity.setOwner(addSignTaskVo.getUserCode());
                taskEntity.setAssignee(null);
                taskEntity.setCountEnabled(true);
                if (flag) {
                    taskEntity.setScopeType(FlowConstant.AFTER_ADDSIGN);
                } else {
                    taskEntity.setScopeType(FlowConstant.BEFORE_ADDSIGN);
                }
                //1.2 设置任务为空执行者
                taskService.saveTask(taskEntity);
            }
            //2.添加加签数据
            this.createSignSubTasks(addSignTaskVo, taskEntity);
            //3.添加审批意见
            String type = flag ? CommentTypeEnum.HJQ.toString() : CommentTypeEnum.QJQ.toString();
            this.addComment(addSignTaskVo.getTaskId(), addSignTaskVo.getUserCode(), addSignTaskVo.getProcessInstanceId(),
                    type, addSignTaskVo.getMessage());
            String message = flag ? "后加签成功" : "前加签成功";
            returnVo = new ReturnVo<>(ReturnCode.SUCCESS, message);
        } else {
            returnVo = new ReturnVo<>(ReturnCode.FAIL, "不存在任务实例,请确认!");
        }
        return returnVo;
    }

2、审批环节处理

//4.处理加签父任务
                    String parentTaskId = taskEntity.getParentTaskId();
                    if (StringUtils.isNotBlank(parentTaskId)) {
                        String tableName = managementService.getTableName(TaskEntity.class);
                        String sql = "select count(1) from " + tableName + " where PARENT_TASK_ID_=#{parentTaskId}";
                        long subTaskCount = taskService.createNativeTaskQuery().sql(sql).parameter("parentTaskId", parentTaskId).count();
                        if (subTaskCount == 0) {
                            Task task = taskService.createTaskQuery().taskId(parentTaskId).singleResult();
                            //处理前后加签的任务
                            taskService.resolveTask(parentTaskId);
                            if (FlowConstant.AFTER_ADDSIGN.equals(task.getScopeType())) {
                                taskService.complete(parentTaskId);
                            }
                        }
                    }

你可能感兴趣的:(Flowable基础,flowable,flowable企业级)