
流程圖

以上是一個請假的流程圖,以下為流程任務節點描述:
- 員工發起請假流程
- 部門經理審批
- 同意則進入人事審批
- 拒絕則調整申請或者直接結束流程
- 人事審批通過則進入銷假環節
- 人事審批拒絕則調整申請或者直接結束流程
- 員工銷假結束流程
任務分配
員工發起申請
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(taskId, userId);
taskService.complete(taskId, variables);
task = taskService.createTaskQuery().processInstanceId(process.getId()).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(taskId, userId);
taskService.complete(taskId, variables);
task = taskService.createTaskQuery().processInstanceId(process.getId()).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_ = '部門經理' )))
