* 测试任务的各种查询,任务查询中,除了(共享,独占)和(类别)分别为or关系,其他查询之间均为and关系,taskQuery每次查询都会保存一个条件,所以需要时注意重置查询
*/
@Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/task/TaskServiceTest.bpmn"})
public void testTaskQuery(){
TaskQuery taskQuery = taskService.createTaskQuery();
List<TaskInstance> taskInstances = taskQuery.taskAssignee("1200119390").processDefinitionKey("Process_TaskServiceTest").taskNotEnd().list();
for(int i = 0;i<50;i++){
//创建一个通用命令
ExpandTaskCommand expandTaskCommand = new ExpandTaskCommand();
//设置流程名
expandTaskCommand.setProcessDefinitionKey("Process_TaskServiceTest");
//设置流程的业务关联键
expandTaskCommand.setBusinessKey("BK_testStartProcessInstanceByKey");
//命令类型,可以从流程引擎配置中查询 启动并提交为startandsubmit
expandTaskCommand.setCommandType("startandsubmit");
//设置提交人
expandTaskCommand.setInitiator("1200119390");
//设置命令的id,需和节点上配置的按钮编号对应,会执行按钮中的脚本。
expandTaskCommand.setUserCommandId("HandleCommand_2");
Map<String, Object> mapVariables = new HashMap<String, Object>();
//设置变量,流程线条上用到,amount<300时走独占任务,否则都共享任务
int amount = 280+i;
mapVariables.put("amount", amount);
expandTaskCommand.setTransientVariables(mapVariables);
//执行这个启动并提交的命令,返回启动的流程实例
ProcessInstance processInstance = (ProcessInstance)taskService.expandTaskComplete(expandTaskCommand, null);
String processInstanceId = processInstance.getId();
//验证是否成功启动
assertNotNull(processInstanceId);
}
taskQuery = taskService.createTaskQuery();
// 查找 1200119390 的这个流程实例的当前独占任务
taskInstances = taskQuery.taskAssignee("1200119390").processDefinitionKey("Process_TaskServiceTest").taskNotEnd().list();
//验证独占任务为20
assertEquals(20, taskInstances.size());
//重置任务查询
taskQuery = taskService.createTaskQuery();
//取得此流程,此用户的共享任务
List<TaskInstance> taskInstancesCandidate = taskQuery.taskCandidateUser("1200119390").processDefinitionKey("Process_TaskServiceTest").taskNotEnd().list();
//验证共享任务为30
assertEquals(30, taskInstancesCandidate.size());
//重置任务查询
taskQuery = taskService.createTaskQuery();
//查询 1200119390 的这个流程定义的共享和独占任务(此流程的待办事项)
List<TaskInstance> taskAssigneeAndCandidate = taskQuery.taskCandidateUser("1200119390").taskAssignee("1200119390").processDefinitionKey("Process_TaskServiceTest").taskNotEnd().list();
//验证共享和独占任务的总和为50
assertEquals(50, taskAssigneeAndCandidate.size());
//重置任务查询
taskQuery = taskService.createTaskQuery();
//查询1200119390 的这个流程定义的已办任务
List<TaskInstance> taskEnd = taskQuery.processDefinitionKey("Process_TaskServiceTest").taskAssignee("1200119390").taskIsEnd().addTaskType(TaskInstanceType.FIXFLOWTASK).list();
//验证已办任务是否为50
assertEquals(50, taskEnd.size());
//取得第一条任务
TaskInstance taskInstance = taskEnd.get(0);
//验证任务中的流程定义名称不为空
assertNotNull(taskInstance.getProcessDefinitionName());
//测试分页 取1-9条
taskEnd = taskQuery.listPage(1, 9);
//验证取到9条任务
assertEquals(9, taskEnd.size());
//重置任务查询
taskQuery = taskService.createTaskQuery();
//获取流程定义名称等于TaskServiceTest的任务实例
long count = taskQuery.processDefinitionName("TaskServiceTest").count();
//验证是否为150个
assertEquals(150, count);
//重置任务查询
taskQuery = taskService.createTaskQuery();
//获取流程定义名称likeTaskServiceTest的人物实例
count = taskQuery.processDefinitionNameLike("TaskServiceTest").count();
//验证是否为150个
assertEquals(150, count);
}