reports-service http://jira.mfd.msk:8088/browse/CLS-497 поправил временные зоны

This commit is contained in:
AKurakin 2023-09-07 13:05:49 +03:00
parent 796f247fec
commit 37885e9879
15 changed files with 81 additions and 28 deletions

View file

@ -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<String, String> 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()));

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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<String, String> 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());

View file

@ -159,8 +159,14 @@ public abstract class CSVReportBuilder<P, R> {
String[] headers = new String[this.getFieldMap().values().size()];
for (BeanField<T, Integer> 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;
}

View file

@ -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);
}
}

View file

@ -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<P> 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());

View file

@ -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<SessionIdParam
ksRepCashNettoReport.setSessionId(registry.getSessionId());
if (session != null && session.getCreated() != null)
ksRepCashNettoReport.setSessionDate(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault()));
ksRepCashNettoReport.setSessionDate(LocalDateTime.ofInstant(session.getCreated(), TimeUtil.getReportTimeZone()));
ksRepCashNettoReport.setAccount(registry.getAccount());
ksRepCashNettoReport.setDate(nowDate);

View file

@ -8,6 +8,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.EmptyParams;
import ru.spcex.clearing.reports.reports.bean.KSRepCashRegisterSumsReport;
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;
@ -19,7 +20,6 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collection;
@ -123,7 +123,7 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
ksRepCashRegisterSumsReport.setTkr(registry.getTradingClearingRegistry());
ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode());
ksRepCashRegisterSumsReport.setAddDate(nowDate);
ksRepCashRegisterSumsReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), ZoneId.systemDefault()));
ksRepCashRegisterSumsReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), TimeUtil.getReportTimeZone()));
InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection());
if (inOutDirection == InOutDirection.in) {

View file

@ -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.KSRepDepoNettoReport;
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;
@ -134,7 +135,7 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
Session session = sessionImdg.getSingleObjectByID(registry.getSessionId());
if (session != null && session.getCreated() != null)
ksRepDepoNettoReport.setSessionDate(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault()));
ksRepDepoNettoReport.setSessionDate(LocalDateTime.ofInstant(session.getCreated(), TimeUtil.getReportTimeZone()));
BigDecimal tstBalance = BigDecimal.ZERO;
BigDecimal ostBalance = BigDecimal.ZERO;

View file

@ -12,6 +12,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.EmptyParams;
import ru.spcex.clearing.reports.reports.bean.KSRepDepoRegisterQuantitiesReport;
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;
@ -23,7 +24,6 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collection;
@ -145,7 +145,7 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
ksRepDepoRegisterQuantitiesReport.setSecurityId(security.getSecuritySymbol());
ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode());
ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate);
ksRepDepoRegisterQuantitiesReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), ZoneId.systemDefault()));
ksRepDepoRegisterQuantitiesReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), TimeUtil.getReportTimeZone()));
InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection());
if (inOutDirection == InOutDirection.in) {

View file

@ -13,6 +13,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.EmptyParams;
import ru.spcex.clearing.reports.reports.bean.KSRepTradesReport;
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;
@ -121,7 +122,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
if (execution.getSessionId() != null) {
Session session = sessionImdg.getSingleObjectByID(execution.getSessionId());
if (session != null && session.getCreated() != null)
ksRepTradesReport.setSessionDate(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault()));
ksRepTradesReport.setSessionDate(LocalDateTime.ofInstant(session.getCreated(), TimeUtil.getReportTimeZone()));
} else {
log.info("Execution id = {} was skipped: session_id is null", execution.getId());
continue;
@ -141,7 +142,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
ksRepTradesReport.setClassCode(execution.getMarket());
if (execution.getExchangeExecutionTime() != null)
ksRepTradesReport.setTradeDate(LocalDateTime.ofInstant(execution.getExchangeExecutionTime(), ZoneId.systemDefault()));
ksRepTradesReport.setTradeDate(LocalDateTime.ofInstant(execution.getExchangeExecutionTime(), TimeUtil.getReportTimeZone()));
String status = "0";
if (execution.getCoverageStatus() != null) {

View file

@ -6,6 +6,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.EmptyParams;
import ru.spcex.clearing.reports.reports.bean.KSSessionListReport;
import ru.spcex.clearing.reports.util.TimeUtil;
import ru.spcex.platform.enumeration.ReportBuilderType;
import ru.spcex.platform.enumeration.ReportKeys;
import ru.spcex.platform.imdg.api.Imdg;
@ -63,9 +64,9 @@ public class KSSessionListReportBuilder extends CSVReportBuilder<EmptyParams, KS
KSSessionListReport ksSessionListReport = new KSSessionListReport();
ksSessionListReport.setId(session.getId());
if (session.getCreated() != null)
ksSessionListReport.setCreatedAt(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault()));
ksSessionListReport.setCreatedAt(LocalDateTime.ofInstant(session.getCreated(), TimeUtil.getReportTimeZone()));
if (session.getUpdated() != null)
ksSessionListReport.setUpdatedAt(LocalDateTime.ofInstant(session.getUpdated(), ZoneId.systemDefault()));
ksSessionListReport.setUpdatedAt(LocalDateTime.ofInstant(session.getUpdated(), TimeUtil.getReportTimeZone()));
ksSessionListReport.setSection(session.getSection());
ksSessionListReport.setSessionType(session.getSessionType());
ksSessionListReport.setWorkflowStatus(session.getWorkflowStatus());

View file

@ -0,0 +1,14 @@
package ru.spcex.clearing.reports.util;
import java.time.ZoneId;
import java.util.Locale;
public class TimeUtil {
public static Locale getLocale() {
return Locale.getDefault();
}
public static ZoneId getReportTimeZone() {
return ZoneId.of("Europe/Moscow"); // В Петербурге используется часовой пояс Europe/Moscow UTC+3
}
}