.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# Исправление 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 дней)
|
||||
- ✅ Сохранена обратная совместимость
|
||||
|
||||
## Тестирование
|
||||
|
||||
После исправлений асинхронная генерация отчётов должна работать корректно даже при отсутствии дат в запросе.
|
||||
Reference in New Issue
Block a user