⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 billflowmanager.java

📁 这是一个jbpm的高级应用,是一个oa工作流的系统,里面用到了spring,hibernate技术等.实为学习jbpm的好资料!
💻 JAVA
字号:
package com.xiangfeng.jbpm.manager;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.def.Transition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.taskmgmt.exe.TaskInstance;

import com.bjsxt.oa.managers.SystemException;
import com.bjsxt.oa.model.Document;
import com.xiangfeng.manager.AbstractManager;
import com.xiangfeng.manager.Auto_NO_Builder_manager;
import com.xiangfeng.model.Bill;
import com.xiangfeng.util.hibernateUtil.HibernateUtil;



public class BillFlowManager extends AbstractManager{
static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
private JbpmContext getJbpmContext(){
	JbpmContext context = jbpmConfiguration.createJbpmContext();
	
	//关键的一个步骤,我们需要将JBPM使用的session对象跟系统所使用的
	//session对象整合起来。
	//context.setSession(getSession());
	
	return context;
}
	public void DeployWorkflowDef(){
		
		//流程定义
		ProcessDefinition definition = ProcessDefinition.parseXmlInputStream(
				Thread.currentThread().getContextClassLoader()
				.getResourceAsStream("flow_billflow/processdefinition.xml")
				);
		
		JbpmContext context = jbpmConfiguration.createJbpmContext();
		
		Session session = HibernateUtil.getSession();
		context.setSession(session);
		try {
			session.beginTransaction();
			//创建流程!!
			context.deployProcessDefinition(definition);
			
			session.getTransaction().commit();
		}finally{
			context.close();
			HibernateUtil.closeSession(session);
		}
	}
	
public Bill test_newBill(){
	String billNO =Auto_NO_Builder_manager.getAuto_NO_Builder_manager().return_AllNo("CBillNO_key");
	Bill bill = new Bill();
	
	bill.setCbillNo(billNO);
	bill.setCproperty1("直接提交商家");
	//bill.setCProperty1("转交客服处理");
	Session session = HibernateUtil.getSession();
	try {
		session.beginTransaction();
		session.save(bill);
		session.getTransaction().commit();
		
		
	} catch (Exception e) {

		session.getTransaction().rollback();
		e.printStackTrace();
	} finally {
		HibernateUtil.closeSession(session);
	}
	
	return bill;
}	
	
	
public void submit_bill_to_Workflow(Bill bills) {
		
	Bill bill= test_newBill();
		JbpmContext context = getJbpmContext();
		
		ProcessInstance processInstance=null;
		
		
		Session session = HibernateUtil.getSession();
		context.setSession(session);
		try {
			session.beginTransaction();
			//context.getContextSession().
		
			
		//根据公文对应的流程名称,获得流程定义对象
		ProcessDefinition processDefinition = context.getGraphSession()
				.findLatestProcessDefinition("订单流程");
		
		//根据流程定义对象,创建一个流程实例
	 processInstance = new ProcessInstance(processDefinition);
	 //context.getGraphSession().deleteProcessInstance(processInstance);
	
	 
	 //将流程实例与公文绑定
		
	 
	 processInstance.setKey(""+bill.getCbillNo());
		System.out.println("新建流程  key is "+bill.getCbillNo());
		processInstance.getContextInstance().setVariable("billNO", ""+bill.getCbillNo());
		processInstance.getContextInstance().setVariable("username", "admin");
		//processInstance.getContextInstance().setVariable("documentId",document.getId());
		processInstance.getContextInstance().setVariable("billIid", ""+bill.getIid());
		context.save(processInstance);
		//System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$billIid is "+bill.getIid());
		
		
		processInstance.signal();
		
	
		
		session.getTransaction().commit();
		
	
		} catch (Exception e) {

			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			HibernateUtil.closeSession(session);
		}
	}
	
	
//搜索流转到用户username的所有的流程实例(实际上就是公文!)
public List searchCurrentProcessInstances(String username) {
	Session session = HibernateUtil.getSession();
	
	JbpmContext context = getJbpmContext();
	context.setSession(session);
	//JbpmContext context = getJbpmContext();
	
	List docIds = new ArrayList();
	
	//从工作流引擎中,根据actor-id的值,获得分配给这个actor-id的所有任务!
	List taskInstances = context.getTaskMgmtSession().findTaskInstances(username);

	for (Iterator iter = taskInstances.iterator(); iter.hasNext();) {
		TaskInstance ti = (TaskInstance) iter.next();
		
		//如果这个任务是正在等待被完成的状态
		if(ti.isSignalling()){
			docIds.add(ti.getProcessInstance().getKey());
		}
	}
	
	List bills =session.createQuery(" from Bill b where b.cbillNo in (:ids)")
			.setParameterList("ids", docIds).list();
	
	return bills;
}


//流向下一步!
public void flowToNextStep(int billIid, String transitionName) {
	//Document document = (Document)getHibernateTemplate().load(Document.class, documentId);
	Session session = HibernateUtil.getSession();
	
	JbpmContext context = getJbpmContext();
	context.setSession(session);
	try {
		session.beginTransaction();
		Bill bill =(Bill)session.load(Bill.class, billIid);
	//根据流程名称获得流程定义对象
	ProcessDefinition processDefinition = context.getGraphSession()
		.findLatestProcessDefinition("订单流程");
	
	//根据流程定义对象以及key值,获得流程实例
	ProcessInstance processInstance = context.getProcessInstance(processDefinition, ""+bill.getCbillNo());

	if(transitionName == null){
		processInstance.signal();
	}else{
		processInstance.signal(transitionName);
	}
	
	//设置公文的状态为当前节点的名称
	//document.setStatus(processInstance.getRootToken().getNode().getName());
	bill.setCbillStatus(processInstance.getRootToken().getNode().getName());

	//如果已经是终点,则设置公文为已完成状态
	//当流程到达终点
if(processInstance.getRootToken().hasEnded()){
	bill.setCbillStatus(Bill.STATUS_END);
	}
	session.update(bill);
	} catch (Exception e) {

		session.getTransaction().rollback();
		e.printStackTrace();
	} finally {
		HibernateUtil.closeSession(session);
	}
}


//获得文档的下一步流向,返回流向名称列表
public List searchNextSteps(int billIid) {
	List transitions = new ArrayList();
	//Document document = (Document)getHibernateTemplate().load(Document.class, documentId);
	Session session = HibernateUtil.getSession();
	
	JbpmContext context = getJbpmContext();
	context.setSession(session);
	try {
		session.beginTransaction();
		Bill bill =(Bill)session.load(Bill.class, billIid);
	//JbpmContext context = getJbpmContext();
		System.out.println(bill.getCbillNo());
	//根据流程名称获得流程定义对象
	ProcessDefinition processDefinition = context.getGraphSession()
		.findLatestProcessDefinition("订单流程");
	
	//根据流程定义对象以及key值,获得流程实例
	ProcessInstance processInstance = context.getProcessInstance(processDefinition, ""+bill.getCbillNo());
	
	//查看当前流程是否已经结束
	if(processInstance.getRootToken().hasEnded()){
		throw new SystemException("流程已结束");
	}
	
	//获得当前节点的下一步都有哪些流向
	List list = processInstance.getRootToken().getNode().getLeavingTransitions();
	
	System.out.println("list size is "+list.size());
	
	for (Iterator iter = list.iterator(); iter.hasNext();) {
		
		//获得流向名称列表
		Transition transition = (Transition) iter.next();
		System.out.println(transition.getName());
		transitions.add(transition.getName());
	}
	} catch (Exception e) {

		session.getTransaction().rollback();
		e.printStackTrace();
	} finally {
		HibernateUtil.closeSession(session);
	}
	return transitions;
}

	
	
/*	public void testDel(){
	JbpmContext context = getJbpmContext();
		
		ProcessInstance processInstance=null;
		ProcessDefinition processDefinition = context.getGraphSession()
		.findLatestProcessDefinition("订单流程");

//根据流程定义对象,创建一个流程实例
processInstance = new ProcessInstance(processDefinition);
context.getGraphSession().deleteProcessInstance(processInstance);
	}*/
	
	
	
	
	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -