* 测试转办和还回操作,转办和还回操作需成对出现,转办后,任务会到选择的人待办中,并且只有还回按钮使流程回到转办人
*/
@Deployment(resources = { "com/founder/fix/fixflow/test/engine/api/task/TaskServiceNewTest.bpmn"})
public void testPendingAndResolved(){
//创建一个通用命令
ExpandTaskCommand expandTaskCommand = new ExpandTaskCommand();
//设置流程名
expandTaskCommand.setProcessDefinitionKey("TaskServiceNewTest");
//设置流程的业务关联键
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 的这个流程实例的当前独占任务
TaskInstance taskInstance = taskQuery.taskAssignee("1200119390").processInstanceId(processInstanceId).taskNotEnd().list().get(0);
//暂停任务后,验证任务为暂停状态
assertEquals(taskInstance.getNodeId(),"UserTask_2");
//创建通用命令
ExpandTaskCommand expandTaskCommandPending=new ExpandTaskCommand();
//设置命令为转办任务
expandTaskCommandPending.setCommandType("pending");
//设置命令按钮的iD,与节点上处理命令设置一致
expandTaskCommandPending.setUserCommandId("HandleCommand_11");
Map<String,Object> paramsMap = new HashMap<String,Object>();
//设置转办的用户号
paramsMap.put("pendingUserId", "13223212313");
expandTaskCommandPending.setParamMap(paramsMap);
//设置命令的处理任务号
expandTaskCommandPending.setTaskId(taskInstance.getId());
//执行这个转办的命令
taskService.expandTaskComplete(expandTaskCommandPending, null);
//重置任务查询
taskQuery = taskService.createTaskQuery();
// 查找 13223212313 的这个流程实例的当前独占任务
taskInstance = taskQuery.taskAssignee("13223212313").processInstanceId(processInstanceId).taskNotEnd().list().get(0);
//转办操作后,转办接收人的待办中存在这条任务
assertNotNull(taskInstance);
//查询是否有还回命令
List<TaskCommandInst> taskCommandInsts=taskService.GetTaskCommandByTaskInstance(taskInstance,false);
boolean isHaveResolvedCommand = false;
//循环查找是否有还回命令
for(TaskCommandInst taskCommandInst:taskCommandInsts){
if("resolved".equals(taskCommandInst.getTaskCommandType())){
isHaveResolvedCommand = true;
break;
}
}
//验证存在还回命令
assertEquals(isHaveResolvedCommand,true);
//创建通用命令
ExpandTaskCommand expandTaskCommandResolved=new ExpandTaskCommand();
//设置命令为还回任务
expandTaskCommandResolved.setCommandType("resolved");
//设置命令按钮的iD,与节点上处理命令设置一致
expandTaskCommandResolved.setUserCommandId("HandleCommand_12");
//设置命令的处理任务号
expandTaskCommandResolved.setTaskId(taskInstance.getId());
//执行这个还回任务的命令
taskService.expandTaskComplete(expandTaskCommandResolved, null);
//重置任务查询
taskQuery = taskService.createTaskQuery();
// 查找 1200119390 的这个流程实例的当前独占任务