田源
2024-03-07 4b4083fd73dc27ece42f4835483565eef0e4f608
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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();
           }
        }
 
 
 
}