activiti取回

public static void main(String[] args) {
		//读取配置文件,获取工作流的引擎实例
        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
        //获取引擎对象
        ProcessEngine engine = processEngineConfiguration.buildProcessEngine();
        TaskService taskService=engine.getTaskService();
        RuntimeService runtimeService=engine.getRuntimeService();
        RepositoryService repositoryService=engine.getRepositoryService();
        HistoryService historyService=engine.getHistoryService();
		try {
			Map<String, Object> variables;
			// 取得当前任务
			HistoricTaskInstance currTask = historyService
					.createHistoricTaskInstanceQuery().taskId("327602")
					.singleResult();
			// 取得流程实例
			ProcessInstance instance = runtimeService
					.createProcessInstanceQuery()
					.processInstanceId(currTask.getProcessInstanceId())
					.singleResult();
			if (instance == null) {
				System.out.println("流程已经结束");
				return;
			}
			variables=instance.getProcessVariables();
			// 取得流程定义
			ProcessDefinitionEntity definition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
					.getDeployedProcessDefinition(currTask
							.getProcessDefinitionId());
			if (definition == null) {
				System.out.println("流程定义未找到");
				return;
			}
			// 当前操作节点的活动
			ActivityImpl currActivity = ((ProcessDefinitionImpl) definition)
					.findActivity(currTask.getTaskDefinitionKey());
			//下一步活动的连线如:[(usertask2)--flow3-->(usertask3), (usertask2)--flow5-->(usertask1)]
			List<PvmTransition> nextTransitionList = currActivity
					.getOutgoingTransitions();
			for (PvmTransition nextTransition : nextTransitionList) {
				//下一个活动节点
				PvmActivity nextActivity = nextTransition.getDestination();
				List<HistoricTaskInstance> completeTasks = historyService
						.createHistoricTaskInstanceQuery()
						.processInstanceId(instance.getId())
						.taskDefinitionKey(nextActivity.getId()).finished()
						.list();
				//判断下一个连线节点是否完成了
				int finished = completeTasks.size();
				if (finished > 0) {
					System.out.println("存在已经完成的下一步,流程不能取回");
					return;
				}
				//第一次循环,走第一条数据:[Task[id=327702, name=总监审批]]
				List<org.activiti.engine.task.Task> nextTasks = taskService.createTaskQuery().processInstanceId(instance.getId())
						.taskDefinitionKey(nextActivity.getId()).list();
				for (org.activiti.engine.task.Task nextTask : nextTasks) {	
					//取活动,清除活动方向
					List<PvmTransition> oriPvmTransitionList = new ArrayList<PvmTransition>();
					//[(usertask3)--flow4-->(endevent1), (usertask3)--flow6-->(usertask1)]
					List<PvmTransition> pvmTransitionList = nextActivity
							.getOutgoingTransitions();
					for (PvmTransition pvmTransition : pvmTransitionList) {
						oriPvmTransitionList.add(pvmTransition);
					}
					pvmTransitionList.clear();
					//建立新方向
					//Activity(usertask3)
					ActivityImpl nextActivityImpl = ((ProcessDefinitionImpl) definition)
							.findActivity(nextTask.getTaskDefinitionKey());
					//(usertask3)-->(usertask2)
					TransitionImpl newTransition = nextActivityImpl
							.createOutgoingTransition();
					newTransition.setDestination(currActivity);
					//完成任务
					taskService.complete(nextTask.getId(), variables);
					historyService.deleteHistoricTaskInstance(nextTask.getId());
					//恢复方向
					currActivity.getIncomingTransitions().remove(newTransition);
					List<PvmTransition> pvmTList = nextActivity
							.getOutgoingTransitions();
					pvmTList.clear();
					for (PvmTransition pvmTransition : oriPvmTransitionList) {
						pvmTransitionList.add(pvmTransition);
					}
				}
			}
			historyService.deleteHistoricTaskInstance(currTask.getId());
		} catch (Exception e) {
			System.out.println("流程取回失败,未知错误.");
			return;
		}
	
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值