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