activiti工作流获取下一节点实例

第一个方法getTaskDefinitionList用于包装下面两个方法:

/**
	 * 
	 * @author: Longjun
	 * @Description: 根据实例编号获取下一个任务节点实例集合
	 * @date:2016年3月18日 下午4:33:36
	 * @param sessionId是线程的sessionId;isNeedTransaction表示是否需要事务;procInstId流程实例ID
	 */
	public List<TaskDefinition> getTaskDefinitionList(String procInstId,String sessionId,boolean isNeedTransaction){
		ProcessEngine processEngine = WorkFlowService.getProcessEngine(sessionId, isNeedTransaction);
		HistoryService historyService = processEngine.getHistoryService();
		RepositoryService repositoryService = processEngine.getRepositoryService();
		RuntimeService runtimeService = processEngine.getRuntimeService();
		List<TaskDefinition> taskDefinitionList = new ArrayList<TaskDefinition>();
		//流程标示
		String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInstId).singleResult().getProcessDefinitionId();
		ProcessDefinitionEntity pde = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId);
		//ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl)repositoryService).getDeployedProcessDefinition(processDefinitionId);
		//执行实例
		ExecutionEntity execution = (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(procInstId).singleResult();
		//当前实例的执行到哪个节点
		String activitiId = execution.getActivityId();
		//获得当前任务的所有节点
		List<ActivityImpl> activitiList = pde.getActivities();
		String id = null;
		for(ActivityImpl activityImpl:activitiList){  
			id = activityImpl.getId(); 
			if(activitiId.equals(id)){
				logger.debug("当前任务:"+activityImpl.getProperty("name"));
				taskDefinitionList = nextTaskDefinition(activityImpl, activityImpl.getId());
			}
		}
		return taskDefinitionList;
	}


第二个方法nextTaskDefinition获取所有下一节点集合:

/**
	 * 
	 * @author: Longjun
	 * @Description: 获取所有下一节点
	 * @date:2016年3月18日 下午4:33:24
	 */
	private List<TaskDefinition> nextTaskDefinition(ActivityImpl activityImpl, String activityId){
		List<TaskDefinition> taskDefinitionList = new ArrayList<TaskDefinition>();//所有的任务实例
		List<TaskDefinition> nextTaskDefinition = new ArrayList<TaskDefinition>();//逐个获取的任务实例
		TaskDefinition taskDefinition = null;
		if("userTask".equals(activityImpl.getProperty("type")) && !activityId.equals(activityImpl.getId())){
			taskDefinition = ((UserTaskActivityBehavior)activityImpl.getActivityBehavior()).getTaskDefinition();
			taskDefinitionList.add(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"))||"parallelGateway".equals(ac.getProperty("type"))){
					outTransitionsTemp = ac.getOutgoingTransitions();
					if(outTransitionsTemp.size() == 1){							
						nextTaskDefinition = nextTaskDefinition((ActivityImpl)outTransitionsTemp.get(0).getDestination(), activityId);
						taskDefinitionList.addAll(nextTaskDefinition);
					}else if(outTransitionsTemp.size() > 1){
						for(PvmTransition tr1 : outTransitionsTemp){
							nextTaskDefinition = nextTaskDefinition((ActivityImpl)tr1.getDestination(), activityId);
							taskDefinitionList.addAll(nextTaskDefinition);
						}							
					}
				}else if("userTask".equals(ac.getProperty("type"))){
					taskDefinition = ((UserTaskActivityBehavior)((ActivityImpl)ac).getActivityBehavior()).getTaskDefinition();
					taskDefinitionList.add(taskDefinition);
				}else{
					logger.debug((String) ac.getProperty("type"));
				}
			} 		
		}
		return taskDefinitionList;
	}



第三个方法nextTaskDefinition根据连线条件conditionText(类似${iscorrect==1})获取下一个节点:

/**
	 * 
	 * @author: Longjun
	 * @Description: 根据连线条件conditionText(类似${iscorrect==1})获取下一个节点,此方法以后会用
	 * @date:2016年3月18日 下午4:33:24
	 * @param elString是类似${iscorrect==1}的连线条件
	 */
	@SuppressWarnings("unused")
	private List<TaskDefinition> nextTaskDefinition(ActivityImpl activityImpl, String activityId, String elString){
		List<TaskDefinition> taskDefinitionList = new ArrayList<TaskDefinition>();//所有的任务实例
		List<TaskDefinition> nextTaskDefinition = new ArrayList<TaskDefinition>();//逐个获取的任务实例
		TaskDefinition taskDefinition = null;
		if("userTask".equals(activityImpl.getProperty("type")) && !activityId.equals(activityImpl.getId())){
			taskDefinition = ((UserTaskActivityBehavior)activityImpl.getActivityBehavior()).getTaskDefinition();
			taskDefinitionList.add(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"))||"parallelGateway".equals(ac.getProperty("type"))){
					outTransitionsTemp = ac.getOutgoingTransitions();
					if(outTransitionsTemp.size() == 1){
						nextTaskDefinition = nextTaskDefinition((ActivityImpl)outTransitionsTemp.get(0).getDestination(), activityId,elString);
						taskDefinitionList.addAll(nextTaskDefinition);
					}else if(outTransitionsTemp.size() > 1){
						for(PvmTransition tr1 : outTransitionsTemp){
							Object s = tr1.getProperty("conditionText");
							if(elString.equals(StringUtils.trim(s.toString()))){
								nextTaskDefinition = nextTaskDefinition((ActivityImpl)tr1.getDestination(), activityId,elString);
								taskDefinitionList.addAll(nextTaskDefinition);
							}
						}
					}
				}else if("userTask".equals(ac.getProperty("type"))){
					taskDefinition = ((UserTaskActivityBehavior)((ActivityImpl)ac).getActivityBehavior()).getTaskDefinition();
					taskDefinitionList.add(taskDefinition);
				}else{
					logger.debug((String) ac.getProperty("type"));
				}
			} 
		}
		return taskDefinitionList;
	}
	


你可能感兴趣的:(activiti工作流获取下一节点实例)