docs: private void addRepeatJob(JobPo jobPo) throws DupEntryException {
  
          if (appContext.getCronJobQueue().getJob(jobPo.getTaskTrackerNodeGroup(), jobPo.getTaskId()) != null) {
              //  这种情况是 由cron 任务变为了 repeat 任务
              throw new DupEntryException();
          }
  
          // 1.add to repeat job queue
          appContext.getRepeatJobQueue().add(jobPo);
  
          if (JobUtils.isRelyOnPrevCycle(jobPo)) {
              // 没有正在执行, 则添加
              if (appContext.getExecutingJobQueue().getJob(jobPo.getTaskTrackerNodeGroup(), jobPo.getTaskId()) == null) {
                  // 2. add to executable queue
                  try {
                      jobPo.setRepeatedCount(1); //第一次job的repeatedCount为1
                      jobPo.setInternalExtParam(Constants.EXE_SEQ_ID, JobUtils.generateExeSeqId(jobPo));
                      appContext.getExecutableJobQueue().add(jobPo);
                  } catch (DupEntryException e) {
                      appContext.getRepeatJobQueue().remove(jobPo.getJobId());
                      throw e;
                  }
              }
          } else {
              // 对于不需要依赖上一周期的,采取批量生成的方式
              appContext.getNonRelyOnPrevCycleJobScheduler().addScheduleJobForOneHour(jobPo);
          }
      }