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