/*
   * 自动创建每日一练。
   * @see com.examw.test.service.library.IExercisesDailyService#autoDailyPapers()
   */
  @Override
  public void addAutoDailyPapers() {
    if (logger.isDebugEnabled()) logger.debug("自动创建每日一练...");
    List<Subject> subjects =
        this.subjectDao.findSubjects(
            new SubjectInfo() {
              private static final long serialVersionUID = 1L;

              @Override
              public String getSort() {
                return "code";
              }

              @Override
              public String getOrder() {
                return "desc";
              }
            });
    if (subjects == null || subjects.size() == 0) return;
    for (final Subject subject : subjects) {
      if (subject == null) continue;
      try {
        if (logger.isDebugEnabled())
          logger.debug(String.format("准备开始创建科目[%1$s,%2$s]", subject.getId(), subject.getName()));
        long total =
            this.itemDao.total(
                new ItemInfo() {
                  private static final long serialVersionUID = 1L;

                  @Override
                  public String getSubjectId() {
                    return subject.getId();
                  }

                  @Override
                  public String getAreaId() {
                    if (subject.getAreas() != null && subject.getAreas().size() > 0) {
                      StringBuilder builder = new StringBuilder();
                      for (Area area : subject.getAreas()) {
                        if (area == null) continue;
                        builder.append(",").append(area.getId());
                      }
                      if (builder.length() > 0) return builder.substring(1);
                    }
                    return null;
                  }
                });
        if (total
            < ((this.avgStructureItemsCount == null || this.avgStructureItemsCount < 0)
                ? avg_structure_items_count
                : this.avgStructureItemsCount)) {
          if (logger.isDebugEnabled())
            logger.debug(
                String.format(
                    "科目[%1$s,%2$s]下试题量[%3$d]太小!", subject.getId(), subject.getName(), total));
          continue;
        }
        this.addPaper(subject);
      } catch (Exception e) {
        logger.error(
            String.format(
                "创建科目[%1$s,%2$s]每日一练时,发生异常:%3$s",
                subject.getId(), subject.getName(), e.getMessage()),
            e);
        e.printStackTrace();
      }
    }
  }