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