Activiti 開發案例之動態指派任務
- 2019 年 12 月 5 日
- 筆記
流程圖

以上是一個請假的流程圖,以下為流程任務節點描述:
- 員工發起請假流程
- 部門經理審批
- 同意則進入人事審批
- 拒絕則調整申請或者直接結束流程
- 人事審批通過則進入銷假環節
- 人事審批拒絕則調整申請或者直接結束流程
- 員工銷假結束流程
任務分配
員工發起申請
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的話,需要做視圖映射。
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");