Activiti5.2 自動完成第一節點流程

luzhe3014151發表於2020-11-04

在學習工作流時遇到這麼一種情況,就是員工在提交流程時,應該直接跳到下一級進行審批。但目前卻停留在第一節點,還得自己審批一下自己的流程,才可以進入到下一節點。如下圖:

員工提交完流程之後,比如請假流程,應該直接到專案經理審批環節,不應該停留在“員工提交”環節中。先說一下解決思路。

1、在畫流程圖時,將“員工提交”節點的監聽器設定為自己新寫的監聽器類(TaskFirstComplete)。將其他節點設定為其他監聽器,比如查詢上級領導、角色資訊等監聽器。

2、在員工提交流程時,在程式碼塊中查詢自己的待辦事項,並完成。(如果沒看懂這兩條內容,直接看程式碼吧。)

public class TaskFirstComplete implements TaskListener {

   @Override
   public void notify(DelegateTask delegateTask) {
      // 將任務的待辦人設定為當前登入使用者,也就是提交人自己
      delegateTask.setAssignee("已登入使用者名稱");
   }
}

接下來,在提交流程的程式碼塊裡完成自己的待辦事項。

// 這個方法是提交申請時的業務邏輯程式碼
public Boolean saveStartProcess(Integer xxid) {
		
		// 這個是啟動流程,應該是你們自己的程式碼。
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKeyAndTenantId(key, businessKey,
				String.valueOf(TenantContextHolder.getTenantId()));

        // 這是需要加入的程式碼。(開始)
		Task task = null;
		TaskQuery query = taskService.createTaskQuery().taskCandidateOrAssigned("當前登入的使用者名稱").active();
        // 獲取申請人的待辦任務列表
		List<Task> todoList = query.list();
		for (Task tmp : todoList) {
			if(tmp.getProcessInstanceId().equals(processInstance.getId())){
                //獲取當前流程例項,當前申請人的待辦任務
				task = tmp;
				break;
			}
		}
        // 完成自己的流程,相當於自己給自己審批通過,進行到下一節點。
		taskService.complete(task.getId());
        // 這是需要加入的程式碼。(結束)



		leaveBillMapper.updateById(leaveBill);
		return Boolean.TRUE;
	}

好啦,就這樣吧。大致邏輯就是員工自己提交的流程,自己給自己審批了一下。

有不瞭解的,可以隨時提問,我也是剛學習,大家一起交流。

相關文章