📄 flowservice.java
字号:
package com.flowdemo.service;
import java.util.ArrayList;
import java.util.List;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.db.GraphSession;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.taskmgmt.exe.TaskInstance;
import com.flowdemo.jbpm.util.PoTaskWrapper;
import com.flowdemo.po.Expenses;
import com.flowdemo.po.Users;
import com.flowdemo.util.HibernateSessionFactory;
public class FlowService {
static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
/**
* 初始化流程
*/
public static void initJbpm(){
JbpmContext jbpmContext = jbpmConfiguration.getCurrentJbpmContext();
if(jbpmContext == null || jbpmContext.equals("")){
jbpmContext = jbpmConfiguration.createJbpmContext();
}
//如果流程定义没有,则重新部署
try{
ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("com/flowdemo/jbpm/expense/processdefinition.xml");;
//测试是否存在
System.out.println("流程定义是否加载?==="+processDefinition.toString());
jbpmContext.deployProcessDefinition(processDefinition);
GraphSession graphSession = jbpmContext.getGraphSession();
processDefinition = graphSession.findLatestProcessDefinition("expense");
}finally{
jbpmContext.close();
}
}
/**
* 绑定报销单到流程中
*/
public static void bindingExpenseToProcess(){
JbpmContext jbpmContext = jbpmConfiguration.getCurrentJbpmContext();
if(jbpmContext == null || jbpmContext.equals("")){
jbpmContext = jbpmConfiguration.createJbpmContext();
}
try{
jbpmContext.setSessionFactory(HibernateSessionFactory.getSessionFactory());
ProcessDefinition processDefinition = jbpmContext.getGraphSession().findLatestProcessDefinition("expense");
ProcessInstance processInstance = new ProcessInstance(processDefinition);
jbpmContext.save(processInstance);
long processInstanceId = processInstance.getId();
//用什么来get or load这个Expenses对象呢?
Expenses expense = (Expenses)jbpmContext.getSession().createQuery("from Expenses where processInstanceId = "+null).list().get(0);
//Expenses expense = (Expenses)jbpmContext.getSession().get(Expenses.class, 3);
expense.setProcessInstanceId(new Long(processInstanceId).toString());
jbpmContext.getSession().update(expense);
processInstance.getContextInstance().setVariable("expense_id", expense.getExpenseId());
processInstance.signal();
}finally{
jbpmContext.close();
}
}
/**
* 根据用户来返回自己需要处理的任务
* @param user
* @return
*/
public static List getTasks(Users user){
JbpmContext jbpmContext = jbpmConfiguration.getCurrentJbpmContext();
if(jbpmContext == null || jbpmContext.equals("")){
jbpmContext = jbpmConfiguration.createJbpmContext();
}
System.out.println("提供任务的人的名字"+user.getUserName());
List tasks = new ArrayList();
//List expenses = new ArrayList();
List poAndTasks = new ArrayList();
try{
tasks = jbpmContext.getTaskMgmtSession().findTaskInstances(user.getUserName());
System.out.println("需要处理的任务的多少"+tasks);
TaskInstance taskInstance = null;
Expenses expense = null;
for(int i=0;i<tasks.size();i++){
taskInstance = (TaskInstance)tasks.get(i);
Integer expenseId =(Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("expense_id");
System.out.println("expenseId的值是多少呢?"+expenseId);
PoTaskWrapper poTask = new PoTaskWrapper();
jbpmContext.setSessionFactory(HibernateSessionFactory.getSessionFactory());
expense = (Expenses)jbpmContext.getSession().load(Expenses.class, expenseId);
System.out.println("对应的报销单的编号、金额和理由"+expense.getExpenseId()+" "+expense.getMoney()+" "+expense.getReason());
//expenses.add(expense);
poTask.setExpense(expense);
System.out.println("poTask获得的expense-->"+poTask.getExpense().getMoney());
poTask.setTaskInstanceId(taskInstance.getId());
poTask.setTokenId(taskInstance.getToken().getId());
poAndTasks.add(poTask);
}
}catch(Exception e){
e.printStackTrace();
}finally{
jbpmContext.close();
}
//return expenses;
System.out.println("队列的长度 -->"+poAndTasks.size());
return poAndTasks;
}
/**
* @param processInstanceId
* @return
*/
public static boolean managerApprove(String processInstanceId){
JbpmContext jbpmContext = jbpmConfiguration.getCurrentJbpmContext();
if(jbpmContext == null || jbpmContext.equals("")){
jbpmContext = jbpmConfiguration.createJbpmContext();
}
try{
ProcessInstance processInstance = jbpmContext.getProcessInstance(new Long(processInstanceId).longValue());
//ProcessDefinition processDefinition = jbpmContext.getGraphSession().findLatestProcessDefinition("expense");
//ProcessInstance processInstance = new ProcessInstance(processDefinition);
TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createTaskInstance();
taskInstance.end();
processInstance.signal();
}catch(Exception e){
e.printStackTrace();
}finally{
jbpmContext.close();
}
return false;
}
/**
* 审核
* @param processInstanceId
*/
// public static void approve(String processInstanceId){
// JbpmContext jbpmContext = jbpmConfiguration.getCurrentJbpmContext();
// if(jbpmContext == null || jbpmContext.equals("")){
// jbpmContext = jbpmConfiguration.createJbpmContext();
// }
// try{
// ProcessInstance processInstance = jbpmContext.getProcessInstance(new Long(processInstanceId).longValue());
// //ProcessDefinition processDefinition = jbpmContext.getGraphSession().findLatestProcessDefinition("expense");
// //ProcessInstance processInstance = new ProcessInstance(processDefinition);
// //TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance();
// TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createTaskInstance();
// //taskInstance.end("manager_approve");
// taskInstance.end();
// processInstance.signal();
//
// }catch(Exception e){
// e.printStackTrace();
// }finally{
// jbpmContext.close();
// }
// }
/**
* 审核
* @param taskInstanceId
*/
public static void approve(long taskInstanceId){
JbpmContext jbpmContext = jbpmConfiguration.getCurrentJbpmContext();
if(jbpmContext == null || jbpmContext.equals("")){
jbpmContext = jbpmConfiguration.createJbpmContext();
}
try{
//ProcessInstance processInstance = jbpmContext.getProcessInstance(new Long(processInstanceId).longValue());
//ProcessDefinition processDefinition = jbpmContext.getGraphSession().findLatestProcessDefinition("expense");
//ProcessInstance processInstance = new ProcessInstance(processDefinition);
//TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance();
TaskInstance taskInstance = jbpmContext.getTaskInstance(taskInstanceId);
//taskInstance.end("manager_approve");
taskInstance.end();
//processInstance.signal();
}catch(Exception e){
e.printStackTrace();
}finally{
jbpmContext.close();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -