jbpm4.4项目测试源码下载,效果图

关于如何配置请到网上找相关资料,

jbpm4.4项目测试源码下载, 注释都在代码里!

下载地址:http://download.csdn.net/detail/liangrui1988/6303585

里面只加了struts2,没有用到spring,用的太多反而不好理解!本来也不想用strtus2的,但那样做起来太麻烦........


效果图:jbpm4.4项目测试源码下载,效果图_第1张图片jbpm4.4项目测试源码下载,效果图_第2张图片jbpm4.4项目测试源码下载,效果图_第3张图片jbpm4.4项目测试源码下载,效果图_第4张图片jbpm4.4项目测试源码下载,效果图_第5张图片jbpm4.4项目测试源码下载,效果图_第6张图片jbpm4.4项目测试源码下载,效果图_第7张图片

junit测试代码:

package com.accp.test2;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.task.Task;
import org.junit.Test;

public class Qingjia {

	//创建表
	@Test
	public void createTable(){
		new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml");
	}
		
	//加载文件
	ProcessEngine pe=new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
	//ProcessEngine pe=Configuration.getProcessEngine();
	//部署资源流程
	@Test
	public void deploye(){
		pe.getRepositoryService().createDeployment().addResourceFromClasspath("leave.jpdl.xml").deploy();
	
	}
	
	//启动流程
	@Test
	public void startProcess(){
		//参数
		Map map=new HashMap();
		map.put("owner","张三");
		map.put("day", 1);
		
		ExecutionService executionService=pe.getExecutionService();
		executionService.startProcessInstanceByKey("leave",map);
		
	}
	
	//查询任务
	@Test
	public void findTask(){
		String userID="张三"; //要查询任务的用户名字
		System.out.println(userID);
		List<Task> listTask=pe.getTaskService().findPersonalTasks(userID);
		for(Task t:listTask){
			System.out.println("TaskID: "+t.getId());
			//int day=(Integer) pe.getTaskService().getVariable(taskID,"day");
		   
		}
	}
	
	//完成任务
	@Test
	public void completeTask(){
		//String  taskID="10004";//任务id
		String  taskID="70004";//任务id
		Map map=new HashMap();
		map.put("owner","张三");
		map.put("manager","李经理");
		map.put("boss", "王老板");
		
		//pe.getTaskService().completeTask(taskID,map);
		//得到上一步传过来的值
		int day=(Integer) pe.getTaskService().getVariable(taskID,"day");
		map.put("day", day);
		//map.put("day", -1);
		//传入值
		pe.getTaskService().setVariables(taskID, map);
		pe.getTaskService().completeTask(taskID);//完成任务
		
	}
}


主要action代码:

package com.accp.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.TaskService;
import org.jbpm.api.history.HistoryProcessInstance;
import org.jbpm.api.task.Task;

import com.accp.bean.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

public class JbpmManger extends ActionSupport implements Preparable{
	// 流程定义集合
	private List<ProcessDefinition> processDefinitionList;
	// 流程实例集合
	private List<ProcessInstance> procesInstanceList;
	// 流程参数集合
	private Map<String, Object> map;
	// 历史流程
	private List<HistoryProcessInstance> historyProcessInstanceList;
	// 当前用户任务集合
	private List<Task> tasks;
	//加载jbpm.xml文件  得到工作流引擎
	private ProcessEngine processEngine;//
	//private User user;
	
	public ProcessEngine getProcessEngine() {
		//processEngine=new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
		processEngine=Configuration.getProcessEngine();
		return processEngine;
	}


	public void setProcessEngine(ProcessEngine processEngine) {
		this.processEngine = processEngine;
	}


	public List<ProcessDefinition> getProcessDefinitionList() {
		//流程定义集合
		processDefinitionList=processEngine.getRepositoryService().createProcessDefinitionQuery().list();
		return processDefinitionList;
	}


	public void setProcessDefinitionList(
			List<ProcessDefinition> processDefinitionList) {
		this.processDefinitionList = processDefinitionList;
	}


	public List<ProcessInstance> getProcesInstanceList() {
		//流程实列集合
		procesInstanceList=processEngine.getExecutionService().createProcessInstanceQuery().list();
		return procesInstanceList;
	}


	public void setProcesInstanceList(List<ProcessInstance> procesInstanceList) {
		this.procesInstanceList = procesInstanceList;
	}


	public List<HistoryProcessInstance> getHistoryProcessInstanceList() {		
	    //历史记录
		historyProcessInstanceList=processEngine.getHistoryService().createHistoryProcessInstanceQuery().list();
			
		return historyProcessInstanceList;
	}


	public void setHistoryProcessInstanceList(
			List<HistoryProcessInstance> historyProcessInstanceList) {
		this.historyProcessInstanceList = historyProcessInstanceList;
	}


	public List<Task> getTasks() {
		//通过用户 获取工作列表
		System.out.println("actionUserName"+actionUserName);
		List<Task> listTask=processEngine.getTaskService().findPersonalTasks(actionUserName);

		for(Task t:listTask){
			System.out.println("TaskID: "+t.getId()  +"  "+t.getActivityName()+"t "+t.getAssignee());
		}
		
		return listTask;
	}


	public void setTasks(List<Task> tasks) {
		this.tasks = tasks;
	}


	

//初如化action  这里暂不用spring 本来连struts也不想用的,但写在servlet实在太烦锁了    为了更好理解jbpm的动行原理========================================================	================
	private String actionUserName;
	private String actionRole;
	public void prepare() throws Exception {
			getProcessEngine();
			 actionUserName=(String) ServletActionContext.getRequest().getSession().getAttribute("username");
			if("".equals(actionUserName)||null==actionUserName){
				returnIndex();//如果没有用户则返回
			}
			 actionRole=(String) ServletActionContext.getRequest().getSession().getAttribute("role");
			
			
		}	
		//如果没有登陆则返回
		public String returnIndex(){
			return "showIndex";
		}
//初如化数据库表========================================================================	================
		public String initDB() throws Exception {
		new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml");
		return "showIndex";
		}
//直接 部署流程========================================================================	================	
		public String deployeJbpm() throws Exception {
		processEngine.getRepositoryService().createDeployment().addResourceFromClasspath("leave.jpdl.xml").deploy();
		return "showIndex";
		}
		
//ZIP方式 部署流程========================================================================	================	
		private File fileJbpmZip;//接收上传的文件
		private String fileJbpmZipFileName;//自动获取文件名称
		private String fileJbpmZipContentType;//文件内型
		private String saveDir;//需要保存的文件目录文件夹
		
		public void setSaveDir(String saveDir) {
			this.saveDir = saveDir;
		}
		public void setFileJbpmZipFileName(String fileJbpmZipFileName) {
			this.fileJbpmZipFileName = fileJbpmZipFileName;
		}
		public void setFileJbpmZipContentType(String fileJbpmZipContentType) {
			this.fileJbpmZipContentType = fileJbpmZipContentType;
		}
		public void setFileJbpmZip(File fileJbpmZip) {
			this.fileJbpmZip = fileJbpmZip;
		}
		
//ZIP方式 部署流程========================================================================	================			public String deployeJbpmZIP() /*throws Exception*/ {

		public String deployeJbpmZIP() /*throws Exception*/ {
		 String filePath="";
		 
		//服务器目录+文件夹的目录+/+文件名
		 filePath=ServletActionContext.getServletContext().getRealPath(saveDir)+File.separator+fileJbpmZipFileName;
	    //通过文件路径创建File对象
		 System.out.println("filePath:  "+filePath);
		File fileUpload=new File(filePath);
		
		//拷贝文件 上传的File拷贝到新创建的File
		try {
			FileUtils.copyFile(fileJbpmZip, fileUpload);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//创建zipInputStream文件  通过fileInputStream文件输出流
		ZipInputStream zis=null;
		try {
			zis=new ZipInputStream(new FileInputStream(filePath));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//部署文件	Zip	
		processEngine=Configuration.getProcessEngine();
		processEngine.getRepositoryService().createDeployment().
		addResourcesFromZipInputStream(zis).deploy();
		return "showIndex";
		}
	
//ZIP方式 部署固定文件 流程=======================================================================	================			public String deployeJbpmZIP() /*throws Exception*/ {

		public String deployeJbpmZIPs() throws Exception {
			
		 //String filePath=ServletActionContext.getServletContext().getRealPath(saveDir)+File.separator+"leave.jpdl.zip";
			//创建zipInputStream文件  通过fileInputStream文件输出流 new FileInputStream(filePath)
		   
			ZipInputStream 	zis=new ZipInputStream(
					this.getClass().getResourceAsStream("/leave.zip"));
		
			//部署文件	Zip	
			processEngine=Configuration.getProcessEngine();
			processEngine.getRepositoryService().createDeployment().
			addResourcesFromZipInputStream(zis).deploy();
			return "showIndex";
			
		}	
//remove流程定义=========================================================================		
		private String definitionID;//流程实列id
		public void setDefinitionID(String definitionID) {
			this.definitionID = definitionID;
		}

		public String removeDeployeJbpm()throws Exception {
		processEngine.getRepositoryService().deleteDeploymentCascade(definitionID);
		return "showIndex";
		}

//用户登陆==========================================================================	
	  /*  public String userLogin(){
		String manager="manager,admin,zhang";
		String boss="boss,song";
	    if("".equals(user.getUsername())||user.getUsername()==null){
	     return "plassLogin";
	    }else if(manager.contains(user.getUsername())){
        //经理登陆
	    user.setRole("manager");
		}else if(boss.contains(user.getUsername())){
		user.setRole("boss");
		}else{
		user.setRole("user");
		}
	    
	    return "showIndex";
	    
	}*/

 //填写申请单==========================================================================
	private int day;
	private String message;
	public String getMessage() {
		return message;
	}
	public int getDay() {
		return day;
	}
	public void setDay(int day) {
		this.day = day;
	}
	public String  empAddLeave() throws Exception {
		//角色员工的参数操作
		
		String role=(String) ServletActionContext.getRequest().getSession().getAttribute("role");
		String username=(String) ServletActionContext.getRequest().getSession().getAttribute("username");
		
		Map map=new HashMap();
		if(0>=day){
			message="请正确填写天数!";
			//System.out.println("请填写天数!");
			return "showIndex";
		}
		map.put("owner",username);
		//获取经理,老板 需要用到sql 这里省略
		map.put("manager","李经理");//部门经理
		map.put("boss","王老板");//老板
		map.put("day",day);
		processEngine.getExecutionService().startProcessInstanceByKey("leave",map);
	return "showIndex";
	}

//提交请假单complete==========================================================================	
	private String taskId;
	private String flog;//用于判断是审批还是驳回
	
	public void setFlog(String flog) {
		this.flog = flog;
	}
	public void setTaskId(String taskId) {
		this.taskId = taskId;
	}
	public String getTaskId() {
		return taskId;
	}

//经理操作
	public String  empCompleteLeave() throws Exception {
		
		TaskService taskService	=processEngine.getTaskService();
		Map map=new HashMap();
		map.put(actionRole,actionUserName);//传入参数
		taskService.setVariables(taskId, map);
		
		flog=new String(flog.getBytes("ISO-8859-1"),"utf-8");
		
		if("to 填写申请单".equals(flog)){
		//提交请假任务
		taskService.completeTask(taskId,"to 经理审批");
		}else if("驳回".equals(flog)){
		//经理驳回
		taskService.completeTask(taskId,"驳回");
		}else if("to exclusive1".equals(flog)){
		//经理批准
		taskService.completeTask(taskId,"to exclusive1");
		}if("to end1".equals(flog)){
		//老板批准
		taskService.completeTask(taskId,"to end1");
		}
		
		
		return "showIndex";
	}
	
//显示修改请假单==========================================================================	
	public String empUpdateLeave() throws Exception {
	//根据任务id和变量名获取值
    Object getDay= processEngine.getTaskService().getVariable(taskId,"day");
	day=Integer.parseInt(getDay.toString());
	return "updateJsp";
	}
	
//修改请假单提交==========================================================================	
		public String updateLeaveOk() throws Exception {
			//角色员工的参数操作
			String role=(String) ServletActionContext.getRequest().getSession().getAttribute("role");
			String username=(String) ServletActionContext.getRequest().getSession().getAttribute("username");
			
			Map map=new HashMap();
			if(0>=day){
				message="请正确填写天数!";
				//System.out.println("请填写天数!");
				return "updateJsp";
			}
			map.put("owner",username);
			//获取经理,老板 需要用到sql 这里省略
			map.put("manager","李经理");//部门经理
			map.put("boss","王老板");//老板
			map.put("day",day);
			//processEngine.getExecutionService().startProcessInstanceByKey("leave",map);
			
			processEngine.getTaskService().setVariables(taskId, map);
		return "showIndex";
		}	
	

	
	
}


你可能感兴趣的:(JBPM4.4)