Files
2026-08-14 16:42:12 +05:00

2.3 KiB
Raw Permalink Blame History

Исправление NullPointerException в ReportGenerationService

Проблема

Ошибка: Cannot invoke "java.time.LocalDateTime.toLocalDate()" because "end" is null

Причина

В методах generate() и simpleGenerate() класса ReportGenerationService код пытался вызвать end.toLocalDate() без проверки на null, когда поле endDate в ReportGenerateRequest было null.

Исправления

1. Добавлены значения по умолчанию для дат

// Устанавливаем значения по умолчанию, если даты не указаны
if (start == null) {
    start = LocalDateTime.now().minusDays(30); // 30 дней назад
}
if (end == null) {
    end = LocalDateTime.now(); // сейчас
}

2. Исправлены вызовы format() в buildDocx и buildPdf

// Было:
req.getStartDate().format(dt), req.getEndDate().format(dt)

// Стало:
req.getStartDate() != null ? req.getStartDate().format(dt) : "не указано",
req.getEndDate() != null ? req.getEndDate().format(dt) : "не указано"

3. Упрощено создание имени файла

// Было:
String dateSuffix = end != null ? end.toLocalDate().toString() : "unknown_date";

// Стало:
String dateSuffix = end.toLocalDate().toString(); // end теперь всегда не null

Затронутые методы

  • generate(ReportGenerateRequest req)
  • simpleGenerate(ReportGenerateRequest req)
  • buildDocx(ReportGenerateRequest req, List<MarketItem> items, Sections sections)
  • buildPdf(ReportGenerateRequest req, List<MarketItem> items, Sections sections)

Результат

  • Устранена ошибка NullPointerException
  • Добавлена обработка случаев, когда даты не указаны
  • Установлены разумные значения по умолчанию (последние 30 дней)
  • Сохранена обратная совместимость

Тестирование

После исправлений асинхронная генерация отчётов должна работать корректно даже при отсутствии дат в запросе.