public boolean isLeader(String uuid, List<ScheduleStrategyRunntime> factoryList) {
   long no = Long.parseLong(uuid.substring(uuid.lastIndexOf("$") + 1));
   for (ScheduleStrategyRunntime server : factoryList) {
     if (no > Long.parseLong(server.getUuid().substring(server.getUuid().lastIndexOf("$") + 1))) {
       return false;
     }
   }
   return true;
 }
 public void reRunScheduleServer() throws Exception {
   for (ScheduleStrategyRunntime run :
       this.scheduleStrategyManager.loadAllScheduleStrategyRunntimeByUUID(this.uuid)) {
     AtomicInteger num = this.pauseTaskType.get(run.getTaskType());
     if (num != null && num.get() > 0) { // 暂停状态
       num.set(run.getRequestNum());
     } else { // 是运行状态
       int count = 1;
       for (TBScheduleManager manager : this.managerMap.values()) {
         if (manager.getScheduleServer().getTaskType().equals(run.getTaskType())) {
           if (count > run.getRequestNum()) { // 多了,删除调度器
             this.unregister(manager);
             manager.stopScheduleServer();
           } else {
             count = count + 1;
           }
         }
       }
       // 不足,增加调度器
       for (int i = count; i <= run.getRequestNum(); i++) {
         String baseTaskType = TBScheduleManager.splitBaseTaskTypeFromTaskType(run.getTaskType());
         if (this.scheduleDataManager.loadTaskTypeBaseInfo(baseTaskType) == null) {
           String message = "不能识别的任务名称:" + baseTaskType;
           this.scheduleStrategyManager.updateStrategyRunntimeErrorMessage(
               run.getTaskType(), this.uuid, message);
           logger.error(message);
           continue;
         }
         this.createTBScheduleManager(
             baseTaskType, TBScheduleManager.splitOwnsignFromTaskType(run.getTaskType()));
       }
     }
   }
 }
  /**
   * 根据策略重新分配调度任务的机器
   *
   * @throws Exception
   */
  public void assignScheduleServer() throws Exception {
    for (ScheduleStrategyRunntime run :
        this.scheduleStrategyManager.loadAllScheduleStrategyRunntimeByUUID(this.uuid)) {
      List<ScheduleStrategyRunntime> factoryList =
          this.scheduleStrategyManager.loadAllScheduleStrategyRunntimeByTaskType(run.getTaskType());
      if (factoryList.size() == 0 || this.isLeader(this.uuid, factoryList) == false) {
        continue;
      }
      ScheduleStrategy scheduleStrategy =
          this.scheduleStrategyManager.loadStrategy(run.getTaskType());

      int[] nums = new int[factoryList.size()];
      if (scheduleStrategy.getNumOfSingleServer() > 0) {
        int count = 0;
        for (int i = 0; i < factoryList.size(); i++) {
          if (scheduleStrategy.getAssignNum() - count > scheduleStrategy.getNumOfSingleServer()) {
            nums[i] = scheduleStrategy.getNumOfSingleServer();
          } else {
            nums[i] = scheduleStrategy.getAssignNum() - count;
          }
          count = count + nums[i];
        }
      } else {
        int numOfSingle = scheduleStrategy.getAssignNum() / factoryList.size();
        int otherNum = scheduleStrategy.getAssignNum() % factoryList.size();
        for (int i = 0; i < factoryList.size(); i++) {
          if (i < otherNum) {
            nums[i] = numOfSingle + 1;
          } else {
            nums[i] = numOfSingle;
          }
        }
      }

      for (int i = 0; i < factoryList.size(); i++) {
        ScheduleStrategyRunntime factory = factoryList.get(i);
        // 更新请求的服务器数量
        this.scheduleStrategyManager.updateStrategyRunntimeReqestNum(
            run.getTaskType(), factory.getUuid(), nums[i]);
      }
    }
  }