* 测试接收任务和释放任务,TaskServiceCandidateTest流程中的任务分配类型为共享模式
*/
@Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/task/TaskServiceCandidateTest.bpmn"})
public void testClaim(){
//创建一个通用命令
ExpandTaskCommand expandTaskCommand = new ExpandTaskCommand();
//设置流程名
expandTaskCommand.setProcessDefinitionKey("TaskServiceCandidateTest");
//设置流程的业务关联键
expandTaskCommand.setBusinessKey("BK_testStartProcessInstanceByKey");
//命令类型,可以从流程引擎配置中查询 启动并提交为startandsubmit
expandTaskCommand.setCommandType("startandsubmit");
//设置提交人
expandTaskCommand.setInitiator("1200119390");
//设置命令的id,需和节点上配置的按钮编号对应,会执行按钮中的脚本。
expandTaskCommand.setUserCommandId("HandleCommand_2");
//执行这个启动并提交的命令,返回启动的流程实例
ProcessInstance processInstance = (ProcessInstance)taskService.expandTaskComplete(expandTaskCommand, null);
String processInstanceId = processInstance.getId();
//验证是否成功启动
assertNotNull(processInstanceId);
// 创建任务查询
TaskQuery taskQuery = taskService.createTaskQuery();
// 查找 1200119390 的这个流程实例的当前独占任务
List<TaskInstance> taskInstances = taskQuery.taskAssignee("1200119390").processInstanceId(processInstanceId).taskNotEnd().list();
//未领任务前 独占任务应该为0
assertEquals(taskInstances.size(), 0);
//获取1200119390的本流程实例的共享任务
taskInstances = taskQuery.taskCandidateUser("1200119390").processInstanceId(processInstanceId).taskNotEnd().list();
//验证此时的共享任务为1
assertEquals(taskInstances.size(), 1);
//获取当前任务节点
TaskInstance taskInstance = taskInstances.get(0);
//创建通用命令
ExpandTaskCommand expandTaskCommandClaim=new ExpandTaskCommand();
//设置命令为领取任务
expandTaskCommandClaim.setCommandType("claim");
//设置命令的ID,需和节点上配置的按钮编号对应,会执行其中脚本
expandTaskCommandClaim.setUserCommandId("HandleCommand_3");
//设置命令的处理任务号
expandTaskCommandClaim.setTaskId(taskInstance.getId());
//领取任务
taskService.expandTaskComplete(expandTaskCommandClaim, null);
//重置任务查询 查询共享
taskQuery = taskService.createTaskQuery();
// 查找 1200119390 的这个流程实例的当前共享任务
taskInstances = taskQuery.taskCandidateUser("1200119390").processInstanceId(processInstanceId).taskNotEnd().list();
//领取任务后,共享任务数为0
assertEquals(taskInstances.size(), 0);
//重置任务查询 查询独占
taskQuery = taskService.createTaskQuery();
// 查找 1200119390 的这个流程实例的当前独占任务
taskInstances = taskQuery.taskAssignee("1200119390").processInstanceId(processInstanceId).taskNotEnd().list();
//领取任务后,独占任务数为1
assertEquals(taskInstances.size(), 1);
//取得当前任务
taskInstance = taskInstances.get(0);
//取得任务所在节点
String nodeId = taskInstance.getNodeId();
//验证当前任务是否在第二个节点
assertEquals(nodeId, "UserTask_4");
//创建通用命令
ExpandTaskCommand expandTaskCommandRelease=new ExpandTaskCommand();
//设置命令为释放任务
expandTaskCommandRelease.setCommandType("releaseTask");
//设置命令的id,需和节点上配置的按钮编号对应,会执行按钮中的脚本。
expandTaskCommandRelease.setUserCommandId("HandleCommand_4");
//设置命令的处理任务号
expandTaskCommandRelease.setTaskId(taskInstance.getId());
//领取任务
taskService.expandTaskComplete(expandTaskCommandRelease, null);
//重置任务查询 查询独占
taskQuery = taskService.createTaskQuery();