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 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) taskService.getVariable(task.getId(), "participants"); ///创建子任务的时候,需要把父任务的变量都拷贝过去 Map 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++; } } } }