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;
}
}
activiti取回
最新推荐文章于 2024-07-10 21:37:49 发布