Activiti 流程图上标记当前任务





public byte[] getCurrTaskTrackImage(String deoployId,String processInstanceId) {
		byte[] imageByte = null;
		ByteArrayOutputStream out = null;
		try{
			ProcessDefinition processDefinition = null;
			if(deoployId != null) {
				processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deoployId).singleResult();
			}else{
				HistoricProcessInstance processInstance = findProcessInstanceHisById(processInstanceId);
				processDefinition = ((RepositoryServiceImpl)repositoryService).getProcessDefinition(processInstance.getProcessDefinitionId());
			}
			String diagramResourceName = processDefinition.getDiagramResourceName();
			InputStream imageStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), diagramResourceName);
			BufferedImage image = ImageIO.read(imageStream); 
			List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
			Task currTask = list.get(0);
			String taskId = currTask.getId();
			Graphics g = image.getGraphics();
			g.setColor(Color.red);
			ActivityImpl currActivity = findCurrActivityGraph(taskId);
			int x = currActivity.getX(),
				y = currActivity.getY(),
				weight = currActivity.getWidth(),
				height = currActivity.getHeight();
			g.drawRect(x-1, y-1, weight, height);
			g.dispose();
//			
			ImageIO.write(image, "PNG", new File("C:/1.png"));
			out = new ByteArrayOutputStream();
	        ImageIO.write(image, "PNG", out);
	        imageByte = out.toByteArray();
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally{
			try {
				out.flush();
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return imageByte;
	}


public ActivityImpl findCurrActivityGraph(String taskId) {
		HistoricTaskInstance currTask = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();  
		String currActivitiId = currTask.getTaskDefinitionKey();
		ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl)repositoryService).
				getDeployedProcessDefinition(currTask.getProcessDefinitionId());
		ActivityImpl activityImpl = def.findActivity(currActivitiId);
		return activityImpl;
	}

private HistoricProcessInstance findProcessInstanceHisById(String processInstanceId) throws Exception {
		HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
		if(historicProcessInstance == null) {
			throw new Exception("流程历史实例未找到!");
		}
		return historicProcessInstance;
	}


猜你喜欢

转载自tianqiushi.iteye.com/blog/2115284
今日推荐