SUPPORT-9528: sort fix

This commit is contained in:
adel.ka 2025-11-01 12:36:59 +03:00
parent b96010133f
commit a134a96b27
4 changed files with 45 additions and 18 deletions

View file

@ -1,10 +1,13 @@
package ru.micord.ervu.journal; package ru.micord.ervu.journal;
import java.time.Instant;
public class JournalDto { public class JournalDto {
private Integer documentNumber; private Integer documentNumber;
private String fileId; private String fileId;
private String departureDateTime; private String departureDateTime;
private Instant departureInstant;
private String fileName; private String fileName;
private Integer filePatternCode; private Integer filePatternCode;
private String senderFio; private String senderFio;
@ -24,6 +27,15 @@ public class JournalDto {
return this; return this;
} }
public Instant getDepartureInstant() {
return departureInstant;
}
public JournalDto setDepartureInstant(Instant departureInstant) {
this.departureInstant = departureInstant;
return this;
}
public String getFileId() { public String getFileId() {
return fileId; return fileId;
} }

View file

@ -1,14 +1,12 @@
package ru.micord.ervu.journal.mapper; package ru.micord.ervu.journal.mapper;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.records.InteractionLogRecord; import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.records.InteractionLogRecord;
import ru.micord.ervu.journal.JournalDto; import ru.micord.ervu.journal.JournalDto;
import ru.micord.ervu.journal.JournalFileInfo; import ru.micord.ervu.journal.JournalFileInfo;
import ru.micord.ervu.journal.SenderInfo; import ru.micord.ervu.journal.SenderInfo;
import ru.micord.ervu.util.DateUtils;
import static ru.micord.ervu.util.StringUtils.convertToFio; import static ru.micord.ervu.util.StringUtils.convertToFio;
@ -17,9 +15,15 @@ public class JournalDtoMapper {
public static JournalDto mapToJournalDto(JournalFileInfo journalFileInfo, public static JournalDto mapToJournalDto(JournalFileInfo journalFileInfo,
JournalFileInfo.JournalFileDetails journalFileDetails) { JournalFileInfo.JournalFileDetails journalFileDetails) {
SenderInfo senderInfo = journalFileInfo.getSenderInfo(); SenderInfo senderInfo = journalFileInfo.getSenderInfo();
ZonedDateTime zonedDateTime = DateUtils.changeTimeZoneKeepingInstant(
journalFileDetails.getDepartureDateTime(),
journalFileDetails.getTimeZone()
);
return new JournalDto() return new JournalDto()
.setFileId(journalFileDetails.getFileId()) .setFileId(journalFileDetails.getFileId())
.setDepartureDateTime(parseDateTime(journalFileDetails.getDepartureDateTime(), journalFileDetails.getTimeZone())) .setDepartureDateTime(DateUtils.formatWithBracketsTimezone(zonedDateTime))
.setDepartureInstant(zonedDateTime.toInstant())
.setFileName(journalFileDetails.getFileName()) .setFileName(journalFileDetails.getFileName())
.setFilePatternCode(journalFileDetails.getFilePatternCode()) .setFilePatternCode(journalFileDetails.getFilePatternCode())
.setSenderFio(convertToFio(senderInfo.getFirstName(), senderInfo.getMiddleName(), .setSenderFio(convertToFio(senderInfo.getFirstName(), senderInfo.getMiddleName(),
@ -33,9 +37,14 @@ public class JournalDtoMapper {
} }
public static JournalDto mapToJournalDto(InteractionLogRecord record) { public static JournalDto mapToJournalDto(InteractionLogRecord record) {
ZonedDateTime zonedDateTime = DateUtils.changeTimeZoneKeepingInstant(
record.getSentDate().toLocalDateTime(),
record.getOffset()
);
return new JournalDto() return new JournalDto()
.setDepartureDateTime( .setDepartureDateTime(DateUtils.formatWithBracketsTimezone(zonedDateTime))
parseDateTime(record.getSentDate().toLocalDateTime(), record.getOffset())) .setDepartureInstant(zonedDateTime.toInstant())
.setFileName(record.getFileName()) .setFileName(record.getFileName())
.setFilePatternCode(Integer.valueOf(record.getForm())) .setFilePatternCode(Integer.valueOf(record.getForm()))
.setSenderFio(record.getSender()) .setSenderFio(record.getSender())
@ -45,15 +54,4 @@ public class JournalDtoMapper {
.setRowsError(0) .setRowsError(0)
.setFileId(record.getFileId()); .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 + ")";
}
} }

View file

@ -1,5 +1,6 @@
package ru.micord.ervu.service.grid.impl; package ru.micord.ervu.service.grid.impl;
import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
@ -85,7 +86,7 @@ public class JournalInMemoryStaticGridLoadService implements
HashSet<String> seenFileIds = new HashSet<>(); HashSet<String> seenFileIds = new HashSet<>();
return Stream.concat(dbJournalList.stream(), ervuJournalList.stream()) return Stream.concat(dbJournalList.stream(), ervuJournalList.stream())
.filter(journal -> seenFileIds.add(journal.getFileId())) .filter(journal -> seenFileIds.add(journal.getFileId()))
.sorted(Comparator.comparing(JournalDto::getDepartureDateTime).reversed()) .sorted(Comparator.comparing(JournalDto::getDepartureInstant).reversed())
.map(journal -> .map(journal ->
journal journal
.setDocumentNumber(counter.getAndIncrement()) .setDocumentNumber(counter.getAndIncrement())

View file

@ -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_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");
private static final DateTimeFormatter DATE_TIME_WITH_TIMEZONE_FORMATTER = DateTimeFormatter.ofPattern( private static final DateTimeFormatter DATE_TIME_WITH_TIMEZONE_FORMATTER = DateTimeFormatter.ofPattern(
"yyyy-MM-dd'T'HH:mm:ss.SSSX"); "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() { 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(){ public static String getCurrentFormattedDateTimeWithZone(){
ZonedDateTime now = ZonedDateTime.now(); ZonedDateTime now = ZonedDateTime.now();
return now.format(DATE_TIME_WITH_TIMEZONE_FORMATTER); return now.format(DATE_TIME_WITH_TIMEZONE_FORMATTER);