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<String, ?> parms) throws Exception {
|
ExecutionImpl executionImpl = (ExecutionImpl) activityExecution;
|
ProcessInstance pi = (ProcessInstance) executionImpl
|
.getProcessInstance();
|
TaskService taskService = Configuration.getProcessEngine()
|
.getTaskService();
|
Activity activity = executionImpl.getActivity();
|
List<Task> tasks = taskService.createTaskQuery().processInstanceId(
|
pi.getId()).list();
|
|
List<Task> subTask_list = taskService.getSubTasks(tasks.get(0).getId());
|
Iterator<Task> 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();
|
}
|
}
|
|
|
|
}
|