@Test
public void reject() {
   String processInstanceId="";
   String message="项目的金额款项结算不正确";
   Task task = taskService.createTaskQuery()
         .taskAssignee("admin") //当前登录用户的id
         .processInstanceId(processInstanceId)
         .singleResult();
   ActivityInstance tree = runtimeService.getActivityInstance(processInstanceId);
   List<HistoricActivityInstance> resultList = historyService
         .createHistoricActivityInstanceQuery()
         .processInstanceId(processInstanceId)
         .activityType("userTask")
         .finished()
         .orderByHistoricActivityInstanceEndTime()
         .asc()
         .list();
   //得到第一个任务节点的id
   HistoricActivityInstance historicActivityInstance = resultList.get(0);
   String toActId = historicActivityInstance.getActivityId();
   String assignee = historicActivityInstance.getAssignee();
   //设置流程中的可变参数
   Map<String, Object> taskVariable = new HashMap<>(2);
   taskVariable.put("user", assignee);
   taskVariable.put("formName", "项目建设");
   taskService.createComment(task.getId(), processInstanceId, "驳回原因:" + message);
   runtimeService.createProcessInstanceModification(processInstanceId)
         .cancelActivityInstance(getInstanceIdForActivity(tree, task.getTaskDefinitionKey()))//关闭相关任务
         .setAnnotation("进行了驳回到第一个任务节点操作")
         .startBeforeActivity(toActId)//启动目标活动节点
         .setVariables(taskVariable)//流程的可变参数赋值
         .execute();
}
private String getInstanceIdForActivity(ActivityInstance activityInstance, String activityId) {
   ActivityInstance instance = getChildInstanceForActivity(activityInstance, activityId);
   if (instance != null) {
      return instance.getId();
   }
   return null;
}
private ActivityInstance getChildInstanceForActivity(ActivityInstance activityInstance, String activityId) {
   if (activityId.equals(activityInstance.getActivityId())) {
      return activityInstance;
   }
   for (ActivityInstance childInstance : activityInstance.getChildActivityInstances()) {
      ActivityInstance instance = getChildInstanceForActivity(childInstance, activityId);
      if (instance != null) {
         return instance;
      }
   }
   return null;
}