📄 billflowmanager.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 + -