From a134a96b27067e888acca239ced68cb4177edb05 Mon Sep 17 00:00:00 2001 From: "adel.ka" Date: Sat, 1 Nov 2025 12:36:59 +0300 Subject: [PATCH] SUPPORT-9528: sort fix --- .../ru/micord/ervu/journal/JournalDto.java | 12 +++++++ .../ervu/journal/mapper/JournalDtoMapper.java | 32 +++++++++---------- .../JournalInMemoryStaticGridLoadService.java | 3 +- .../java/ru/micord/ervu/util/DateUtils.java | 16 ++++++++++ 4 files changed, 45 insertions(+), 18 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/journal/JournalDto.java b/backend/src/main/java/ru/micord/ervu/journal/JournalDto.java index cbc23a70..90f374b8 100644 --- a/backend/src/main/java/ru/micord/ervu/journal/JournalDto.java +++ b/backend/src/main/java/ru/micord/ervu/journal/JournalDto.java @@ -1,10 +1,13 @@ package ru.micord.ervu.journal; +import java.time.Instant; + public class JournalDto { private Integer documentNumber; private String fileId; private String departureDateTime; + private Instant departureInstant; private String fileName; private Integer filePatternCode; private String senderFio; @@ -24,6 +27,15 @@ public class JournalDto { return this; } + public Instant getDepartureInstant() { + return departureInstant; + } + + public JournalDto setDepartureInstant(Instant departureInstant) { + this.departureInstant = departureInstant; + return this; + } + public String getFileId() { return fileId; } diff --git a/backend/src/main/java/ru/micord/ervu/journal/mapper/JournalDtoMapper.java b/backend/src/main/java/ru/micord/ervu/journal/mapper/JournalDtoMapper.java index f23b7fb4..c7e0d3ed 100644 --- a/backend/src/main/java/ru/micord/ervu/journal/mapper/JournalDtoMapper.java +++ b/backend/src/main/java/ru/micord/ervu/journal/mapper/JournalDtoMapper.java @@ -1,14 +1,12 @@ package ru.micord.ervu.journal.mapper; -import java.time.LocalDateTime; -import java.time.ZoneOffset; import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.records.InteractionLogRecord; import ru.micord.ervu.journal.JournalDto; import ru.micord.ervu.journal.JournalFileInfo; import ru.micord.ervu.journal.SenderInfo; +import ru.micord.ervu.util.DateUtils; import static ru.micord.ervu.util.StringUtils.convertToFio; @@ -17,9 +15,15 @@ public class JournalDtoMapper { public static JournalDto mapToJournalDto(JournalFileInfo journalFileInfo, JournalFileInfo.JournalFileDetails journalFileDetails) { SenderInfo senderInfo = journalFileInfo.getSenderInfo(); + ZonedDateTime zonedDateTime = DateUtils.changeTimeZoneKeepingInstant( + journalFileDetails.getDepartureDateTime(), + journalFileDetails.getTimeZone() + ); + return new JournalDto() .setFileId(journalFileDetails.getFileId()) - .setDepartureDateTime(parseDateTime(journalFileDetails.getDepartureDateTime(), journalFileDetails.getTimeZone())) + .setDepartureDateTime(DateUtils.formatWithBracketsTimezone(zonedDateTime)) + .setDepartureInstant(zonedDateTime.toInstant()) .setFileName(journalFileDetails.getFileName()) .setFilePatternCode(journalFileDetails.getFilePatternCode()) .setSenderFio(convertToFio(senderInfo.getFirstName(), senderInfo.getMiddleName(), @@ -33,9 +37,14 @@ public class JournalDtoMapper { } public static JournalDto mapToJournalDto(InteractionLogRecord record) { + ZonedDateTime zonedDateTime = DateUtils.changeTimeZoneKeepingInstant( + record.getSentDate().toLocalDateTime(), + record.getOffset() + ); + return new JournalDto() - .setDepartureDateTime( - parseDateTime(record.getSentDate().toLocalDateTime(), record.getOffset())) + .setDepartureDateTime(DateUtils.formatWithBracketsTimezone(zonedDateTime)) + .setDepartureInstant(zonedDateTime.toInstant()) .setFileName(record.getFileName()) .setFilePatternCode(Integer.valueOf(record.getForm())) .setSenderFio(record.getSender()) @@ -45,15 +54,4 @@ public class JournalDtoMapper { .setRowsError(0) .setFileId(record.getFileId()); } - - private static String parseDateTime(LocalDateTime dateTime, String timeZone) { - if (timeZone == null) { - timeZone = "+00:00"; - } - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); - ZonedDateTime utcZoned = dateTime.atZone(ZoneOffset.UTC); - ZoneOffset offset = ZoneOffset.of(timeZone); - ZonedDateTime zonedDateTime = utcZoned.withZoneSameInstant(offset); - return zonedDateTime.format(formatter) + " (" + timeZone + ")"; - } } diff --git a/backend/src/main/java/ru/micord/ervu/service/grid/impl/JournalInMemoryStaticGridLoadService.java b/backend/src/main/java/ru/micord/ervu/service/grid/impl/JournalInMemoryStaticGridLoadService.java index 18edee51..43405951 100644 --- a/backend/src/main/java/ru/micord/ervu/service/grid/impl/JournalInMemoryStaticGridLoadService.java +++ b/backend/src/main/java/ru/micord/ervu/service/grid/impl/JournalInMemoryStaticGridLoadService.java @@ -1,5 +1,6 @@ package ru.micord.ervu.service.grid.impl; +import java.time.LocalDateTime; import java.util.Arrays; import java.util.Comparator; import java.util.List; @@ -85,7 +86,7 @@ public class JournalInMemoryStaticGridLoadService implements HashSet seenFileIds = new HashSet<>(); return Stream.concat(dbJournalList.stream(), ervuJournalList.stream()) .filter(journal -> seenFileIds.add(journal.getFileId())) - .sorted(Comparator.comparing(JournalDto::getDepartureDateTime).reversed()) + .sorted(Comparator.comparing(JournalDto::getDepartureInstant).reversed()) .map(journal -> journal .setDocumentNumber(counter.getAndIncrement()) diff --git a/backend/src/main/java/ru/micord/ervu/util/DateUtils.java b/backend/src/main/java/ru/micord/ervu/util/DateUtils.java index c954a1dc..435e4476 100644 --- a/backend/src/main/java/ru/micord/ervu/util/DateUtils.java +++ b/backend/src/main/java/ru/micord/ervu/util/DateUtils.java @@ -17,10 +17,26 @@ public final class DateUtils { private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); private static final DateTimeFormatter DATE_TIME_WITH_TIMEZONE_FORMATTER = DateTimeFormatter.ofPattern( "yyyy-MM-dd'T'HH:mm:ss.SSSX"); + private static final DateTimeFormatter DATE_TIME_WITH_TIMEZONE_IN_BRACKETS = DateTimeFormatter.ofPattern( + "dd.MM.yyyy HH:mm:ss (XXX)"); private DateUtils() { } + public static ZonedDateTime changeTimeZoneKeepingInstant(LocalDateTime dateTime, String timeZone) { + if (timeZone == null) { + timeZone = "+00:00"; + } + + ZonedDateTime utcZoned = dateTime.atZone(ZoneOffset.UTC); + ZoneOffset offset = ZoneOffset.of(timeZone); + return utcZoned.withZoneSameInstant(offset); + } + + public static String formatWithBracketsTimezone(ZonedDateTime zonedDateTime) { + return zonedDateTime.format(DATE_TIME_WITH_TIMEZONE_IN_BRACKETS); + } + public static String getCurrentFormattedDateTimeWithZone(){ ZonedDateTime now = ZonedDateTime.now(); return now.format(DATE_TIME_WITH_TIMEZONE_FORMATTER);