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);
}*/
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
oa_java_system.rar_jbpm_jbpm-demo_oa java_公文 (389个子文件)
Bill.class 9KB
BillFlowManager.class 8KB
InitSystemDatasImpl.class 7KB
WorkflowManagerImpl.class 7KB
AclManagerImpl.class 7KB
DocumentAction.class 6KB
Auto_NO_Builder_manager.class 6KB
DocumentManagerImpl.class 6KB
AbstractManager.class 5KB
TestInitJbpm.class 5KB
General_Goods.class 5KB
UserAction.class 4KB
UserManagerImpl.class 4KB
BillAssignment_enter_task.class 4KB
Bill_Trace.class 4KB
WorkflowAction.class 4KB
AH_tobusiness_BillTraceActionHandler.class 3KB
Bill_Ex.class 3KB
DocumentActionForm.class 3KB
AbstractManager.class 3KB
ModuleAction.class 3KB
Business_toAH_BillTraceActionHandler.class 3KB
BillAssignment_tobusiness_BillTraceActionHandler.class 3KB
OrgAction.class 3KB
MyActionHandlerFirst.class 3KB
BusinessHandler_enter.class 3KB
AH_timeout_toBillAssignment_BillTraceActionHandler.class 3KB
AclAction.class 3KB
BillAssignment_toAH_BillTraceActionHandler.class 3KB
CustomerOrderHandler.class 3KB
TaskAssignment.class 3KB
Business_toEnd_BillTraceActionHandler.class 3KB
SystemExceptionHandler.class 3KB
AH_toEnd_BillTraceActionHandler.class 3KB
PersonAction.class 2KB
CustomerOrder_BillTraceActionHandler.class 2KB
RoleAction.class 2KB
TaskAssignment.class 2KB
OrgManagerImpl.class 2KB
AH_AgentHandler_enter.class 2KB
Person.class 2KB
ModuleManagerImpl.class 2KB
ACL.class 2KB
Document.class 2KB
Flow1Test.class 2KB
Module.class 2KB
BaseAction.class 2KB
TestBillFlowManager.class 2KB
LoginAction.class 2KB
PersonActionForm.class 2KB
PagerFilter.class 2KB
Flow_bill_to_db.class 2KB
OrgManagerTest.class 2KB
ApproveInfo.class 2KB
Bill_ManagerAction.class 2KB
MainAction.class 2KB
PersonManagerImpl.class 2KB
Organization.class 2KB
DispatchBillAssignment.class 2KB
Bill_SubmitAction.class 2KB
OrgActionForm.class 2KB
UserActionForm.class 2KB
RoleManagerImpl.class 2KB
ModuleActionForm.class 1KB
BillLoginAction.class 1KB
PersonManagerTest.class 1KB
BusinessHandler_leave.class 1KB
Flow1ToDbTest.class 1KB
HibernateUtil.class 1KB
SystemContext.class 1KB
HibernateUtil.class 1KB
SystemContext.class 1KB
FormField.class 1KB
UsersRoles.class 1KB
DecitionHandler.class 1KB
User.class 1KB
AclActionForm.class 1KB
SystemException.class 1KB
FlowForm.class 1KB
Workflow.class 1KB
WorkflowActionForm.class 1KB
Auto_NO_Builder.class 1016B
InitSystemDatasTest.class 1003B
BusinessAssignment.class 879B
BillAssignmentHandlerAgent_leave.class 868B
MyActionHandlerFirst3.class 861B
BillAssignmentHandlerAgent_enter.class 860B
Time_outActionHandler.class 845B
MyActionHandlerFirst2.class 843B
AH_AgentHandler_leave.class 841B
MyActionHandlerAgent_leave.class 828B
MyActionHandlerAgent_enter.class 817B
TestArray.class 787B
MyActionHandler.class 781B
RoleActionForm.class 775B
MyActionHandler3.class 766B
MyActionHandler2.class 762B
MyActionHandler.class 758B
MyActionHandler3.class 756B
PagerModel.class 754B
共 389 条
- 1
- 2
- 3
- 4
资源评论
周楷雯
- 粉丝: 78
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于stm32f103c单片机+MPU6050+0.96英寸OLED显示屏双柄遥控器硬件(原理图+PCB)工程文件.zip
- 整理的关于少儿编程的学习路径,以及如何在小升初,初升高和大学充分的利用起来编程经验的优势
- 足球比赛结果统计表2006-2011年大约28W场比赛
- 基于PHP+mysql的社区交流系统(源代码)
- yolov5,SSD 可能使用到的一些代码
- 一键批量生成多层次文件夹结构,使用Python脚本实现嵌套文件夹批量生成
- 基于c51单片机+DS1302+DHT11温湿度模块+LCD1602显示的万年历硬件原理图+BOM+软件程源码序+仿真图.zip
- NSGA2的MATLAB代码
- Messagepassingtest_GCN_DGL.py
- Sh,Docker 运维好帮手,一招通过 sh 脚本批量快速启动和重启多个Docker 容器
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功