项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base
视频讲解地址 https://www.bilibili.com/video/av78471660/
加签:同时让多人处理任务
1、向前加签
任务在A这里,A这个时候需要BCD核对一下,等BCD核对之后又回到A这里
2、向后加签
任务在A这里,A这个时候需要BCD处理这个事情,处理完毕之后就不用管了,继续后面的审批环节
实际情况中,我们应该只有一种加签比较合适,因为用户的使用的时候,如果是一排按钮的话,他自己都搞不清楚到底点击哪个了。我在实际的情况下是使用向后加签的。
第一演示:
代码分享
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);
}
}
}