From 37885e9879c4f155624db53a2cd0bfe316c30dc4 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 7 Sep 2023 13:05:49 +0300 Subject: [PATCH] =?UTF-8?q?reports-service=20http://jira.mfd.msk:8088/brow?= =?UTF-8?q?se/CLS-497=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=BE=D0=BD=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NTCRNotificationBuilder.java | 4 +-- .../ROOT_ACTV_NotificationBuilder.java | 6 ++-- .../ROOT_BLKD_NotificationBuilder.java | 6 ++-- .../ROOT_SSPD_NotificationBuilder.java | 5 ++- .../RRPCNotificationBuilder.java | 5 ++- .../reports/reports/CSVReportBuilder.java | 8 ++++- .../converter/InstantDateTimeDConverter.java | 34 +++++++++++++++++++ .../bp/ExecutedDealReportBuilderCommon.java | 3 +- .../ks/KSRepCashNettoReportBuilder.java | 3 +- .../KSRepCashRegisterSumsReportBuilder.java | 4 +-- .../ks/KSRepDepoNettoReportBuilder.java | 3 +- ...epDepoRegisterQuantitiesReportBuilder.java | 4 +-- .../reports/ks/KSRepTradesReportBuilder.java | 5 +-- .../ks/KSSessionListReportBuilder.java | 5 +-- .../spcex/clearing/reports/util/TimeUtil.java | 14 ++++++++ 15 files changed, 81 insertions(+), 28 deletions(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/converter/InstantDateTimeDConverter.java create 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 d79ec8cab..71aa51e9b 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,6 +8,7 @@ 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; @@ -16,7 +17,6 @@ import java.io.File; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZoneId; import java.util.HashMap; import java.util.Map; @@ -65,7 +65,7 @@ public class NTCRNotificationBuilder extends NotificationBuilder { Map valuesForTemplate = new HashMap<>(); - valuesForTemplate.put("${createdAt}", dateFormatter.format(createdAt.atZone(ZoneId.systemDefault()).toLocalDate())); + valuesForTemplate.put("${createdAt}", dateFormatter.format(createdAt.atZone(TimeUtil.getReportTimeZone()).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/ROOT_ACTV_NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_ACTV_NotificationBuilder.java index b09813c5d..4e78da5b1 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,15 +9,13 @@ 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; import java.io.File; import java.time.Instant; -import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.format.TextStyle; import java.util.*; @Component @@ -79,7 +77,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(ZoneId.systemDefault()).toLocalDate())); + valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(TimeUtil.getReportTimeZone()).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 f16848526..948a9e45c 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,15 +9,13 @@ 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; import java.io.File; import java.time.Instant; -import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.format.TextStyle; import java.util.*; @Component @@ -79,7 +77,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(ZoneId.systemDefault()).toLocalDate())); + valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(TimeUtil.getReportTimeZone()).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 eb009a49b..67992fbe6 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,14 +9,13 @@ 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; import java.io.File; import java.time.Instant; import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.format.TextStyle; import java.util.*; @Component @@ -78,7 +77,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(ZoneId.systemDefault()).toLocalDate())); + valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(TimeUtil.getReportTimeZone()).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 797d6cbfb..c482a37c3 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,14 +9,13 @@ 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; import java.io.File; import java.time.Instant; import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.format.TextStyle; import java.util.*; @Component @@ -76,7 +75,7 @@ public class RRPCNotificationBuilder extends NotificationBuilder { Map valuesForTemplate = new HashMap<>(); fillHeaderValues(valuesForTemplate, notificationId); - valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(ZoneId.systemDefault()).toLocalDate())); + valuesForTemplate.put("${relationUpdatedAt}", dateFormatter.format(updatedAt.atZone(TimeUtil.getReportTimeZone()).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 c74f48f5a..cb927b5bc 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 @@ -159,8 +159,14 @@ public abstract class CSVReportBuilder { 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); - headers[positionAnnotation.position()] = nameAnnotation.column(); + if (positionAnnotation != null) { + headers[positionAnnotation.position()] = nameAnnotation.column(); + } + if (positionAnnotation2 != null) { + headers[positionAnnotation2.position()] = nameAnnotation.column(); + } } return headers; } 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 new file mode 100644 index 000000000..20b337e80 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/converter/InstantDateTimeDConverter.java @@ -0,0 +1,34 @@ +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 7ae648cbd..884cbd0f5 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,6 +7,7 @@ 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; @@ -79,7 +80,7 @@ public abstract class ExecutedDealReportBuilderCommon

extends CSVReportBuilde executedDealReport.setTradeDate(executionFond.getTradingDate()); if (executionFond.getExchangeExecutionTime() != null) - executedDealReport.setTradeTime(LocalDateTime.ofInstant(executionFond.getExchangeExecutionTime(), ZoneId.systemDefault())); + executedDealReport.setTradeTime(LocalDateTime.ofInstant(executionFond.getExchangeExecutionTime(), TimeUtil.getReportTimeZone())); executedDealReport.setSettleDate(executionFond.getSettlementDate()); executedDealReport.setSettleCode(executionFond.getSettlementCode()); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java index 9615a5ea1..4f60cb19f 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java @@ -8,6 +8,7 @@ import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.PairRegistryId; import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.clearing.reports.reports.bean.KSRepCashNettoReport; +import ru.spcex.clearing.reports.util.TimeUtil; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -135,7 +136,7 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder