From 54d2183b457b62ada01cd78797973082f50fd484 Mon Sep 17 00:00:00 2001 From: akulikov Date: Thu, 7 Sep 2023 13:57:13 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-497 zone id fix --- .../NTCRNotificationBuilder.java | 3 +- .../notifications/NotificationBuilder.java | 5 +++ .../ROOT_ACTV_NotificationBuilder.java | 3 +- .../ROOT_BLKD_NotificationBuilder.java | 3 +- .../ROOT_SSPD_NotificationBuilder.java | 3 +- .../RRPCNotificationBuilder.java | 3 +- .../reports/reports/CSVReportBuilder.java | 23 +++++++------ .../converter/InstantDateTimeDConverter.java | 34 ------------------- .../bp/ExecutedDealReportBuilderCommon.java | 4 +-- .../ks/KSCommissionTradesReportBuilder.java | 19 ++++++----- .../ks/KSRepCashNettoReportBuilder.java | 4 +-- .../KSRepCashRegisterSumsReportBuilder.java | 3 +- .../ks/KSRepDepoNettoReportBuilder.java | 4 +-- ...epDepoRegisterQuantitiesReportBuilder.java | 3 +- .../reports/ks/KSRepTradesReportBuilder.java | 6 ++-- .../ks/KSSessionListReportBuilder.java | 6 ++-- .../spcex/clearing/reports/util/TimeUtil.java | 14 -------- 17 files changed, 41 insertions(+), 99 deletions(-) delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/converter/InstantDateTimeDConverter.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/util/TimeUtil.java diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NTCRNotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NTCRNotificationBuilder.java index 71aa51e9b..8b79e1cf0 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NTCRNotificationBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NTCRNotificationBuilder.java @@ -8,7 +8,6 @@ import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.util.TimeUtil; import ru.spcex.platform.enumeration.CompanySymbol; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -65,7 +64,7 @@ public class NTCRNotificationBuilder extends NotificationBuilder { Map valuesForTemplate = new HashMap<>(); - valuesForTemplate.put("${createdAt}", dateFormatter.format(createdAt.atZone(TimeUtil.getReportTimeZone()).toLocalDate())); + valuesForTemplate.put("${createdAt}", dateFormatter.format(createdAt.atZone(getNotificationZoneId()).toLocalDate())); valuesForTemplate.put("${date}", LocalDate.now().format(dateFormatterYYMMDD)); valuesForTemplate.put("${TCRCode}", getNotNull(tradingClearingRegistry.getCode())); valuesForTemplate.put("${companyFullName}", getNotNull(company.getFullName())); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NotificationBuilder.java index 9683f31f7..e1ac4bb34 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NotificationBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NotificationBuilder.java @@ -9,6 +9,7 @@ import ru.spcex.platform.imdg.api.Imdg; import java.io.File; import java.net.URL; import java.time.LocalDate; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.TextStyle; import java.util.Collection; @@ -37,6 +38,10 @@ public abstract class NotificationBuilder { return buildNotification(consumerId); } + protected ZoneId getNotificationZoneId() { + return ZoneId.of("Europe/Moscow"); + } + protected void fillHeaderValues(Map valuesMap, Long notificationId) { LocalDate notificationDate = LocalDate.now(); int day = notificationDate.getDayOfMonth(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_ACTV_NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_ACTV_NotificationBuilder.java index 4e78da5b1..1c92bfe86 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_ACTV_NotificationBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_ACTV_NotificationBuilder.java @@ -9,7 +9,6 @@ import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.company.relation.Relation; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.util.TimeUtil; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -77,7 +76,7 @@ public class ROOT_ACTV_NotificationBuilder extends NotificationBuilder { valuesForTemplate.put("${companyFullName}", company.getFullName()); valuesForTemplate.put("${companySymbolsINN}", companySymbols.getCompanySymbolValue()); valuesForTemplate.put("${companyClearingCode}", companyClearingCode); - valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(TimeUtil.getReportTimeZone()).toLocalDate())); + valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(getNotificationZoneId()).toLocalDate())); String outputFilename = "ROOT.ACTV.%s.%s.docx".formatted(companyClearingCode, filenameDateTimeFormatter.format(LocalDateTime.now())); outputFilename = normalizeFilenameForOS(outputFilename); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_BLKD_NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_BLKD_NotificationBuilder.java index 948a9e45c..8259bda50 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_BLKD_NotificationBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_BLKD_NotificationBuilder.java @@ -9,7 +9,6 @@ import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.company.relation.Relation; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.util.TimeUtil; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -77,7 +76,7 @@ public class ROOT_BLKD_NotificationBuilder extends NotificationBuilder { valuesForTemplate.put("${companyFullName}", company.getFullName()); valuesForTemplate.put("${companySymbolsINN}", companySymbols.getCompanySymbolValue()); valuesForTemplate.put("${companyClearingCode}", companyClearingCode); - valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(TimeUtil.getReportTimeZone()).toLocalDate())); + valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(getNotificationZoneId()).toLocalDate())); String outputFilename = "ROOT.BLKD.%s.%s.docx".formatted(companyClearingCode, filenameDateTimeFormatter.format(LocalDateTime.now())); outputFilename = normalizeFilenameForOS(outputFilename); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_SSPD_NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_SSPD_NotificationBuilder.java index 67992fbe6..28807f29c 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_SSPD_NotificationBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_SSPD_NotificationBuilder.java @@ -9,7 +9,6 @@ import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.company.relation.Relation; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.util.TimeUtil; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -77,7 +76,7 @@ public class ROOT_SSPD_NotificationBuilder extends NotificationBuilder { valuesForTemplate.put("${companyFullName}", company.getFullName()); valuesForTemplate.put("${companySymbolsINN}", companySymbols.getCompanySymbolValue()); valuesForTemplate.put("${companyClearingCode}", companyClearingCode); - valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(TimeUtil.getReportTimeZone()).toLocalDate())); + valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(getNotificationZoneId()).toLocalDate())); String outputFilename = "ROOT.SSPD.%s.%s.docx".formatted(companyClearingCode, filenameDateTimeFormatter.format(LocalDateTime.now())); outputFilename = normalizeFilenameForOS(outputFilename); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/RRPCNotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/RRPCNotificationBuilder.java index c482a37c3..3622a661f 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/RRPCNotificationBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/RRPCNotificationBuilder.java @@ -9,7 +9,6 @@ import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.company.relation.Relation; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.util.TimeUtil; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -75,7 +74,7 @@ public class RRPCNotificationBuilder extends NotificationBuilder { Map valuesForTemplate = new HashMap<>(); fillHeaderValues(valuesForTemplate, notificationId); - valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(TimeUtil.getReportTimeZone()).toLocalDate())); + valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(getNotificationZoneId()).toLocalDate())); valuesForTemplate.put("${companyFullName}", company.getFullName()); valuesForTemplate.put("${companyShortName}", company.getShortName()); valuesForTemplate.put("${companySymbolsINN}", companySymbols.getCompanySymbolValue()); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java index cb927b5bc..a43d3b8c3 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java @@ -23,6 +23,7 @@ import java.lang.reflect.Field; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -43,6 +44,13 @@ public abstract class CSVReportBuilder { */ protected abstract List getRows(); + /** + * Временной пояс для отчета + */ + protected ZoneId getReportZoneId() { + return ZoneId.of("Europe/Moscow"); + } + /** * Название отчета, используется для формирования имени отчета (без указания формата) * @@ -79,7 +87,7 @@ public abstract class CSVReportBuilder { /** * Формирование отчета на основе параметров * - * @param params Параметры формирования отчета + * @param params Параметры формирования отчета */ protected abstract void collect(P params); @@ -88,7 +96,7 @@ public abstract class CSVReportBuilder { * * @param file Файл отчета * @return Созданный CSVWriter - * + *

* todo check it */ protected ICSVWriter createCsvWriter(File file) throws IOException { @@ -153,20 +161,13 @@ public abstract class CSVReportBuilder { } static class CustomStrategy extends ColumnPositionMappingStrategy { - @Override public String[] generateHeader(T bean) throws CsvRequiredFieldEmptyException { super.generateHeader(bean); String[] headers = new String[this.getFieldMap().values().size()]; for (BeanField field : this.getFieldMap().values()) { CsvBindByPosition positionAnnotation = field.getField().getAnnotation(CsvBindByPosition.class); - CsvCustomBindByPosition positionAnnotation2 = field.getField().getAnnotation(CsvCustomBindByPosition.class); CsvBindByName nameAnnotation = field.getField().getAnnotation(CsvBindByName.class); - if (positionAnnotation != null) { - headers[positionAnnotation.position()] = nameAnnotation.column(); - } - if (positionAnnotation2 != null) { - headers[positionAnnotation2.position()] = nameAnnotation.column(); - } + headers[positionAnnotation.position()] = nameAnnotation.column(); } return headers; } @@ -190,7 +191,7 @@ public abstract class CSVReportBuilder { formatValue, writeFormat); } - return csvConverter; + return csvConverter; } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/converter/InstantDateTimeDConverter.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/converter/InstantDateTimeDConverter.java deleted file mode 100644 index 20b337e80..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/converter/InstantDateTimeDConverter.java +++ /dev/null @@ -1,34 +0,0 @@ -package ru.spcex.clearing.reports.reports.bean.converter; - -import com.opencsv.bean.AbstractBeanField; -import com.opencsv.exceptions.CsvConstraintViolationException; -import com.opencsv.exceptions.CsvDataTypeMismatchException; -import com.opencsv.exceptions.CsvRequiredFieldEmptyException; -import ru.spcex.clearing.reports.util.TimeUtil; - -import java.time.Instant; -import java.time.format.DateTimeFormatter; -import java.util.Locale; - -/** - * see @CsvCustomBindByPosition(position = 5, converter = LocalTimeConverter.class) - * see @CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss") - * dd.MM.yyyy'T'HH:mm:ss - */ -public class InstantDateTimeDConverter extends AbstractBeanField { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss") - .withLocale(Locale.getDefault()) - .withZone(TimeUtil.getReportTimeZone()); - - @Override - protected Object convert(String s) throws CsvDataTypeMismatchException, CsvConstraintViolationException { - Instant parse = Instant.from(formatter.parse(s)); // not tested - return parse; - } - - @Override - protected String convertToWrite(Object value) throws CsvDataTypeMismatchException, CsvRequiredFieldEmptyException { - if (value == null) return ""; - return formatter.format((Instant) value); - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java index 884cbd0f5..d7d7650cb 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java @@ -7,7 +7,6 @@ import ru.clearing.classes.statics.data.misc.Session; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.bean.ExecutedDealReport; -import ru.spcex.clearing.reports.util.TimeUtil; import ru.spcex.platform.enumeration.ReportBuilderType; import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; @@ -15,7 +14,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; @@ -80,7 +78,7 @@ public abstract class ExecutedDealReportBuilderCommon

extends CSVReportBuilde executedDealReport.setTradeDate(executionFond.getTradingDate()); if (executionFond.getExchangeExecutionTime() != null) - executedDealReport.setTradeTime(LocalDateTime.ofInstant(executionFond.getExchangeExecutionTime(), TimeUtil.getReportTimeZone())); + executedDealReport.setTradeTime(LocalDateTime.ofInstant(executionFond.getExchangeExecutionTime(), getReportZoneId())); executedDealReport.setSettleDate(executionFond.getSettlementDate()); executedDealReport.setSettleCode(executionFond.getSettlementCode()); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSCommissionTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSCommissionTradesReportBuilder.java index 314e58bd8..9fbfe63f5 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSCommissionTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSCommissionTradesReportBuilder.java @@ -158,19 +158,20 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder