This commit is contained in:
root
2025-10-05 03:10:38 +05:00
parent 9c37f7b6cf
commit c24e17380a
2 changed files with 86 additions and 5 deletions
+62
View File
@@ -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 дней)
- ✅ Сохранена обратная совместимость
## Тестирование
После исправлений асинхронная генерация отчётов должна работать корректно даже при отсутствии дат в запросе.