/**
  * @param businessKey
  * @return
  */
 @Override
 public List<ProcessInstance> queryProcessInstancesSuspendedByBusinessKey(String businessKey) {
   ProcessInstanceQuery query =
       runtimeService
           .createProcessInstanceQuery()
           .processInstanceBusinessKey(businessKey)
           .suspended()
           .orderByProcessInstanceId()
           .desc();
   List<ProcessInstance> list = query.listPage(0, 100);
   return list;
 }
  /**
   * @param tasks
   * @return
   */
  public List<TaskVo> buildTaskVos(List<Task> tasks) {
    List<TaskVo> taskRtn = new ArrayList<>();

    if (null != tasks && !tasks.isEmpty()) {
      // 根据流程的业务ID查询实体并关联
      for (Task task : tasks) {

        String processInstanceId = task.getProcessInstanceId();
        ProcessInstance processInstance =
            runtimeService
                .createProcessInstanceQuery()
                .processInstanceId(processInstanceId)
                .active()
                .singleResult();
        String businessName = (String) task.getTaskLocalVariables().get(WebConstants.BUSINESS_NAME);
        String taskId = task.getId();
        String businessKey = processInstance.getBusinessKey();

        if (StringUtils.isBlank(businessKey)) {
          continue;
        }
        if (StringUtils.isBlank(businessName)) {
          businessName = getBusinessName(taskId, businessKey);
        }

        ProcessDefinition processDefinition =
            getProcessDefinition(processInstance.getProcessDefinitionId());
        int version = processDefinition.getVersion();
        String taskName = task.getName();
        String createTime =
            DateUtils.SINGLETONE.format(task.getCreateTime(), DateUtils.YYYY_MM_DD_HH_MM_SS);
        String assignee = task.getAssignee();
        boolean suspended = task.isSuspended();

        String processDefinitionId = processInstance.getProcessDefinitionId();

        TaskVo taskInfo = new TaskVo();
        taskInfo.setProcessInstanceId(processInstanceId);
        taskInfo.setBusinessKey(businessKey);
        taskInfo.setProcessDefinitionId(processDefinitionId);
        taskInfo.setId(taskId);
        taskInfo.setName(taskName);
        taskInfo.setCreateTime(createTime);
        taskInfo.setAssignee(assignee);
        taskInfo.setSuspended(suspended);
        taskInfo.setVersion(version);
        taskInfo.setBusinessName(businessName);
        taskRtn.add(taskInfo);
      }
    }
    return taskRtn;
  }
 /**
  * @param businessKey
  * @return
  */
 @Override
 public List<ProcessInstance> queryProcessInstancesActiveByBusinessKey(
     String businessKey, String processDefinitionKey) {
   ProcessInstanceQuery query =
       runtimeService
           .createProcessInstanceQuery()
           .processInstanceBusinessKey(businessKey, processDefinitionKey)
           .active()
           .orderByProcessInstanceId()
           .desc();
   List<ProcessInstance> list = query.listPage(0, 100);
   return list;
 }
 @Override
 public ProcessInstance startProcessInstanceByBussKey(String businessKey, String businessName) {
   return runtimeService.startProcessInstanceById(businessKey);
 }
 /** @param processInstanceId */
 public void suspendProcessInstanceById(String processInstanceId) {
   runtimeService.suspendProcessInstanceById(processInstanceId);
 }