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 942819b4..1b375bf4 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 @@ -8,6 +8,7 @@ import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.records.InteractionLogR 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; @@ -15,10 +16,13 @@ public class JournalDtoMapper { public static JournalDto mapToJournalDto(JournalFileInfo journalFileInfo, JournalFileInfo.JournalFileDetails journalFileDetails) { + ZonedDateTime zonedDateTime = DateUtils.changeTimeZoneKeepingInstant( + journalFileDetails.getDepartureDateTime(), journalFileDetails.getTimeZone()); SenderInfo senderInfo = journalFileInfo.getSenderInfo(); 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(), @@ -32,9 +36,11 @@ public class JournalDtoMapper { } public static JournalDto mapToJournalDto(InteractionLogRecord record) { + ZonedDateTime zonedDateTime = DateUtils.changeTimeZoneKeepingInstant( + record.getSentDate().toInstant().atZone(ZoneOffset.UTC), record.getZoneOffset()); return new JournalDto() - .setDepartureDateTime( - parseDateTime(record.getSentDate().toInstant().atZone(ZoneOffset.UTC), record.getZoneOffset())) + .setDepartureDateTime(DateUtils.formatWithBracketsTimezone(zonedDateTime)) + .setDepartureInstant(zonedDateTime.toInstant()) .setFileName(record.getFileName()) .setFilePatternCode(Integer.valueOf(record.getForm())) .setSenderFio(record.getSender()) @@ -44,14 +50,4 @@ public class JournalDtoMapper { .setRowsError(0) .setFileId(record.getFileId()); } - - private static String parseDateTime(ZonedDateTime dateTime, String timeZone) { - if (timeZone == null) { - timeZone = "+00:00"; - } - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); - ZoneOffset offset = ZoneOffset.of(timeZone); - ZonedDateTime zonedDateTime = dateTime.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 2404b8b2..1a18127b 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,25 @@ 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(ZonedDateTime dateTime, String timeZone) { + if (timeZone == null) { + timeZone = "+00:00"; + } + + ZoneOffset offset = ZoneOffset.of(timeZone); + return dateTime.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);