Activiti技術流程的啟動與終止
阿新 • • 發佈:2019-02-11
1、Activity流程啟動和終止的方法如下:
/** * 通過 流程的key 啟動流程 * @param defintionkey * @param params 包含使用者id * @return */ public ProcessInstance startProcessInstanceByKey(String defintionkey, Map<String, Object> params) { //dedmenlopmentProcess(defintionkey); Long userId = Securitys.getAuthenticationUser().getId();//獲取當前登入使用者id(方法可能不同) if(params == null) { params = new HashMap<String, Object>(); } params.put("startUserId", userId.toString()); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(defintionkey, params); return processInstance; } public void dedmenlopmentProcess(String defKey) { long count = runtimeService.createProcessInstanceQuery().processDefinitionKey(defKey).count(); if(count <= 0) { repositoryService.createDeployment(). addClasspathResource(/*這裡一般放流程路徑*/).deploy(); } } /** * 完成當前節點 * @param taskId * @param params 包含使用者id */ public void completeCurrentTask(String taskId, Map<String, Object> params) { taskService.complete(taskId, params); //taskService.claim(taskId, userId); } public void completeTask(Task task, Map<String, Object> variables){ runtimeService.setVariablesLocal(task.getExecutionId(), variables); taskService.complete(task.getId()); } /** * 該方法我自己用到少 * 認領任務 true : 成功! false: 失敗 * @param taskId * @param userId * @return */ public boolean claimTheTask(String taskId, String userId) { //Long userId = Securitys.getAuthenticationUser().getId(); try { taskService.claim(taskId, userId); return true; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } } /** * @see is Acitiviti * * 根據使用者id 獲取該使用者在某個流程例項的能夠接受的任務列表 * @param userId * @param pageParams * @return */ public List<Task> findTaskByProcessAndCandidate(String userId,String processId){ TaskQuery taskQuery = taskService.createTaskQuery().processInstanceId(processId).taskCandidateOrAssigned(userId).active(); List<Task> resultTask = taskQuery.list(); return resultTask; } /** * 啟用任務 * @param processId */ @AjaxRpcMethod public void activeTaskByProcessId(String processId){ runtimeService.activateProcessInstanceById(processId); } /** * 掛起任務 * @param processId */ @AjaxRpcMethod public void suspendTaskByProcessId(String processId){ runtimeService.suspendProcessInstanceById(processId); } /** * 完結任務 * @param processId */ @AjaxRpcMethod public void deleteTaskByProcessId(String processId){ runtimeService.deleteProcessInstance(processId, "結束"); }
2、接下來就是方法的呼叫 ,例項進入流程的方法我分開為兩步寫(實際情況下可以合併的),方法如下:
/** * 第一步 * 啟動流程 * @param user 登入使用者 * @param commentAccessory 進入流程的例項 * @param nextUserId 指定的下一個使用者id * @param userIds * @param processName 流程名稱 * @param resultId * @return */ public void startOrEnterActiviti(User user, CommentAccessory commentAccessory, String nextUserId, String processName){ Map<String, Object> params = new HashMap<String, Object>(); params.put("userId", user.getId().toString()); params.put("result", resultId); //通過 流程的key 啟動流程 (該方法在上面內容中已寫好) ProcessInstance process = startProcessInstanceByKey(processName, params); //根據使用者id和流程id 獲取該使用者在某個流程例項的能夠接受的任務列表 (該方法在上面內容中已寫好) List<Task> taskList = findTaskByProcessAndCandidate(user.getId().toString(), process.getId()); if(taskList.size()>0){ Task task = taskList.get(0); params.clear(); params.put("userId", nextUserId); params.put("messagerId", user.getId()); //完成當前任務(該方法在上面內容中已寫好) completeTask(task, params); commentAccessory.setTaskId(task.getId());//在定義的例項中儲存任務id commentAccessory.setProcessId(process.getId());//在定義的例項中儲存流程id commentAccessoryManager.save(commentAccessory); } } /** * 進入流程(第二步開始) * @param user * @param commentAccessoryId 例項id * @param nextUserId * @return */ public void enterActiviti(User user, Integer commentAccessoryId, String nextUserId) { try { CommentAccessory commentAccessory = commentAccessoryManager.load(commentAccessoryId); String processId = commentAccessory.getProcessId(); List<Task> taskList = findTaskByProcessAndCandidate(user.getId().toString(), processId); Map<String, Object> params = new HashMap<String, Object>(); if(taskList.size()>0){ Task task = taskList.get(0); completeCurrentTask(task.getId(), params); commentAccessory.setTaskId(task.getId()); commentAccessoryManager.save(commentAccessory); } } catch (Exception e) { e.printStackTrace(); } }