コード例 #1
0
  @Override
  public void generateIvrAndSmsStatisticReportsFromDate(LocalDate startDate) {
    List<CallDetailRecord> callDetailRecords = new ArrayList<>();

    if (startDate == null) {
      callDetailRecords =
          callDetailRecordDataService.findByCallStatus(
              EbodacConstants.IVR_CALL_DETAIL_RECORD_STATUS_INITIATED);
    } else {
      LocalDate now = DateUtil.now().toLocalDate();

      for (LocalDate date = startDate; date.isBefore(now); date = date.plusDays(1)) {
        String dateString = SIMPLE_DATE_FORMATTER.print(date);
        callDetailRecords.addAll(
            callDetailRecordDataService.findByMotechTimestampAndCallStatus(
                dateString, EbodacConstants.IVR_CALL_DETAIL_RECORD_STATUS_INITIATED));
      }
    }

    Config config = configService.getConfig();
    Set<String> reportsToUpdate = config.getIvrAndSmsStatisticReportsToUpdate();
    config.setIvrAndSmsStatisticReportsToUpdate(null);
    configService.updateConfig(config);

    if (startDate != null && !reportsToUpdate.isEmpty()) {
      callDetailRecords.addAll(callDetailRecordDataService.findByMotechCallIds(reportsToUpdate));
    }

    for (CallDetailRecord callDetailRecord : callDetailRecords) {
      try {
        createIvrAndSmsStatisticReport(callDetailRecord);
        reportsToUpdate.remove(callDetailRecord.getMotechCallId());
      } catch (EbodacReportException e) {
        LOGGER.warn(e.getMessage());
      }
    }

    config = configService.getConfig();
    reportsToUpdate.addAll(config.getIvrAndSmsStatisticReportsToUpdate());
    config.setIvrAndSmsStatisticReportsToUpdate(reportsToUpdate);
    configService.updateConfig(config);
  }