Files
marketing-parser/NULL_POINTER_FIX.md
T
2025-10-05 03:10:38 +05:00

63 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Исправление NullPointerException в ReportGenerationService
## Проблема
Ошибка: `Cannot invoke "java.time.LocalDateTime.toLocalDate()" because "end" is null`
## Причина
В методах `generate()` и `simpleGenerate()` класса `ReportGenerationService` код пытался вызвать `end.toLocalDate()` без проверки на null, когда поле `endDate` в `ReportGenerateRequest` было null.
## Исправления
### 1. Добавлены значения по умолчанию для дат
```java
// Устанавливаем значения по умолчанию, если даты не указаны
if (start == null) {
start = LocalDateTime.now().minusDays(30); // 30 дней назад
}
if (end == null) {
end = LocalDateTime.now(); // сейчас
}
```
### 2. Исправлены вызовы format() в buildDocx и buildPdf
```java
// Было:
req.getStartDate().format(dt), req.getEndDate().format(dt)
// Стало:
req.getStartDate() != null ? req.getStartDate().format(dt) : "не указано",
req.getEndDate() != null ? req.getEndDate().format(dt) : "не указано"
```
### 3. Упрощено создание имени файла
```java
// Было:
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 дней)
- ✅ Сохранена обратная совместимость
## Тестирование
После исправлений асинхронная генерация отчётов должна работать корректно даже при отсутствии дат в запросе.