Activiti 開發案例之動態指派任務


流程圖

以上是一個請假的流程圖,以下為流程任務節點描述:

  • 員工發起請假流程
  • 部門經理審批
  • 同意則進入人事審批
  • 拒絕則調整申請或者直接結束流程
  • 人事審批通過則進入銷假環節
  • 人事審批拒絕則調整申請或者直接結束流程
  • 員工銷假結束流程

任務分配

員工發起申請

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_  = '部門經理'  ))) 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM