流程图
以上是一个请假的流程图,以下为流程任务节点描述:
- 员工发起请假流程
- 部门经理审批
- 同意则进入人事审批
- 拒绝则调整申请或者直接结束流程
- 人事审批通过则进入销假环节
- 人事审批拒绝则调整申请或者直接结束流程
- 员工销假结束流程
任务分配
员工发起申请
ProcessInstance process = runtimeService.startProcessInstanceByKey("leave",businessKey, variables);
Task task = taskService.createTaskQuery().processInstanceId(process.getId()).active().singleResult();
//此时,应删除掉流程图中赋值的角色,否则会重复
taskService.addCandidateGroup(task.getId(),"部门经理");
部门经理审批
通过逻辑:
Map<String,Object> variables=new HashMap<String,Object>();
variables.put("approve", "true");
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult();
//一定要认领任务之后,重新获取当前任务,然后分配角色。
taskService.claim(task.getId(), userId);
taskService.complete(task.getId(), variables);
task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult();
//此时,应删除掉流程图中赋值的角色,否则会重复
taskService.addCandidateGroup(task.getId(),"人事");
拒绝逻辑:
Map<String,Object> variables=new HashMap<String,Object>();
variables.put("approve", "false");
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult();
//一定要认领任务之后,重新获取当前任务,然后分配角色。
taskService.claim(task.getId(), userId);
taskService.complete(task.getId(), variables);
task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult();
//applyId为申请人ID
taskService.addCandidateUser(task.getId(),applyId);
待办任务
API 查询
TaskQuery taskQuery = taskService.createTaskQuery();
List<Task> list = taskQuery.taskCandidateOrAssigned(userId)
使用API的话,需要做视图映射,Activiti开发案例之创建用户表视图实现关联查询
SQL 查询
-- 多个用户或者角色可以用 IN
select distinct RES.* from ACT_RU_TASK RES
left join ACT_RU_IDENTITYLINK I on I.TASK_ID_ = RES.ID_
WHERE SUSPENSION_STATE_ = '1'
AND ( RES.ASSIGNEE_ ='99' or (RES.ASSIGNEE_ is null
AND ( I.USER_ID_ = '99' or I.GROUP_ID_ = '部门经理' )))
扩展
如果办理人想原地改派任务,可以使用以下API
:
/**
* 删除指派人重新指派
*/
taskService.deleteCandidateUser(taskId,"原用户ID");
taskService.addCandidateUser(taskId,"新用户ID");