首页>代码>最新activiti测试版,流程图设计,bpm设计>/ACTIVITI_TEST/src/action/PitctureAction.java
package action;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;


import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.activiti.bpmn.model.SequenceFlow;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.pvm.process.ProcessDefinitionImpl;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;


public class PitctureAction extends ActionSupport {
	 
	private static final long serialVersionUID = 2754710324037673469L;
	private static final int DEFAULT_IMAGE_TYPE = BufferedImage.TYPE_3BYTE_BGR;
	
	public String getProcessPic(){
		 HttpServletRequest request = ServletActionContext.getRequest();
		 HttpServletResponse response = ServletActionContext.getResponse();
		 	//创建流程引擎
			ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();   
			//RuntimeService runtimeService = processEngine.getRuntimeService();			
			RuntimeService runtimeService = processEngine.getRuntimeService();
			ProcessInstance pq = runtimeService.createProcessInstanceQuery().processInstanceId("4605").singleResult();
			
			RepositoryService reponsitoryService = processEngine.getRepositoryService();
			InputStream imageStream = reponsitoryService.getProcessDiagram(pq.getProcessDefinitionId());
			
			String realpath = ServletActionContext.getServletContext().getRealPath("/images");
			File file = new File(new File(realpath), "ParallelGate.png");						
			
			BufferedImage image = null;
			try {
				
				image = javax.imageio.ImageIO.read(file);
				response.setContentType("image/png");  		      
				response.setHeader("Pragma","No-cache");
				response.setHeader("Cache-Control","no-cache");
				response.setDateHeader("Expires", 0);
				Graphics2D  g = (Graphics2D) image.getGraphics();	
				g.setStroke(new BasicStroke(2));
				
				//g.drawRect(20, 20, 40, 40);				
				g.setColor(Color.RED);				
				g.drawRoundRect(90, 0, 100, 60,20, 20);
				
				ImageIO.write(image, "JPG", response.getOutputStream());
			} catch (IOException e) {
				e.printStackTrace();
			} 
	        return SUCCESS;
	}
	
	public String getProcessMap() {
				
		
		HttpServletResponse response = ServletActionContext.getResponse();		  
        ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();   
       
        //获取服务
        RuntimeService runtimeService = processEngine.getRuntimeService();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        HistoryService historyService = processEngine.getHistoryService();

        //取得流程相应的实例
        ProcessInstance pq = runtimeService.createProcessInstanceQuery().processInstanceId("4905").singleResult();
        InputStream imageStream = repositoryService.getProcessDiagram(pq.getProcessDefinitionId());
        List<HistoricTaskInstance> finishedlist = historyService.createHistoricTaskInstanceQuery().processInstanceId("4905").finished().list();        
        ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
                .getDeployedProcessDefinition(pq.getProcessDefinitionId());
           
       
        List<String> ActiveActivityIds = runtimeService.getActiveActivityIds(pq.getId());//获取所有的未执行的节点任务
        List<ActivityImpl> activitiList = def.getActivities();// 获得当前任务的所有节点
                
        List<ActivityImpl> actimpl = new ArrayList<ActivityImpl>();//存储未执行的节点任务
        List<ActivityImpl> finishedimpl = new ArrayList<ActivityImpl>();//存储已执行的节点任务
        int x = 1024,y=1024;
        for (ActivityImpl activityImpl : activitiList) {
        	if(activityImpl.getX()<x){
        		x=activityImpl.getX();
        	}
        	if(activityImpl.getY()<y){
        		y=activityImpl.getY();
        	}        	
        }
        
        for (ActivityImpl activityImpl : activitiList) {
            String id = activityImpl.getId();
            for(String ids:ActiveActivityIds){// 获得未执行的节点任务
            	 if (id.equals(ids)) {
            		 actimpl.add(activityImpl);
                     break;
                 }            	 
            }  
            for(HistoricTaskInstance history:finishedlist){// 获得已执行的节点任务
            	if (id.equals(history.getName())) {
            		finishedimpl.add(activityImpl);
            		break;
                }            	 
           }  
        }       
        
		try {
			//取出流程图
	      //  String realpath = ServletActionContext.getServletContext().getRealPath("/images");
			//File file = new File(new File(realpath), "ParallelGate.png");					
			 			
			//对流程图进行加工处理
			BufferedImage image =ImageIO.read(imageStream);
			
			//设置响应数据格式
			ServletOutputStream sos = response.getOutputStream();		
			
			response.setContentType("image/JPEG");  		      
			response.setHeader("Pragma","No-cache");
			response.setHeader("Cache-Control","no-cache");
			response.setDateHeader("Expires", 0);			
			
			Graphics2D  g = (Graphics2D) image.getGraphics();	
			g.setBackground(Color.WHITE);  
			g.setRenderingHint(RenderingHints.KEY_ANTIALIASING , RenderingHints.VALUE_ANTIALIAS_ON);
			g.setBackground(Color.WHITE);  			
			//将未执行的任务节点标红
			for (ActivityImpl activity : actimpl){
				g.setStroke(new BasicStroke(2));				
				g.setColor(Color.white);				
				g.drawRoundRect(activity.getX()-x+5, activity.getY()-y+5, activity.getWidth(), activity.getHeight(),20, 20);
				
				g.setStroke(new BasicStroke(1));
				g.setColor(Color.RED);				
				g.drawRoundRect(activity.getX()-x+5, activity.getY()-y+5, activity.getWidth(), activity.getHeight(),20, 20);
			}
			
			//将已执行的任务节点标绿
			for (ActivityImpl activity : finishedimpl){
				g.setStroke(new BasicStroke(2));				
				g.setColor(Color.white);				
				g.drawRoundRect(activity.getX()-x+5, activity.getY()-y+5, activity.getWidth(), activity.getHeight(),20, 20);
				
				g.setStroke(new BasicStroke(1));
				g.setColor(Color.GREEN);				
				g.drawRoundRect(activity.getX()-x+5, activity.getY()-y+5, activity.getWidth(), activity.getHeight(),20, 20);
			}
			
			//输出图像
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			ImageIO.write(image, "JPEG", bos);
			byte[] buf = bos.toByteArray();
			response.setContentLength(buf.length);
			sos.write(buf);
			bos.close();
			sos.close();
		} catch (IOException e) {
			e.printStackTrace();
		} 
        return SUCCESS;
    }
}
最近下载更多
tiansitong  LV14 2023年6月30日
pojo1010  LV1 2022年3月24日
wsk588  LV26 2021年3月16日
zhangbotao  LV5 2020年12月16日
yxx_yxx  LV11 2020年9月29日
双面伊人  LV1 2020年8月14日
wananall  LV13 2020年7月24日
gan857569302  LV9 2020年6月8日
最代码安逸  LV15 2020年4月19日
liuxinglong  LV10 2019年11月5日
最近浏览更多
云破月  LV8 4月12日
1049066887  LV13 3月3日
小新Coding  LV9 1月9日
dmy2008  LV6 1月2日
444105047  LV6 2023年11月30日
lcqlcl  LV11 2023年8月29日
qq970040477  LV24 2023年8月28日
949760438 2023年8月6日
暂无贡献等级
llb0420  LV10 2023年7月11日
dzlwindy  LV8 2023年7月3日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友