/** * 根据实例编号查找下一个任务节点 * @param String procInstId :实例编号 * @return */ public TaskDefinition nextTaskDefinition(String procInstId){ //流程标示 String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInstId).singleResult().getProcessDefinitionId(); ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl)repositoryService).getDeployedProcessDefinition(processDefinitionId); //执行实例 ExecutionEntity execution = (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(procInstId).singleResult(); //当前实例的执行到哪个节点 String activitiId = execution.getActivityId(); //获得当前任务的所有节点 List<ActivityImpl> activitiList = def.getActivities(); String id = null; for(ActivityImpl activityImpl:activitiList){ id = activityImpl.getId(); if(activitiId.equals(id)){ System.out.println("当前任务:"+activityImpl.getProperty("name")); return nextTaskDefinition(activityImpl, activityImpl.getId(),"${iscorrect==1}"); // System.out.println(taskDefinition.getCandidateGroupIdExpressions().toArray()[0]); // return taskDefinition; } } return null; } /** * 下一个任务节点 * @param activityImpl * @param activityId * @param elString * @return */ private TaskDefinition nextTaskDefinition(ActivityImpl activityImpl, String activityId, String elString){ if("userTask".equals(activityImpl.getProperty("type")) && !activityId.equals(activityImpl.getId())){ TaskDefinition taskDefinition = ((UserTaskActivityBehavior)activityImpl.getActivityBehavior()).getTaskDefinition(); // taskDefinition.getCandidateGroupIdExpressions().toArray(); return taskDefinition; }else{ List<PvmTransition> outTransitions = activityImpl.getOutgoingTransitions(); List<PvmTransition> outTransitionsTemp = null; for(PvmTransition tr:outTransitions){ PvmActivity ac = tr.getDestination(); //获取线路的终点节点 if("exclusiveGateway".equals(ac.getProperty("type"))){ outTransitionsTemp = ac.getOutgoingTransitions(); if(outTransitionsTemp.size() == 1){ return nextTaskDefinition((ActivityImpl)outTransitionsTemp.get(0).getDestination(), activityId, elString); }else if(outTransitionsTemp.size() > 1){ for(PvmTransition tr1 : outTransitionsTemp){ Object s = tr1.getProperty("conditionText"); if(elString.equals(StrUtils.trim(s.toString()))){ return nextTaskDefinition((ActivityImpl)tr1.getDestination(), activityId, elString); } } } }else if("userTask".equals(ac.getProperty("type"))){ return ((UserTaskActivityBehavior)((ActivityImpl)ac).getActivityBehavior()).getTaskDefinition(); }else{ logger.debug(ac.getProperty("type")); } } return null; } }
Activiti获取下一个节点
精选 转载
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
自动登录Centos7并获取数据
通过python脚本,自动登录设备并获取数据,为后续数据消费和数据治理以及自动化运维做铺垫。
运维 数据消费 自动化运维 python 模拟ssh登录 -
Activiti7入门Demo
项目框架描述项目基于
activiti入门 spring ide 报错信息