jbpm4.4 hibernate spring extjs3

登陆
jbpm4.4 hibernate spring extjs3

主页


jbpm4.4 hibernate spring extjs3

部署流程
 
jbpm4.4 hibernate spring extjs3

流程管理
 

添加申请
 
jbpm4.4 hibernate spring extjs3


 流程定义文件

<?xml version="1.0" encoding="UTF-8"?>

<process name="loan" xmlns="http://jbpm.org/4.0/jpdl">
   <start g="376,61,65,48" name="start">
      <transition g="-52,-15" name="to fill in applycation" to="fill in application">
      </transition>
   </start>
   
   <task g="335,204,132,60" assignee="anyone" name="fill in application">
      <transition name="submit applicaton" to="副总经理审核" g="-55,-14"/>
   </task>
   
   <task candidate-groups="副总经理" g="279,361,244,81" name="副总经理审核">
      <transition g="-29,-25" name="accept" to="exclusive amount"/>
      <transition g="-20,-25" name="reject" to="end"/>
   </task>
   
   <decision expr="#{content}" g="80,377,60,48" name="exclusive amount">
      <transition g="-50,-23" name="amount larger than 5000" to="总经理审核">   
      </transition>
      <transition g="-94,-22" name="amount less than 5000" to="give money">     
      </transition> 
   </decision>
   
   <task assignee="#{manager.incumbent}" g="4,645,199,65" name="总经理审核">
      <transition g="-79,-30" name="accept" to="give money"/>
      <transition g="415,712:-45,-22" name="reject" to="end"/>
   </task>
   
   <task candidate-groups="服务员" g="327,601,144,66" name="give money">
      <transition g="-45,-22" name="send Email" to="end">
         <mail>
            <to addresses="#{appEmail}"/>
            <subject>success to load money!</subject>
            <text>dear ${appName},you have pass through examine!please goto the bank before ${deadline}</text>
         </mail>
      </transition>
   </task>
   <end g="649,647,48,48" name="end"/>
</process>

 spring 与jbpm4.4结合的配置文件

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation" value="classpath:jbpm.hibernate.cfg.xml" />
		<property name="dataSource" ref="dataSource" />
	</bean>


	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- 定义事务拦截器 -->
	<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<!-- 注入事务管理 -->
		<property name="transactionManager" ref="transactionManager" />
		<property name="transactionAttributes">
			<!-- 定义事务传播属性 -->
			<props><!-- <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> 
					<prop key="del*">PROPAGATION_REQUIRED</prop> -->
				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>

				<prop key="*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>


	<!-- 定义BeanNameAutoProxyCreator -->
	<bean
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
		<property name="beanNames">
			<!-- 下面是所有需要自动创建事务代理的bean -->
			<list>
				<value>roleService</value>
				<value>staffService</value>
				<value>applicationService</value>
				<value>leaveServlet</value>
			</list>
			<!-- 此处可增加其他需要自动创建事务代理的bean -->
		</property>
		<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器 -->
		<property name="interceptorNames">
			<list>
				<!-- 此处可增加其他新的Interceptor -->
				<value>transactionInterceptor</value>
			</list>
		</property>
	</bean>

	<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">
		<property name="jbpmCfg" value="jbpm.cfg.xml" />
	</bean>
	<bean id="processEngine" factory-bean="springHelper"
		factory-method="createProcessEngine" />
	<bean id="jBPMUtil" class="hust.loan.dao.util.JBPMUtil">
		<property name="processEngine" ref="processEngine"></property>
	</bean>

	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/loandb" />
		<property name="username" value="root" />
		<property name="password" value="root" />
	</bean>
</beans>

 jbpm配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<jbpm-configuration>

	<import resource="jbpm.default.cfg.xml" />
	<import resource="jbpm.tx.hibernate.cfg.xml" />
	<import resource="jbpm.tx.spring.cfg.xml" />
	<import resource="jbpm.jpdl.cfg.xml" />
	<import resource="jbpm.bpmn.cfg.xml" />
	<import resource="jbpm.identity.cfg.xml" />
	<import resource="jbpm.businesscalendar.cfg.xml" />
	<import resource="jbpm.console.cfg.xml" />
	<!-- <import resource="jbpm.jobexecutor.cfg.xml" /> -->

	<hibernate-session-factory />

</jbpm-configuration>

 
 hibernate 配置文件:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<!-- mysql database -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/loandb</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		<property name="hibernate.format_sql">true</property>
		<property name="show_sql">true</property>
		<property name="hibernate.current_session_context_class">
			thread
	</property>


		<mapping resource="jbpm.repository.hbm.xml" />
		<mapping resource="jbpm.execution.hbm.xml" />
		<mapping resource="jbpm.history.hbm.xml" />
		<mapping resource="jbpm.task.hbm.xml" />
		<mapping resource="jbpm.identity.hbm.xml" />

		<mapping resource="hust/loan/po/xml/Role.hbm.xml" />
		<mapping resource="hust/loan/po/xml/Staff.hbm.xml" />
		<mapping resource="hust/loan/po/xml/ApplicationForm.hbm.xml" />

	</session-factory>
</hibernate-configuration>

处理贷款的类:

package hust.loan.servlet;

import hust.loan.dao.util.JBPMUtil;
import hust.loan.dao.util.Page;
import hust.loan.po.ApplicationForm;
import hust.loan.po.Role;
import hust.loan.po.Staff;
import hust.loan.service.ApplicationService;
import hust.loan.service.RoleService;
import hust.loan.service.StaffService;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;

/**
 * 贷款例子处理servlet的
 * 
 * @author seven
 */
public class LoanServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private JBPMUtil jBPMUtil;

	public JBPMUtil getjBPMUtil() {
		return jBPMUtil;
	}

	public void setjBPMUtil(JBPMUtil jBPMUtil) {
		this.jBPMUtil = jBPMUtil;
		processEngine=jBPMUtil.getProcessEngine();
		repositoryService=jBPMUtil.getRepositoryService();
		executionService = jBPMUtil.getExecutionService();
		taskService= jBPMUtil.getTaskService();
		
		
	}

	private ProcessEngine processEngine;
	private RepositoryService repositoryService;
	private ExecutionService executionService;
	private TaskService taskService;
	private RoleService roleService;
	private StaffService staffService;
	private ApplicationService applicationService;

	private ProcessInstance processInstance;// 流程实例

	// get/set方法
	public StaffService getStaffService() {
		return staffService;
	}

	public void setStaffService(StaffService staffService) {
		this.staffService = staffService;
	}

	public ApplicationService getApplicationService() {
		return applicationService;
	}

	public void setApplicationService(ApplicationService applicationService) {
		this.applicationService = applicationService;
	}

	public RoleService getRoleService() {
		return roleService;
	}

	public void setRoleService(RoleService roleService) {
		this.roleService = roleService;
	}

	public ProcessEngine getProcessEngine() {
		return processEngine;
	}

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

	public RepositoryService getRepositoryService() {
		return repositoryService;
	}

	public void setRepositoryService(RepositoryService repositoryService) {
		this.repositoryService = repositoryService;
	}

	public ExecutionService getExecutionService() {
		return executionService;
	}

	public void setExecutionService(ExecutionService executionService) {
		this.executionService = executionService;
	}

	public TaskService getTaskService() {
		return taskService;
	}

	public void setTaskService(TaskService taskService) {
		this.taskService = taskService;
	}

	// end-get/set

	public void init(ServletConfig config) throws ServletException {
		super.init(config);
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		process(request, response);
		// TODO Auto-generated method stub
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		process(request, response);
	}

	/**
	 * 处理分发类
	 * 
	 * @throws IOException
	 * @throws ServletException
	 * */
	private void process(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 设置字符请求编码
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("utf-8");
		String action = request.getParameter("action");
		if (action.equals("addRole")) {
			if (addRole(request, response)) {
				response.getWriter().write("{success:true}");
			} else {
				response.getWriter().write("{failure:true}");
			}
		} else if (action.equals("toAddRole")) {
			// 转移到添加角色页面

			request.getRequestDispatcher("/loan/loan_addRole.jsp").forward(
					request, response);

		} else if (action.equals("toAddStaff")) {
			// 转移到添加员工页面
			request.getRequestDispatcher("/loan/loan_addStaff.jsp").forward(
					request, response);

		} else if (action.equals("getAllRole")) {
			// 查找所有角色
			List<Role> roles = roleService.getRoles();
			// 转换为json格式数据
			response.getWriter().write(beanToJsonString(roles, false));
		} else if (action.equals("addStaff")) {
			// 添加员工
			if (addStaff(request, response)) {
				response.getWriter().write("{success:true}");
			} else {
				response.getWriter().write("{failure:true}");
			}
		} else if (action.equals("addApply")) {
			String validateCode = request.getSession().getAttribute("rand")
					.toString();
			System.out.println("validate:"
					+ request.getParameter("validateCode"));
			System.out.println("randCode:" + validateCode);
			if (validateCode.equals(request.getParameter("validateCode"))) {
				int applyId = addApply(request, response);
				if (applyId > 0) {

					response.getWriter().write(
							"{success:true,applyId:" + applyId + "}");
				} else {
					response.getWriter().write("{failure:true,mes:'申请失败'}");
				}
			} else {
				response.getWriter().write("{failure:true,mes:'验证码错误'}");
			}

		} else if (action.equals("toAddApply")) {
			// 转移到填写申请单页面
			request.getRequestDispatcher("/loan/loan_addApply.jsp").forward(
					request, response);
		} else if (action.equals("getAllStaff")) {
			String start = request.getParameter("start");
			String limit = request.getParameter("limit");
			Page page = new Page();
			page.setStartIndex(Integer.valueOf(start));
			page.setLastIndex(Integer.valueOf(limit));
			String json = this.getStaffs(page);
			response.getWriter().write(json);
		} else if (action.equals("toStaffGrid")) {

			request.getRequestDispatcher("/loan/loan_staffgrid.jsp").forward(
					request, response);
		} else if (action.equals("saveStaff")) {
			// 保存职员
			String data = request.getParameter("data");
			List<Staff> staffs = this.getStaffFromJson(data);
			if (!staffs.isEmpty()) {
				for (Staff staff : staffs) {
					staffService.updateStaff(staff);
				}
				response.getWriter().write("保存成功!");
			}
			// response.getWriter().write("保存成功!");
		} else if (action.equals("delStaff")) {
			// 删除员工
			String data = request.getParameter("data");
			List<Staff> staffs = this.getStaffFromJson(data);
			if (!staffs.isEmpty()) {
				for (Staff staff : staffs) {
					staffService.delStaff(staff);
				}
				response.getWriter().write("删除成功!");
			}
		} else if (action.equals("toManagerTree")) {
			// 跳转到树形页面
			request.getRequestDispatcher("/loan/loan_managerTree.jsp").forward(
					request, response);

		} else if (action.equals("toLogin")) {
			// 登入首页
			request.getRequestDispatcher("/loan/loan_index.jsp").forward(
					request, response);
		} else if (action.equals("logout")) {
			// 退出系统
			request.getSession().removeAttribute("name");
			request.getSession().removeAttribute("roleType");
			request.getSession().invalidate();
			response.getWriter().write("{success:true}");
		} else if (action.equals("login")) {
			// 登入
			String name = (String) request.getParameter("name");
			String password = (String) request.getParameter("password");
			Staff staff = staffService
					.getStaffByNameAndPassword(name, password);
			if (staff != null) {
				request.getSession().setAttribute("user", staff.getName());
				request.getSession().setAttribute("userType",
						staff.getRole().getRoleType());
				request.getSession().setAttribute("userId", staff.getStaffId());
				response.getWriter().write("{success:true}");

			} else {
				response.getWriter().write("{failure:true}");
			}

		} else if (action.equals("ds_getAllRole")) {
			// 获取所有角色详细信息
			List<Role> roles = roleService.getRoles();
			// 装换成json格式数据
			String jsonString = this.beanToJsonString(roles, true);
			response.getWriter().write(jsonString);
		} else if (action.equals("delRole")) {
			// 删除角色
			String roleId = request.getParameter("roleId");
			if (roleService.delRole(roleService.getRoleById(Integer
					.valueOf(roleId)))) {
				response.getWriter().flush();
				response.getWriter().write("{success:true}");
			} else {
				response.getWriter().write("{failure:true}");
			}

		} else if (action.equals("updateRole")) {
			// 更新角色
			Role role = new Role();
			role.setRoleId(Integer.valueOf(request.getParameter("roleId")));
			role.setRoleName(request.getParameter("roleName"));
			role.setRoleType(request.getParameter("roleType"));
			role.setDescription(request.getParameter("description"));

			try {
				roleService.updateRole(role);
				response.getWriter().write("{success:true}");
			} catch (Exception e) {
				response.getWriter().write("{failure:true}");
			}

		} else {
			request.getRequestDispatcher("/loan/index.jsp").forward(request,
					response);
		}

	}

	/**
	 * 添加申请单
	 * */
	private int addApply(HttpServletRequest request,
			HttpServletResponse response) {
		// 根据流程定义的KEY值启动一个新的流程实例
		processInstance = executionService.startProcessInstanceByKey("loan");

		// 判断流程定义的活动是否是“填写表单”的活动
		if (processInstance.isActive("fill in application")) {

			ApplicationForm applyform = new ApplicationForm();
			applyform.setAppUserId(request.getParameter("appUserId"));
			applyform.setAppName(request.getParameter("appName"));
			applyform.setAppDate(new Date());
			applyform.setAddress(request.getParameter("address"));
			applyform
					.setAmount(Integer.valueOf(request.getParameter("amount")));
			applyform.setReason(request.getParameter("reason"));
			applyform.setEmail(request.getParameter("email"));
			int appid = applicationService.addApplicationForm(applyform);
			// 流程变量
			Map<String, Object> variables = new HashMap<String, Object>();
			variables.put("applyId", appid);
			List<Task> tasks = taskService.findPersonalTasks("anyone");
			// 根据任务列表获取任务
			Task task = tasks.get(0);
			// 把设置好的变量放到任务服务里面并根据任务ID结束任务
			taskService.setVariables(task.getId(), variables);
			taskService.completeTask(task.getId()); // 进入到副总经理审核阶段
			// List<Task> list=taskService.findGroupTasks("man");
			return appid;
		} else {
			return 0;
		}
	}

	/**
	 * 添加角色
	 * */
	private boolean addRole(HttpServletRequest request,
			HttpServletResponse response) {
		// 添加角色
		String roleName = (String) request.getParameter("roleName");
		String roleType = (String) request.getParameter("roleType");
		String description = (String) request.getParameter("description");

		Role role = new Role();
		role.setRoleName(roleName);
		role.setRoleType(roleType);
		role.setDescription(description);
		// 添加角色到数据库中
		return roleService.addRole(role);
	}

	/**
	 * 添加员工
	 * @throws IOException 
	 * */
	public boolean addStaff(HttpServletRequest request,
			HttpServletResponse response) throws IOException {

		Staff staff = new Staff();
		staff.setName(request.getParameter("name"));
		staff.setEmail(request.getParameter("email"));
		staff.setPassword(request.getParameter("password"));
		staff.setAddress(request.getParameter("address"));
		System.out.println("roleid" + request.getParameter("roleId"));
		Role role = roleService.getRoleById(Integer.valueOf(request
				.getParameter("roleId")));
		staff.setRole(role);
		try {
			staffService.addStaff(staff);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * 将角色类型数据返回json数据格式
	 * */
	private String beanToJsonString(List<Role> roles, boolean all) {
		StringBuffer jsonString = new StringBuffer();

		jsonString.append("{root:[");
		// 返回全部
		if (all) {
			for (Role role : roles) {
				jsonString.append("{roleId:" + role.getRoleId() + ",roleName:'"
						+ role.getRoleName() + "'," + "roleType:'"
						+ role.getRoleType() + "',description:'"
						+ role.getDescription() + "'},");
			}
		} else {
			for (Role role : roles) {
				jsonString.append("{roleName:'" + role.getRoleName()
						+ "',roleId:'" + role.getRoleId() + "'},");
			}
		}

		jsonString.append("]}");
		return jsonString.substring(0, jsonString.lastIndexOf(","))
				+ jsonString.substring(jsonString.lastIndexOf(",") + 1);

	}

	/**
	 * 分页返回员工信息列表
	 * */
	@SuppressWarnings("unchecked")
	private String getStaffs(Page page) {
		StringBuffer jsonString = new StringBuffer();
		page = staffService.getStaffs(page);
		List<Staff> staffs = page.getList();
		jsonString.append("{totalProperty:");
		jsonString.append(page.getTotalCount());
		jsonString.append(",root:[");
		for (Staff staff : staffs) {
			jsonString.append("{staffId:" + staff.getStaffId());
			jsonString.append(",name:'" + staff.getName());
			jsonString.append("',address:'" + staff.getAddress());
			jsonString.append("',email:'" + staff.getEmail());
			jsonString.append("',roleId:'" + staff.getRole().getRoleId());
			jsonString.append("',roleName:'" + staff.getRole().getRoleName()
					+ "'},");
		}
		jsonString.append("]}");
		return jsonString.substring(0, jsonString.lastIndexOf(","))
				+ jsonString.substring(jsonString.lastIndexOf(",") + 1);

	}

	/**
	 * 把json转换成bean
	 * */
	private List<Staff> getStaffFromJson(String jsonData) {

		List<Staff> list = new ArrayList<Staff>();

		try {

			JSONArray array = JSONArray.fromObject(jsonData);
			Staff staff = new Staff();
			Role role = new Role();
			for (int i = 0; i < array.size(); i++) {
				JSONObject jo = array.getJSONObject(i);
				staff.setStaffId(jo.getInt("staffId"));
				staff = staffService.getStaffById(jo.getInt("staffId"));
				/*
				 * staff.setAddress(jo.getString("address"));
				 * staff.setEmail(jo.getString("email"));
				 * staff.setName(jo.getString("name")); role =
				 * roleService.getRoleById(Integer.parseInt(jo
				 * .getString("roleId"))); staff.setRole(role);
				 */
				list.add(staff);
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return list;
	}
}

 流程处理工具类:

package hust.loan.dao.util;

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

import javax.servlet.http.HttpSession;

import org.jbpm.api.Execution;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.IdentityService;
import org.jbpm.api.ManagementService;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;

/**
 * jbpm工具类
 * 
 * @author ht
 * 
 */
public class JBPMUtil {

	private ProcessEngine processEngine;
	private RepositoryService repositoryService = null;
	private ExecutionService executionService = null;
	private TaskService taskService = null;
	private HistoryService historyService = null;
	private ManagementService managementService = null;
	private IdentityService identityService = null;

	public JBPMUtil() {

	}

	public JBPMUtil(ProcessEngine processEngine) {
		this.processEngine = processEngine;
		repositoryService = processEngine.getRepositoryService();
		executionService = processEngine.getExecutionService();
		taskService = processEngine.getTaskService();
		historyService = processEngine.getHistoryService();
		managementService = processEngine.getManagementService();
		identityService = processEngine.getIdentityService();

	}

	public ProcessEngine getProcessEngine() {
		return processEngine;
	}

	public void setProcessEngine(ProcessEngine processEngine) {
		this.processEngine = processEngine;
		System.out.println("processEngine=" + processEngine);
		repositoryService = processEngine.getRepositoryService();
		executionService = processEngine.getExecutionService();
		taskService = processEngine.getTaskService();
		historyService = processEngine.getHistoryService();
		managementService = processEngine.getManagementService();
		identityService = processEngine.getIdentityService();
	}

	public IdentityService getIdentityService() {
		return identityService;
	}

	public void setIdentityService(IdentityService identityService) {
		this.identityService = identityService;
	}

	public RepositoryService getRepositoryService() {
		return repositoryService;
	}

	public void setRepositoryService(RepositoryService repositoryService) {
		this.repositoryService = repositoryService;
	}

	public ExecutionService getExecutionService() {
		return executionService;
	}

	public void setExecutionService(ExecutionService executionService) {
		this.executionService = executionService;
	}

	public TaskService getTaskService() {
		return taskService;
	}

	public void setTaskService(TaskService taskService) {
		this.taskService = taskService;
	}

	public HistoryService getHistoryService() {
		return historyService;
	}

	public void setHistoryService(HistoryService historyService) {
		this.historyService = historyService;
	}

	public ManagementService getManagementService() {
		return managementService;
	}

	public void setManagementService(ManagementService managementService) {
		this.managementService = managementService;
	}

	/**
	 * 部署新流程定义
	 * 
	 * @param resourceName
	 * @return 返回流程定义id
	 */
	public String deployNew(String resourceName) {
		return repositoryService.createDeployment()
				.addResourceFromClasspath(resourceName).deploy();
	}

	/**
	 * 部署新流程定义(zip)
	 * 
	 * @param resourceName
	 * @return 返回流程定义id
	 */
	public String deployZipNew(String resourceZipName) {
		ZipInputStream zis = new ZipInputStream(this.getClass()
				.getResourceAsStream(resourceZipName));

		return repositoryService.createDeployment()
				.addResourcesFromZipInputStream(zis).deploy();

	}

	/**
	 * 开始一个流程实例
	 * 
	 * @param id
	 * @param map
	 * @return
	 */

	public ProcessInstance startPIById(String id, Map<String, ?> map) {

		return executionService.startProcessInstanceById(id, map);

	}

	/**
	 * 完成任务
	 * 
	 * @param taskId
	 * @param map
	 */

	public void completeTask(String taskId, Map map) {

		taskService.completeTask(taskId, map);
	}

	/**
	 * 完成任务
	 * 
	 * @param taskId
	 */
	public void completeTask(String taskId) {
		taskService.completeTask(taskId);
	}

	/**
	 * 将任务流转到指定名字的流程outcome中去
	 * 
	 * @param taskId
	 * @param outcome
	 */
	public void completeTask(String taskId, String outcome) {
		taskService.completeTask(taskId, outcome);
	}

	public void completeTask(String taskId, String outcome, Map variables) {
		taskService.completeTask(taskId, outcome, variables);
	}

	/**
	 * 获得所有发布了的流程
	 * 
	 * @return
	 */
	public List<ProcessDefinition> getAllPdList() {
		return repositoryService.createProcessDefinitionQuery().list();
	}

	/**
	 * 获得所有流程实例
	 * 
	 * @return
	 */
	public List<ProcessInstance> getAllPiList() {
		return executionService.createProcessInstanceQuery().list();
	}

	/**
	 * 根据流程实例Id,即executionId获取指定的变量值
	 * 
	 * @param executionId
	 * @param variableName
	 * @return
	 */
	public Object getVariableByexecutionId(String executionId,
			String variableName) {
		return executionService.getVariable(executionId, variableName);
	}

	/**
	 * 根据任务id,即taskId获取指定变量值
	 * 
	 * @param taskId
	 * @param variableName
	 * @return
	 */
	public Object getVariableByTaskId(String taskId, String variableName) {
		return taskService.getVariable(taskId, variableName);
	}

	/**
	 * 获取指定用户名字的任务
	 * 
	 * @param userName
	 * @return
	 */
	public List<Task> findPersonalTasks(String userName) {
		return taskService.findPersonalTasks(userName);
	}

	/**
	 * 根据任务id获取任务
	 * 
	 * @param taskId
	 * @return
	 */
	public Task getTask(String taskId) {
		return taskService.getTask(taskId);

	}

	/**
	 * 级联删除流程定义,直接删除该流程定义下的所有实例
	 * 
	 * @param deploymentId流程定义id
	 */
	public void deleteDeploymentCascade(String deploymentId) {
		repositoryService.deleteDeploymentCascade(deploymentId);
	}

}

 流程管理类

package hust.loan.servlet;

import hust.loan.dao.StaffDao;
import hust.loan.dao.util.JBPMUtil;
import hust.loan.po.ApplicationForm;
import hust.loan.po.Manager;
import hust.loan.po.Role;
import hust.loan.po.Staff;
import hust.loan.service.ApplicationService;
import hust.loan.service.RoleService;
import hust.loan.service.StaffService;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.jbpm.api.Deployment;
import org.jbpm.api.Execution;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessDefinitionQuery;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.ProcessInstanceQuery;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.history.HistoryProcessInstance;
import org.jbpm.api.history.HistoryTask;
import org.jbpm.api.task.Task;
import org.subethamail.wiser.Wiser;

/**
 * Servlet implementation class ProcessServlet
 */
public class ProcessServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private JBPMUtil jBPMUtil;


	public JBPMUtil getjBPMUtil() {
		return jBPMUtil;
	}

	public void setjBPMUtil(JBPMUtil jBPMUtil) {
		this.jBPMUtil = jBPMUtil;
		this.processEngine = jBPMUtil.getProcessEngine();
		this.repositoryService = jBPMUtil.getRepositoryService();
		this.executionService = jBPMUtil.getExecutionService();
		this.taskService = jBPMUtil.getTaskService();
		this.historyService = jBPMUtil.getHistoryService();
	}

	private ProcessEngine processEngine;
	private RepositoryService repositoryService;
	private ExecutionService executionService;
	private TaskService taskService;
	private StaffService staffService;
	private ApplicationService applicationService;
	private HistoryService historyService;

	public HistoryService getHistoryService() {
		return historyService;
	}

	public void setHistoryService(HistoryService historyService) {
		this.historyService = historyService;
	}

	// get/set
	public ProcessEngine getProcessEngine() {
		return processEngine;
	}

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

	public RepositoryService getRepositoryService() {
		return repositoryService;
	}

	public void setRepositoryService(RepositoryService repositoryService) {
		this.repositoryService = repositoryService;
	}

	public ExecutionService getExecutionService() {
		return executionService;
	}

	public void setExecutionService(ExecutionService executionService) {
		this.executionService = executionService;
	}

	public TaskService getTaskService() {
		return taskService;
	}

	public void setTaskService(TaskService taskService) {
		this.taskService = taskService;
	}

	public StaffService getStaffService() {
		return staffService;
	}

	public void setStaffService(StaffService staffService) {
		this.staffService = staffService;
	}

	public ApplicationService getApplicationService() {
		return applicationService;
	}

	public void setApplicationService(ApplicationService applicationService) {
		this.applicationService = applicationService;
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		try {
			process(request, response);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			response.getWriter().write("{success:false,errors:'操作失败!'}");
		}
		// TODO Auto-generated method stub
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		try {
			process(request, response);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			response.getWriter().write("{success:false,errors:'操作失败!'}");
		}
	}

	/**
	 * @throws Exception
	 *             处理分发类
	 * @throws
	 * */
	private void process(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		// 设置字符请求编码
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("utf-8");
		String action = request.getParameter("action");
		if (action.equals("ds_getAllProcessDefinition")) {
			// 查询流程定义
			String json = findProDefintion(request, response);
			response.getWriter().write(json);
		} else if (action.equals("deploy")) {
			// 部署流程
			deploy(request, response);
		} else if (action.equals("getAllDeployment")) {
			// 查询流程部署
			String json = getDeployment(request, response);
			response.getWriter().write(json);
		} else if (action.equals("delDeployment")) {
			// 删除部署
			delDeployment(request, response);
		} else if (action.equals("suspendDeployment")) {
			// 暂停该部署
			repositoryService.suspendDeployment(request
					.getParameter("deployId"));
			response.getWriter().write("{success:true}");
		} else if (action.equals("resumeDeployment")) {
			// 重启该部署
			repositoryService
					.resumeDeployment(request.getParameter("deployId"));
			response.getWriter().write("{success:false}");
		} else if (action.equals("getProcessInstance")) {
			// 查询流程实例
			getPorcessInstances(request, response);
		} else if (action.equals("delProcessInstance")) {
			// 删除流程实例
			delProcessInstance(request, response);
		} else if (action.equals("getHistoryProcessInstance")) {
			// 查询历史流程实例
			getHistoryProcessInstance(request, response);
		} else if (action.equals("delHistoryProcessInstance")) {
			// 删除历史流程实例
			delProcessInstance(request, response);
		} else if (action.equals("getGroupTask")) {
			// 获取小组任务
			getGroupTask(request, response);
		} else if (action.equals("delTask")) {
			delTask(request, response);
			// 删除任务
		} else if (action.equals("getPersonalTask")) {
			// 获取私人任务
			getPersionalTask(request, response);

		} else if (action.equals("getHistoryTask")) {
			// 获取历史任务信息
			getHistoryTask(request, response);
		} else if (action.equals("getApplyForm")) {
			getApplyForm(request, response);
		} else if (action.equals("accept")) {
			// 同意申请
			accept(request, response);
		} else if (action.equals("reject")) {
			// 回绝申请
			reject(request, response);
		}
	}

	private void reject(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		int appId = Integer.valueOf(request.getParameter("appId"));
		String executionId = request.getParameter("executionId");
		String bmComment = request.getParameter("bmComment");
		String gmComment = request.getParameter("gmComment");
		String remark = request.getParameter("remark");
		String taskId = request.getParameter("taskId");

		ApplicationForm applyform = applicationService
				.getApplicationFormById(appId);
		int userId = (Integer) request.getSession().getAttribute("userId");// 登入用户id
		Staff staff = staffService.getStaffById(userId);// 当前登入用户

		applyform.setRemark(remark);
		Execution execution = executionService.findExecutionById(executionId);

		if (execution.getProcessInstance().isActive("副总经理审核")) {
			applyform.setBranchManager(staff);
			applyform.setBrMComment(bmComment);
			executionService.signalExecutionById(executionId, "reject");

		} else if (execution.getProcessInstance().isActive("总经理审核")) {
			// 总经理拒绝申请
			applyform.setGeMComment(gmComment);
			applyform.setGeneralManager(staff);
			executionService.signalExecutionById(executionId, "reject");

		} else if (execution.getProcessInstance().isActive("give money")) {
			// 普通员工
			applyform.setDealStaff(staff);
			applyform.setCompleteDate(new Date());
		}

		applicationService.updateApplicationForm(applyform);// 更新表单
		response.getWriter().write("{success:true}");

	}

	private void accept(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		int appId = Integer.valueOf(request.getParameter("appId"));
		String executionId = request.getParameter("executionId");
		String bmComment = request.getParameter("bmComment");
		String gmComment = request.getParameter("gmComment");
		String remark = request.getParameter("remark");
		String taskId = request.getParameter("taskId");

		ApplicationForm applyform = applicationService
				.getApplicationFormById(appId);
		int userId = (Integer) request.getSession().getAttribute("userId");// 副经理id
		Staff staff = staffService.getStaffById(userId);
		applyform.setRemark(remark);
		Execution execution = executionService.findExecutionById(executionId);
		// 流程变量
		Map<String, Object> variables = new HashMap<String, Object>();
		if (execution.getProcessInstance().isActive("副总经理审核")) {
			applyform.setBranchManager(staff);
			applyform.setBrMComment(bmComment);

			String content = "";
			if (applyform.getAmount() > 5000) {
				content = "amount larger than 5000";
				variables.put("manager", staffService.findManager());
			} else {
				content = "amount less than 5000";
				// Role role =roleService.getRoleById(1);
			}
			variables.put("content", content);
			executionService.signalExecutionById(executionId, "accept",
					variables);

		} else if (execution.getProcessInstance().isActive("总经理审核")) {
			// 总经理审核同意
			applyform.setGeMComment(gmComment);
			applyform.setGeneralManager(staff);

			executionService.signalExecutionById(executionId, "accept");
		} else if (execution.getProcessInstance().isActive("give money")) {
			// 普通员工
			applyform.setDealStaff(staff);
			applyform.setCompleteDate(new Date());
			variables.put("appEmail", applyform.getEmail());
			variables.put("appName", applyform.getAppName());
			Calendar deadline = Calendar.getInstance();
			deadline.add(Calendar.DAY_OF_MONTH, 1);// 期限为一个月
			variables.put("deadline", deadline.getTime().toString());
			taskService.setVariables(taskId, variables);

			// start mail server
			Wiser wiser = new Wiser();
			wiser.setPort(2525);
			wiser.start();
			taskService.completeTask(taskId);
		}
		// 更新表单
		applicationService.updateApplicationForm(applyform);
		
		// executionService.signalExecutionById(executionId, "accept");
		response.getWriter().write("{success:true}");

	}

	/**
	 * 获取表单
	 * 
	 * @throws Exception
	 * */
	private void getApplyForm(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String taskId = request.getParameter("taskId");
		String type = request.getParameter("etype");
		int applyId = (Integer) taskService.getVariable(taskId, "applyId");
		String userId = String.valueOf(request.getSession().getAttribute(
				"userId"));
		if (type.equals("group")) {
			taskService.takeTask(taskId, userId);
		}
		ApplicationForm apply = applicationService
				.getApplicationFormById(applyId);
		response.getWriter().write(ApplyToJson(apply));
	}

	/**
	 * 将ApplicationForm 数据转换为json格式
	 * */
	private String ApplyToJson(ApplicationForm apply) {
		StringBuffer sb = new StringBuffer();
		sb.append("{apply:[{");
		sb.append("appId:'" + apply.getAppId() + "',appDate:'"
				+ apply.getAppDate() + "',appName:'" + apply.getAppName()
				+ "',appUserId:'" + apply.getAppUserId() + "',email:'"
				+ apply.getEmail() + "',address:'" + apply.getAddress()
				+ "',reason:'" + apply.getReason() + "',amount:"
				+ apply.getAmount() + ",bmComment:'"
				+ (apply.getBrMComment() == null ? "" : apply.getBrMComment())
				+ "',gmComment:'"
				+ (apply.getGeMComment() == null ? "" : apply.getGeMComment())
				+ "'}]}");
		return sb.toString();
	}

	/**
	 * 获取历史任务信息
	 * 
	 * @throws Exception
	 * */
	private void getHistoryTask(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String condition = request.getParameter("conditions");
		int start = Integer.valueOf(request.getParameter("start"));
		int limit = Integer.valueOf(request.getParameter("limit"));
		String searchType = request.getParameter("searchType");
		List<HistoryTask> list = new ArrayList();
		int count = 0;
		if (searchType.equals("all")) {
			list = historyService.createHistoryTaskQuery().page(start, limit)
					.list();
			count = historyService.createHistoryTaskQuery().list().size();
		} else if (condition != "" && condition != null) {
			if (searchType.endsWith("taskId")) {
				list = historyService.createHistoryTaskQuery()
						.taskId(condition).page(start, limit).list();
				count = historyService.createHistoryTaskQuery()
						.taskId(condition).list().size();
			} else if (searchType.equals("executionId")) {
				list = historyService.createHistoryTaskQuery()
						.executionId(condition).page(start, limit).list();
				count = historyService.createHistoryTaskQuery()
						.executionId(condition).list().size();
			} else if (searchType.equals("startAfter")) {
				list = historyService.createHistoryTaskQuery()
						.startedAfter(stingToDate(condition))
						.page(start, limit).list();
				count = historyService.createHistoryTaskQuery()
						.startedAfter(stingToDate(condition)).list().size();
			} else if (searchType.equals("startBefore")) {
				list = historyService.createHistoryTaskQuery()
						.startedBefore(stingToDate(condition))
						.page(start, limit).list();
				count = historyService.createHistoryTaskQuery()
						.startedBefore(stingToDate(condition)).list().size();
			} else if (searchType.equals("state")) {
				list = historyService.createHistoryTaskQuery().state(condition)
						.page(start, limit).list();
				count = historyService.createHistoryTaskQuery()
						.state(condition).list().size();
			} else if (searchType.equals("lessThan")) {
				list = historyService.createHistoryTaskQuery()
						.tookLessThen(Integer.valueOf(condition))
						.page(start, limit).list();
				count = historyService.createHistoryTaskQuery()
						.tookLessThen(Integer.valueOf(condition)).list().size();
			} else if (searchType.equals("longerThan")) {
				list = historyService.createHistoryTaskQuery()
						.tookLongerThen(Integer.valueOf(condition))
						.page(start, limit).list();
				count = historyService.createHistoryTaskQuery()
						.tookLongerThen(Integer.valueOf(condition)).list()
						.size();
			} else if (searchType.equals("assignee")) {
				list = historyService.createHistoryTaskQuery()
						.assignee(condition).page(start, limit).list();
				count = historyService.createHistoryTaskQuery()
						.assignee(condition).list().size();
			} else if (searchType.equals("outcome")) {
				list = historyService.createHistoryTaskQuery()
						.outcome(condition).page(start, limit).list();
				count = historyService.createHistoryTaskQuery()
						.outcome(condition).list().size();
			}

		} else if ((condition == "" || condition == null)
				&& searchType.equals("assignee")) {
			list = historyService
					.createHistoryTaskQuery()
					.assignee(
							(String) request.getSession().getAttribute("user"))
					.page(start, limit).list();
			count = historyService
					.createHistoryTaskQuery()
					.assignee(
							(String) request.getSession().getAttribute("user"))
					.list().size();
		}
		response.getWriter().write(historyTaskToJson(list, count));
	}

	/**
	 * HistoryTask装换成json数据格式
	 * */
	private String historyTaskToJson(List<HistoryTask> list, int count) {
		StringBuffer sb = new StringBuffer();
		sb.append("{totalProperty:" + count);
		sb.append(",root:[");
		for (HistoryTask task : list) {
			sb.append("{id:'" + task.getId() + "',executionId:'"
					+ task.getExecutionId() + "',assignee:'"
					+ task.getAssignee() + "',createTime:'"
					+ task.getCreateTime() + "',endTime:'" + task.getEndTime()
					+ "',duration:" + task.getDuration() + ",state:'"
					+ task.getState() + "',outcome:'" + task.getOutcome()
					+ "'},");
		}
		sb.append("]}");
		if (count != 0) {
			return sb.substring(0, sb.lastIndexOf(","))
					+ sb.substring(sb.lastIndexOf(",") + 1);
		} else {
			return sb.toString();
		}

	}

	/**
	 * 时间类型转换
	 * 
	 * @throws Exception
	 * */
	private Date stingToDate(String str) throws Exception {
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		return df.parse(str);
	}

	/**
	 * 查询个人任务
	 * 
	 * @throws Exception
	 * */
	private void getPersionalTask(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		int start = Integer.valueOf(request.getParameter("start"));
		int limit = Integer.valueOf(request.getParameter("limit"));
		String searchType = request.getParameter("searchType");
		String searchState = request.getParameter("searchState");
		String condition = request.getParameter("conditions");

		List<Task> list = new ArrayList();
		int count = 0;
		// 当前登入用户id
		String userId = String.valueOf(request.getSession().getAttribute(
				"userId"));
		// 查询所有
		if (searchType.equals("all")) {
			if (searchState.equals("all")) {
				list = taskService.createTaskQuery().page(start, limit).list();
				count = taskService.createTaskQuery().list().size();
			} else if (searchState.equals("suspend")) {
				list = taskService.createTaskQuery().suspended()
						.page(start, limit).list();
				count = taskService.createTaskQuery().suspended().list().size();
			} else if (searchState.equals("unassigned")) {
				list = taskService.createTaskQuery().unassigned()
						.page(start, limit).list();
				count = taskService.createTaskQuery().unassigned().list()
						.size();
			} else {
				list = taskService.createTaskQuery().notSuspended()
						.page(start, limit).list();
				count = taskService.createTaskQuery().notSuspended().list()
						.size();
			}

		} else if (searchType.equals("assignee")) {
			// 默认查询当前用户任务类表
			if (condition == "" || condition == null) {
				// 默认查询当前用户任务类表
				if (searchState.equals("all")) {
					list = taskService.createTaskQuery().assignee(userId)
							.page(start, limit).list();
					count = taskService.createTaskQuery().assignee(userId)
							.list().size();
				} else if (searchState.equals("suspend")) {
					list = taskService.createTaskQuery().assignee(userId)
							.suspended().page(start, limit).list();
					count = taskService.createTaskQuery().assignee(userId)
							.suspended().list().size();
				} else if (searchState.equals("unassigned")) {
					list = taskService.createTaskQuery().assignee(userId)
							.unassigned().page(start, limit).list();
					count = taskService.createTaskQuery().assignee(userId)
							.unassigned().list().size();
				} else {
					list = taskService.createTaskQuery().assignee(userId)
							.notSuspended().page(start, limit).list();
					count = taskService.createTaskQuery().assignee(userId)
							.notSuspended().list().size();
				}
			} else {
				// 查询非当前用户
				if (searchState.equals("all")) {
					list = taskService.createTaskQuery().assignee(condition)
							.page(start, limit).list();
					count = taskService.createTaskQuery().assignee(condition)
							.list().size();
				} else if (searchState.equals("suspend")) {
					list = taskService.createTaskQuery().assignee(condition)
							.suspended().page(start, limit).list();
					count = taskService.createTaskQuery().assignee(condition)
							.suspended().list().size();
				} else if (searchState.equals("unassigned")) {
					list = taskService.createTaskQuery().assignee(condition)
							.unassigned().page(start, limit).list();
					count = taskService.createTaskQuery().assignee(condition)
							.unassigned().list().size();
				} else {
					list = taskService.createTaskQuery().assignee(condition)
							.notSuspended().page(start, limit).list();
					count = taskService.createTaskQuery().assignee(condition)
							.notSuspended().list().size();
				}
			}
		} else if (searchType.equals("taskId")) {
			if (condition != "" && condition != null) {
				if (taskService.getTask(condition) != null) {
					list.add(taskService.getTask(condition));
					count = 1;
				}
			}
		} else if (searchType.equals("activityName")) {

			if (condition != "" && condition != null) {

				if (searchState.equals("all")) {
					list = taskService.createTaskQuery()
							.activityName(condition).page(start, limit).list();
					count = taskService.createTaskQuery()
							.activityName(condition).list().size();
				} else if (searchState.equals("suspend")) {
					list = taskService.createTaskQuery()
							.activityName(condition).suspended()
							.page(start, limit).list();
					count = taskService.createTaskQuery()
							.activityName(condition).suspended().list().size();
				} else if (searchState.equals("unassigned")) {
					list = taskService.createTaskQuery()
							.activityName(condition).unassigned()
							.page(start, limit).list();
					count = taskService.createTaskQuery()
							.activityName(condition).unassigned().list().size();
				} else {
					list = taskService.createTaskQuery()
							.activityName(condition).notSuspended()
							.page(start, limit).list();
					count = taskService.createTaskQuery()
							.activityName(condition).notSuspended().list()
							.size();
				}
			}
		} else if (searchType.equals("candidate")) {

			if (condition != "" && condition != null) {
				if (searchState.equals("all")) {
					list = taskService.createTaskQuery().candidate(condition)
							.page(start, limit).list();
					count = taskService.createTaskQuery().candidate(condition)
							.list().size();
				} else if (searchState.equals("suspend")) {
					list = taskService.createTaskQuery().candidate(condition)
							.suspended().page(start, limit).list();
					count = taskService.createTaskQuery().candidate(condition)
							.suspended().list().size();
				} else if (searchState.equals("unassigned")) {
					list = taskService.createTaskQuery().candidate(condition)
							.unassigned().page(start, limit).list();
					count = taskService.createTaskQuery().candidate(condition)
							.unassigned().list().size();
				} else {
					list = taskService.createTaskQuery().candidate(condition)
							.notSuspended().page(start, limit).list();
					count = taskService.createTaskQuery().candidate(condition)
							.notSuspended().list().size();
				}
			}
		} else if (searchType.equals("processDefinitionId")) {

			if (condition != "" || condition != null) {
				// 默认查询当前用户任务类表
				if (searchState.equals("all")) {
					list = taskService.createTaskQuery()
							.processDefinitionId(condition).page(start, limit)
							.list();
					count = taskService.createTaskQuery()
							.processDefinitionId(condition).list().size();
				} else if (searchState.equals("suspend")) {
					list = taskService.createTaskQuery()
							.processDefinitionId(condition).suspended()
							.page(start, limit).list();
					count = taskService.createTaskQuery()
							.processDefinitionId(condition).suspended().list()
							.size();
				} else if (searchState.equals("unassigned")) {
					list = taskService.createTaskQuery()
							.processDefinitionId(condition).unassigned()
							.page(start, limit).list();
					count = taskService.createTaskQuery()
							.processDefinitionId(condition).unassigned().list()
							.size();
				} else {
					list = taskService.createTaskQuery()
							.processDefinitionId(condition).notSuspended()
							.page(start, limit).list();
					count = taskService.createTaskQuery()
							.processDefinitionId(condition).notSuspended()
							.list().size();
				}
			}
		} else if (searchType.equals("processInstanceId")) {
			if (condition != "" || condition != null) {
				// 默认查询当前用户任务类表
				if (searchState.equals("all")) {
					list = taskService.createTaskQuery()
							.processInstanceId(condition).page(start, limit)
							.list();
					count = taskService.createTaskQuery()
							.processInstanceId(condition).list().size();
				} else if (searchState.equals("suspend")) {
					list = taskService.createTaskQuery()
							.processInstanceId(condition).suspended()
							.page(start, limit).list();
					count = taskService.createTaskQuery()
							.processInstanceId(condition).suspended().list()
							.size();
				} else if (searchState.equals("unassigned")) {
					list = taskService.createTaskQuery()
							.processInstanceId(condition).unassigned()
							.page(start, limit).list();
					count = taskService.createTaskQuery()
							.processInstanceId(condition).unassigned().list()
							.size();
				} else {
					list = taskService.createTaskQuery()
							.processInstanceId(condition).notSuspended()
							.page(start, limit).list();
					count = taskService.createTaskQuery()
							.processInstanceId(condition).notSuspended().list()
							.size();
				}
			}
		}

		response.getWriter().write(TaskToJson(list, count));

	}

	/**
	 * 删除任务
	 * 
	 * @throws Exception
	 * */
	private void delTask(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String id = request.getParameter("id");
		String type = request.getParameter("type");
		if (type.equals("normal")) {
			taskService.deleteTask(id);
		} else {
			taskService.deleteTaskCascade(id);
		}
		response.getWriter().write("{success:true}");
	}

	/**
	 * 根据userid获取小组任务
	 * 
	 * @throws Exception
	 * */
	private void getGroupTask(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		List<Task> list = new ArrayList();
		// 默认为登入用户id
		String userId = String.valueOf(request.getSession().getAttribute(
				"userId"));
		String userName = (String) request.getSession().getAttribute("user");
		// 查询用户id
		String searchId = (String) request.getParameter("conditions");
		int start = Integer.parseInt((String) request.getParameter("start"));
		int limit = Integer.parseInt((String) request.getParameter("limit"));
		if (searchId == "" || searchId == null) {
			list = taskService.findGroupTasks(userId);
		} else {
			list = taskService.findGroupTasks(searchId);
		}
		// 记录总数
		int count = list.size();
		if (list.size() <= limit) {
			// 分页
			list = list.subList(start, list.size());
		} else {
			list = list.subList(start, limit);
		}

		response.getWriter().write(TaskToJson(list, count));
	}

	/**
	 * 将Task装换为Json数据格式
	 * */
	private String TaskToJson(List<Task> list, int count) {
		StringBuffer sb = new StringBuffer();
		sb.append("{totalProperty:" + count);
		sb.append(",root:[");
		for (Task task : list) {
			sb.append("{id:'" + task.getId() + "',name:'" + task.getName()
					+ "',executionId:'" + task.getExecutionId()
					+ "',activityName:'" + task.getActivityName()
					+ "',assignee:'" + task.getAssignee() + "',createTime:'"
					+ task.getCreateTime() + "',dueDate:'" + task.getDuedate()
					+ "',formResourceName:'" + task.getFormResourceName()
					+ "',priority:" + task.getPriority() + ",description:'"
					+ task.getDescription() + "'},");
		}
		sb.append("]}");
		if (count != 0) {
			return sb.substring(0, sb.lastIndexOf(","))
					+ sb.substring(sb.lastIndexOf(",") + 1);
		} else {
			return sb.toString();
		}
	}

	/**
	 * 查询历史流程实例
	 * 
	 * @throws Exception
	 * */
	private void getHistoryProcessInstance(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String id = request.getParameter("conditions");
		String type = request.getParameter("searchType");
		int start = Integer.valueOf(request.getParameter("start"));
		int limit = Integer.valueOf(request.getParameter("limit"));
		List<HistoryProcessInstance> list = new ArrayList();
		int count = 0;
		if (type.equals("all")) {
			list = historyService.createHistoryProcessInstanceQuery()
					.page(start, limit).list();
			count = historyService.createHistoryProcessInstanceQuery().list()
					.size();
		} else if (type.equals("processInstanceId")) {
			list = historyService.createHistoryProcessInstanceQuery()
					.processInstanceId(id).page(start, limit).list();
			count = historyService.createHistoryProcessInstanceQuery()
					.processInstanceId(id).list().size();
		} else {
			list = historyService.createHistoryProcessInstanceQuery()
					.processDefinitionId(id).page(start, limit).list();
			count = historyService.createHistoryProcessInstanceQuery()
					.processDefinitionId(id).list().size();
		}
		response.getWriter().write(historyProcessInstanceToJson(list, count));
	}

	/**
	 * List<HistoryProcessInstance>装换成json数据格式
	 * */
	private String historyProcessInstanceToJson(
			List<HistoryProcessInstance> list, int count) {
		StringBuffer sb = new StringBuffer();
		sb.append("{totalProperty:" + count);
		sb.append(",root:[");
		for (HistoryProcessInstance hpi : list) {
			sb.append("{processInstanceId:'" + hpi.getProcessInstanceId()
					+ "',processDefinitionId:'" + hpi.getProcessDefinitionId()
					+ "',key:'" + hpi.getKey() + "',duration:"
					+ hpi.getDuration() + ",startTime:'" + hpi.getStartTime()
					+ "',endTime:'" + hpi.getEndTime() + "',state:'"
					+ hpi.getState() + "'},");
		}
		sb.append("]}");
		if (count != 0) {
			return sb.substring(0, sb.lastIndexOf(","))
					+ sb.substring(sb.lastIndexOf(",") + 1);
		} else {
			return sb.toString();
		}
	}

	/**
	 * 删除流程实例
	 * 
	 * @throws Exception
	 * */
	private void delProcessInstance(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String id = request.getParameter("id");
		String type = request.getParameter("type");
		if (type.equals("normal")) {
			// 删除流程实例
			executionService.deleteProcessInstance(id);
		} else {
			// 级联删除
			executionService.deleteProcessInstanceCascade(id);
		}
		response.getWriter().write("{success:true}");
	}

	/**
	 * 流程实例查询
	 * 
	 * @throws Exception
	 * */
	private void getPorcessInstances(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String searchType = request.getParameter("searchType");
		String value = request.getParameter("conditions");
		int start = Integer.valueOf(request.getParameter("start"));
		int limit = Integer.valueOf(request.getParameter("limit"));
		String searchStateType = request.getParameter("searchStateType");
		int count = 0;
		List<ProcessInstance> pis = new ArrayList();
		if (searchType.equals("all")) {
			if (searchStateType.equals("all")) {
				pis = executionService.createProcessInstanceQuery()
						.page(start, limit).list();
				count = executionService.createProcessInstanceQuery().list()
						.size();
			} else if (searchStateType.equals("suspend")) {
				// select only suspended process definitions
				pis = executionService.createProcessInstanceQuery().suspended()
						.page(start, limit).list();
				count = executionService.createProcessInstanceQuery()
						.suspended().list().size();
			} else {
				// select only process definitions that are not suspended
				pis = executionService.createProcessInstanceQuery()
						.notSuspended().page(start, limit).list();
				count = executionService.createProcessInstanceQuery()
						.notSuspended().list().size();
			}

		} else if (value != "" && value != null) {

			if (searchType.equals("processDefinitionId")) {
				if (searchStateType.equals("all")) {
					pis = executionService.createProcessInstanceQuery()
							.processDefinitionId(value).page(start, limit)
							.list();
					count = executionService.createProcessInstanceQuery()
							.processDefinitionId(value).list().size();
				} else if (searchStateType.equals("suspend")) {
					//
					pis = executionService.createProcessInstanceQuery()
							.suspended().processDefinitionId(value)
							.page(start, limit).list();
					count = executionService.createProcessInstanceQuery()
							.suspended().processDefinitionId(value).list()
							.size();

				} else {
					//
					pis = executionService.createProcessInstanceQuery()
							.notSuspended().processDefinitionId(value)
							.page(start, limit).list();
					count = executionService.createProcessInstanceQuery()
							.notSuspended().processDefinitionId(value).list()
							.size();
				}

			} else if (searchType.equals("processInstanceId")) {
				//
				if (searchStateType.equals("all")) {
					pis = executionService.createProcessInstanceQuery()
							.processInstanceId(value).page(start, limit).list();
					count = executionService.createProcessInstanceQuery()
							.processInstanceId(value).list().size();

				} else if (searchStateType.equals("suspend")) {
					pis = executionService.createProcessInstanceQuery()
							.suspended().processInstanceId(value)
							.page(start, limit).list();
					count = executionService.createProcessInstanceQuery()
							.suspended().processInstanceId(value).list().size();

				} else {
					pis = executionService.createProcessInstanceQuery()
							.notSuspended().processInstanceId(value)
							.page(start, limit).list();
					count = executionService.createProcessInstanceQuery()
							.notSuspended().processInstanceId(value).list()
							.size();
				}

			}
		
  

你可能感兴趣的:(spring,Hibernate,bean,json,jbpm)