activity或者flowable会签任务的事例
需求
一個任務節點需要多個人審批簽字,其中都同意進入到下一個節點,如果有一個不同意就回到上一個節點或者直接結束(我這里是回到上一個節點)
流程圖
流程圖詳情
任務1參數配置
會簽任務參數配置
參數解釋:
sequential:代表是否按順序;
collection:會簽任務的辦理人,是一個list列表,在流程變量中用List做為參數,我這里是設置為assigneeList;
element variable:屬于collection里面的元素,相當于元素的別名 在辦理人那里設置值我這里取名叫assignee(在下圖中設置下面的一個圖中設置辦理人就是${assignee}設置的);
completion condition:是指該節點任務完成的條件即進入到下一個節點的條件;nrOfInstances和nrOfCompletedInstances都是流程變量里面的值;nrOfInstances是代表有多少個對象,即上面collection里面有多少個元素就有多少個對象;nrOfCompletedInstances是指完成了任務的對象,比如collection里面有三個元素,小明屬于一個,小明完成了會簽任務那么nrOfCompletedInstances就會加1,nrOfActiveInstances指的就是還沒有完成會簽任務對象的個數,這三個參數存在的關系nrOfInstances=nrOfCompletedInstances+nrOfActiveInstances;這些參數在到達會簽任務時在表act_ru_variable中會出現
Assignee:辦理人,取的collection中的元素
我這里的任務邏輯就是在啟動流程實例時設置一個參數signCount,起始值為0,辦理人完成會簽任務的時候如果同意該值加1,不同意不做處理;最后如果signCount的值大于等于3就進入下一個節點,小于3就返回上一個節點具體見圖
代碼
// 流程定義部署@Testpublic void definion() {Deployment deploy = repositoryService.createDeployment().addClasspathResource("HQProcess.bpmn").addClasspathResource("HQProcess.png").name("會簽流程測試4").deploy();System.out.println("部署key==" + deploy.getKey());System.out.println("部署Name==" + deploy.getName());System.out.println("部署Id==" + deploy.getId());} // 啟動流程實例@Testpublic void startIncetence() {HashMap<String, Object> map = new HashMap<>();map.put("task1", "施工項目部");ArrayList<String> list = new ArrayList<>();list.add("王明4");list.add("小李4");list.add("紅紅4");// 必須是Listmap.put("assigneeList", list);map.put("signCount", 0);ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("HQProcess4", map);System.out.println("流程實例id==" + processInstance.getId());System.out.println("流程實例Name==" + processInstance.getName());System.out.println("流程實例開始時間==" + processInstance.getStartTime());} /** 查詢當前人的個人任務 */@Testpublic void findMyPersonalTask() {String assignee = "施工項目部";List<Task> list = taskService// 與正在執行的任務管理相關的Service.createTaskQuery()// 創建任務查詢對象/** 查詢條件(where部分) */.taskAssignee(assignee)// 指定個人任務查詢,指定辦理人 // .taskCandidateUser(candidateUser)//組任務的辦理人查詢 // .processDefinitionId(processDefinitionId)//使用流程定義ID查詢 // .processInstanceId(processInstanceId)//使用流程實例ID查詢 // .executionId(executionId)//使用執行對象ID查詢/** 排序 */.orderByTaskCreateTime().asc()// 使用創建時間的升序排列/** 返回結果集 */ // .singleResult()//返回惟一結果集 // .count()//返回結果集的數量 // .listPage(firstResult, maxResults);//分頁查詢.list();// 返回列表if (list != null && list.size() > 0) {for (Task task : list) {System.out.println("任務ID:" + task.getId());System.out.println("任務名稱:" + task.getName());System.out.println("任務的創建時間:" + task.getCreateTime());System.out.println("任務的辦理人:" + task.getAssignee());System.out.println("流程實例ID:" + task.getProcessInstanceId());System.out.println("執行對象ID:" + task.getExecutionId());System.out.println("流程定義ID:" + task.getProcessDefinitionId());System.out.println("########################################################");}}} // 個人完成任務@Testpublic void completeMyPersonalTask() {// 任務IDString taskId = "任務id";taskService.complete(taskId);// 與正在執行的任務管理相關的ServiceSystem.out.println("完成任務:任務ID:" + taskId);}進入到會簽任務節點
/** 查詢當前人的個人任務 */@Testpublic void findMyPersonalTask2() {String assignee = "小李4";List<Task> list = taskService// 與正在執行的任務管理相關的Service.createTaskQuery()// 創建任務查詢對象/** 查詢條件(where部分) */.taskAssignee(assignee)// 指定個人任務查詢,指定辦理人 // .taskCandidateUser(candidateUser)//組任務的辦理人查詢 // .processDefinitionId(processDefinitionId)//使用流程定義ID查詢 // .processInstanceId(processInstanceId)//使用流程實例ID查詢 // .executionId(executionId)//使用執行對象ID查詢/** 排序 */.orderByTaskCreateTime().asc()// 使用創建時間的升序排列/** 返回結果集 */ // .singleResult()//返回惟一結果集 // .count()//返回結果集的數量 // .listPage(firstResult, maxResults);//分頁查詢.list();// 返回列表if (list != null && list.size() > 0) {for (Task task : list) {System.out.println("任務ID:" + task.getId());System.out.println("任務名稱:" + task.getName());System.out.println("任務的創建時間:" + task.getCreateTime());System.out.println("任務的辦理人:" + task.getAssignee());System.out.println("流程實例ID:" + task.getProcessInstanceId());System.out.println("執行對象ID:" + task.getExecutionId());System.out.println("流程定義ID:" + task.getProcessDefinitionId());System.out.println("########################################################");}}}再根據id辦理任務如果同意代碼為
// 個人完成任務@Testpublic void completeMyPersonalTask3() {// 任務IDString taskId = "任務id";List<Task> taskResultList = taskService.createTaskQuery().taskId(taskId).list();//當前executionIdSystem.out.println(taskResultList);//當前executionIdString currentExecutionId = taskResultList.get(0).getExecutionId();//當前簽署總數String currentSignCount = StringUtils.defaultString(runtimeService.getVariable(currentExecutionId, "signCount").toString(), "0");//簽署數+1runtimeService.setVariable(currentExecutionId, "signCount", Integer.parseInt(currentSignCount) + 1);//完成taskService.complete(taskId);}不同意
// 個人完成任務@Testpublic void completeMyPersonalTask() {// 任務IDString taskId = "任務id";taskService.complete(taskId);// 與正在執行的任務管理相關的ServiceSystem.out.println("完成任務:任務ID:" + taskId);}List中的其他會簽人辦理完成之后就會進入到下一個排他網關節點,這時候會根據signCount的值進行判斷走哪里
總結
以上是生活随笔為你收集整理的activity或者flowable会签任务的事例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (文献随笔)关于乳腺癌脑转移文献合集(一
- 下一篇: 利用bat批处理做启动mongodb脚本