package com.vci.server.workflow.server.event;
|
|
import java.util.List;
|
import java.util.Map;
|
|
import org.jbpm.api.Configuration;
|
import org.jbpm.api.Execution;
|
import org.jbpm.api.ProcessEngine;
|
import org.jbpm.api.TaskService;
|
import org.jbpm.api.model.OpenExecution;
|
import org.jbpm.api.task.Assignable;
|
import org.jbpm.api.task.AssignmentHandler;
|
import org.jbpm.api.task.Participation;
|
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.history.model.HistoryTaskImpl;
|
import org.jbpm.pvm.internal.model.ActivityImpl;
|
import org.jbpm.pvm.internal.model.ExecutionImpl;
|
import org.jbpm.pvm.internal.session.DbSession;
|
import org.jbpm.pvm.internal.task.TaskImpl;
|
import org.jbpm.pvm.internal.util.Clock;
|
|
public class AssignTask implements AssignmentHandler {
|
|
private static final long serialVersionUID = 1L;
|
List<String> participants;
|
ProcessEngine processEngine = Configuration.getProcessEngine();
|
TaskService taskService = processEngine.getTaskService();
|
|
@SuppressWarnings("unchecked")
|
public void assign(Assignable assignable, OpenExecution execution) throws Exception {
|
String activityName = ((ExecutionImpl) execution).getActivityName();
|
String pid = execution.getProcessInstance().getId();
|
List taskList = taskService.createTaskQuery().processInstanceId(pid).activityName(activityName).list();
|
// Task task = null ;
|
DbSession dbSession = EnvironmentImpl.getFromCurrent(DbSession.class);
|
TaskImpl task = null;
|
for (int i = 0; i < taskList.size(); i++) {
|
task = (TaskImpl) taskList.get(i);
|
if (task.getActivityName().equals(activityName)) {
|
break;
|
}
|
}
|
participants = (List<String>) taskService.getVariable(task.getId(), "participants");
|
///创建子任务的时候,需要把父任务的变量都拷贝过去
|
Map<String,Object> variables = task.getVariables();
|
HistoryTaskImpl ht = dbSession.get(HistoryTaskImpl.class, task.getDbid());
|
int i = 1;
|
if (participants != null) {
|
for (String participant : participants) {
|
// Task subTask=((OpenTask) task).createSubTask();
|
// subTask.setName(task.getActivityName()+"-处理"+i);
|
// subTask.setPriority(1);
|
// subTask.setAssignee(participant);
|
// //关联主任务
|
// taskService.addTaskParticipatingUser(task.getId(), participant, Participation.CLIENT);
|
TaskImpl subTask = task.createSubTask();
|
// subTask.setName(task.getActivityName()+"-处理"+i);
|
subTask.setName(task.getActivityName());
|
subTask.setPriority(1);
|
subTask.setAssignee(participant);
|
subTask.setVariables(variables);
|
|
ExecutionImpl exc = ((ExecutionImpl) execution).createExecution();
|
ActivityImpl activity = ((ExecutionImpl) execution).getActivity();
|
activity.setType("subTask");
|
|
exc.setActivity(activity);
|
exc.setState(Execution.STATE_ACTIVE_CONCURRENT);
|
exc.setHistoryActivityStart(Clock.getCurrentTime());
|
subTask.setExecution(exc);
|
|
HistoryEvent.fire(new TaskActivityStart(subTask), exc);
|
// ht.addSubTask(dbSession.get(HistoryTaskImpl.class, subTask.getDbid()));
|
|
taskService.addTaskParticipatingUser(task.getId(), participant, Participation.CLIENT);
|
i++;
|
}
|
}
|
}
|
}
|