63 lines
2.3 KiB
Markdown
63 lines
2.3 KiB
Markdown
# Исправление 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 дней)
|
||
- ✅ Сохранена обратная совместимость
|
||
|
||
## Тестирование
|
||
|
||
После исправлений асинхронная генерация отчётов должна работать корректно даже при отсутствии дат в запросе.
|