1 package com.kite.pi;
2
3 import java.util.List;
4
5 import org.jbpm.api.Configuration;
6 import org.jbpm.api.ProcessInstance;
7 import org.jbpm.api.history.HistoryTask;
8 import org.jbpm.api.task.Task;
9 import org.junit.Test;
10 /**
11 * 流程实例
12 * * 启动流程实例
13 * * 完成任务
14 * * 查询
15 * * 查询流程实例
16 * * 查询任务
17 * * 查询正在执行的任务
18 * * 查询所有政治啊执行的任务
19 * * 根据任务的执行人查询正在执行的任务
20 * * 根据executionid查询正在执行的任务
21 * * 根据piid查询正在执行的任务
22 * * 根据pdid查询正在执行的任务
23 * * 根据taskid查询任务 taskService.getTask(string taskid) 和其他的查询不一样
24 * * 查询已经完成的任务
25 * * 查询所有的
26 * * 根据任务的执行人
27 * * 根据executionid
28 * * ....
29 * * 结束流程实例
30 * @author admin
31 *
32 */
33 public class PITest {
34
35 /**
36 * 涉及到的表
37 * JBPM4_EXECUTION
38 * * 表示当前正在执行的流程实例
39 * * 字段
40 * DBID_:主键
41 * ID_:流程实例ID
42 * ACTIVITYNAME_:当前流程实例活跃的节点
43 * PROCDEFID_:流程定义ID
44 * JBPM4_HIST_PROCINST
45 * * 表示历史的流程实例,但是当前正在运行的流程实例也在这里
46 * * 字段
47 * DBID_:主键
48 * ID_:流程实例ID
49 * START_:整个流程实例的开始时间
50 * END_:流程实例的结束时间,如果该流程实例为当前正在运行的流程则,该值为空
51 * STATE:表示流程实例的状态 如果是正在运行,为active 如果流程实例结束 为ended
52 * JBPM4_TASK
53 * * 表示当前正在执行的任务
54 * 说明:任务是jbpm流程图的一个节点
55 * * 字段
56 * DBID_:主键、任务ID
57 * NAME_:任务名称
58 * ASSIGNEE_:任务的执行人
59 * JBPM4_HIST_TASK
60 * * 表示历史的任务,但是当前正在执行的任务也在这里
61 * * 字段
62 * STATE_:如果一个任务被完成以后,值为completed
63 * end_:任务的结束时间有值了
64 * JBPM4_HIST_ACTINST
65 * * 表示历史的节点
66 * * 字段
67 * TYPE_:节点类型
68 * ------------------------------------------------------------------------------
69 * 说明:
70 * * 当启动流程实例的时候,会自动的离开开始节点,流向下一个节点
71 * * jbpm4_task为临时表,当当前的任务完成以后,该数据就被删除了
72 */
73
74 /**
75 * 根据pdid启动流程实例
76 */
77 @Test
78 public void testStartPIByPDID(){
79 ProcessInstance processInstance = Configuration.getProcessEngine().getExecutionService()
80 .startProcessInstanceById("qingjia1-1");
81 System.out.println(processInstance.getId());
82 System.out.println(processInstance.getState());
83 }
84
85 /**
86 * 根据pdkey启动流程实例,是该key下,最高版本
87 */
88 @Test
89 public void testStartPIByPDKEY(){
90 ProcessInstance processInstance = Configuration.getProcessEngine().getExecutionService()
91 .startProcessInstanceByKey("qingjia1");
92 System.out.println(processInstance.getId());
93 System.out.println(processInstance.getState());
94 }
95
96 /**
97 * 完成任务 当完成任务执行完成以后会走向下一个任务流程
98 */
99 @Test
100 public void testFinishTask(){
101 Configuration.getProcessEngine().getTaskService()
102 .completeTask("60001");
103 }
104
105
106 /**107 * 查询所有的流程实例
108 */
109 @Test
110 public void testQueryAllPI(){
111 List<ProcessInstance> pIList = Configuration.getProcessEngine().getExecutionService()
112 .createProcessInstanceQuery().list();
113
114 for(ProcessInstance processInstance : pIList){
115 System.out.print(processInstance.getId() + ",");
116 System.out.println(processInstance.getState() );
117 }
118 }
119
120 /**
121 * 查询正在执行的任务
122 */
123 @Test
124 public void testQueryAllTask(){
125 List<Task> taskList = Configuration.getProcessEngine().getTaskService()
126 .createTaskQuery()
127 .list();
128 for(Task task : taskList){
129 System.out.println("执行人:" + task.getAssignee());
130 System.out.println("当前执行任务的名称:" + task.getName());
131 System.out.println("任务创建时间:" + task.getCreateTime());
132 }
133 }
134
135 /**
136 * 可以根据任务的执行人查询当前正在执行的任务
137 * 可以根据pdid查询当前正在执行的任务
138 */
139 @Test
140 public void testQueryTaskPDID(){
141 /*Task task = Configuration.getProcessEngine().getTaskService()
142 .createTaskQuery()
143 .assignee("李四").uniqueResult();
144 */
145 List<Task> taskList = Configuration.getProcessEngine().getTaskService()
146 .createTaskQuery().processDefinitionId("qingjia-1").list();
147
148
149 for(Task task : taskList){
150 System.out.println("执行人:" + task.getAssignee());
151 System.out.println("当前执行任务的名称:" + task.getName());
152 System.out.println("任务创建时间:" + task.getCreateTime());
153
154 }
155 }
156 /**
157 * excution
158 * *如果存在并发的情况,那么execution和process instance 是一样的
159 * *如果存在并发的情况,execution代表分支,processinstance代表主线
160 * *根据executionid查询任务,有唯一的一个
161 */
162 /**
163 * 根据taskid查询任务
164 */
165 @Test
166 public void testQueryTaskByID(){
167 Task task = Configuration.getProcessEngine()
168 .getTaskService()
169 .getTask("60002");
170
171 System.out.println(task.getId());
172 System.out.println("执行人:" + task.getAssignee());
173 System.out.println("当前执行任务的名称:" + task.getName());
174 System.out.println("任务创建时间:" + task.getCreateTime());
175
176 }
177
178 /**
179 * 查询已经完成的所有任务
180 */
181 @Test
182 public void testQueryAllHistTask(){
183 List<HistoryTask> historyTaskLisTasks = Configuration.getProcessEngine()
184 .getHistoryService()
185 .createHistoryTaskQuery()
186 //.executionId("") 可以根据 executionid查询已经完成的任务
187 //.assignee("") 可以根据执行人进行查询
188 .state("completed") //根据状态进行查询
189 .list();
190
191 for(HistoryTask historyTask : historyTaskLisTasks){
192 System.out.println(historyTask.getId());
193 System.out.println(historyTask.getEndTime());
194 }
195 }
196
197 /**
198 * 直接结束实例
199 */
200 @Test
201 public void testEndPI(){
202 Configuration.getProcessEngine().getExecutionService()
203 .endProcessInstance("qingjia.30001", "error");
204 }
205 }
流程实例,码迷,mamicode.com