package com.vci.server.workflow.server.event; import java.util.Iterator; import java.util.List; import java.util.Map; import org.jbpm.api.Configuration; import org.jbpm.api.ProcessInstance; import org.jbpm.api.TaskService; import org.jbpm.api.activity.ActivityExecution; import org.jbpm.api.activity.ExternalActivityBehaviour; import org.jbpm.api.task.Task; import org.jbpm.pvm.internal.env.EnvironmentImpl; import org.jbpm.pvm.internal.history.HistoryEvent; import org.jbpm.pvm.internal.history.events.TaskActivityStart; import org.jbpm.pvm.internal.model.Activity; import org.jbpm.pvm.internal.model.ExecutionImpl; import org.jbpm.pvm.internal.model.Transition; import org.jbpm.pvm.internal.session.DbSession; import org.jbpm.pvm.internal.task.TaskImpl; public class Custom implements ExternalActivityBehaviour { private static final long serialVersionUID = 1L; public void execute(ActivityExecution activityExecution) throws Exception { ExecutionImpl executionimpl = (ExecutionImpl) activityExecution; DbSession dbsession = EnvironmentImpl.getFromCurrent(DbSession.class); TaskImpl taskimpl = dbsession.createTask(); taskimpl.setName("customTem"); taskimpl.setExecution(executionimpl); taskimpl.setProcessInstance(executionimpl.getProcessInstance()); taskimpl.setSignalling(false); taskimpl.setExecutionDbid(executionimpl.getDbid()); dbsession.save(taskimpl); HistoryEvent.fire(new TaskActivityStart(taskimpl), executionimpl); // 子任务 TaskImpl subtaskimpl1 = taskimpl.createSubTask(); subtaskimpl1.setName("huigao1"); subtaskimpl1.setAssignee("huigao1"); subtaskimpl1.setSignalling(false); subtaskimpl1.setExecutionDbid(executionimpl.getDbid()); dbsession.save(subtaskimpl1); HistoryEvent.fire(new TaskActivityStart(subtaskimpl1), executionimpl); TaskImpl subtaskimpl2 = taskimpl.createSubTask(); subtaskimpl2.setName("huigao2"); subtaskimpl2.setAssignee("huigao2"); subtaskimpl2.setExecutionDbid(executionimpl.getDbid()); subtaskimpl2.setSignalling(false); dbsession.save(subtaskimpl2); HistoryEvent.fire(new TaskActivityStart(subtaskimpl2), executionimpl); // 流程等待 executionimpl.waitForSignal(); } public void signal(ActivityExecution activityExecution, String signalName, Map parms) throws Exception { ExecutionImpl executionImpl = (ExecutionImpl) activityExecution; ProcessInstance pi = (ProcessInstance) executionImpl .getProcessInstance(); TaskService taskService = Configuration.getProcessEngine() .getTaskService(); Activity activity = executionImpl.getActivity(); List tasks = taskService.createTaskQuery().processInstanceId( pi.getId()).list(); List subTask_list = taskService.getSubTasks(tasks.get(0).getId()); Iterator iter = subTask_list.iterator(); while (iter.hasNext()) { Task subtask = iter.next(); if (parms.get("username").equals(subtask.getAssignee())) { taskService.completeTask(subtask.getId()); } } if (subTask_list == null || subTask_list.size() == 1) { Transition transition = null; if ((signalName == null) || ((Task.STATE_COMPLETED.equals(signalName)) && (activity.getOutgoingTransitions() != null) && (activity .getOutgoingTransitions().size() == 1))) { transition = activity.getOutgoingTransitions().get(0); } else { transition = activity.findOutgoingTransition(signalName); } taskService.completeTask(tasks.get(0).getId()); executionImpl.take(transition); } else { executionImpl.waitForSignal(); } } }