From 94ab971af184d8d2110b8d01bfda0b94806e9971 Mon Sep 17 00:00:00 2001 From: akulikov Date: Tue, 16 May 2023 21:26:24 +0300 Subject: [PATCH] some fixes and tests --- clearing-parent/reports-service/pom.xml | 10 + .../reports/config/BeanConfiguration.java | 6 + .../element/ReportsServiceSettings.java | 16 +- .../reports/reports/CSVReportBuilder.java | 13 +- .../reports/reports/ReportWithPeriod.java | 6 +- .../bp/LiabilitiesClaimsReportBuilder.java | 13 +- ...ationalLiabilitiesClaimsReportBuilder.java | 6 +- .../reports/reports/bt/bt_13/ReportDOCIN.java | 7 +- .../reports/bt/bt_13/ReportDOCOUT.java | 7 +- .../reports/bt/bt_16_5/ReportINACCNT.java | 7 +- .../reports/services/ReportService.java | 17 +- .../src/main/resources/application.properties | 21 +- .../clearing/reports/config/TestConfig.java | 17 + .../reports/services/ReportServiceTest.java | 429 ++++++++++++++++++ ...perational_liabilities_claims_expected.csv | 3 + .../ru/spcex/clearing/test/TestUtils.java | 4 + .../domain/cud/reports/ReportRequest.java | 2 +- .../cud/reports/ReportRequestWithPeriod.java | 4 +- .../reports/ReportRequestWithSessionId.java | 2 +- .../ReportRequestWithSessionIdList.java | 2 +- 20 files changed, 525 insertions(+), 67 deletions(-) create mode 100644 clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/config/TestConfig.java create mode 100644 clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java create mode 100644 clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv diff --git a/clearing-parent/reports-service/pom.xml b/clearing-parent/reports-service/pom.xml index cfc872733..a5e83d1ba 100644 --- a/clearing-parent/reports-service/pom.xml +++ b/clearing-parent/reports-service/pom.xml @@ -101,6 +101,16 @@ ru.spcex.clearing clearing-validation + + ru.spcex.clearing + test-clearing + test + + + org.springframework.boot + spring-boot-test + test + diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java index da06a010e..c0730ce66 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java @@ -7,6 +7,7 @@ import org.springframework.context.annotation.Scope; import ru.spcex.clearing.reports.errors.ReportError; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.IMDGMessageResolver; +import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.platform.enumeration.UserRole; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IMessageResolver; @@ -24,4 +25,9 @@ public class BeanConfiguration { return new UserRoleVerification(imdgProvider, messageResolver, UserRole.Admin, ReportError.UserVerifyDenial); } + @Bean + @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public RequestHelper requestHelper(IMessageResolver messageResolver) { + return new RequestHelper(messageResolver, ReportError.InternalError); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java index 8352482f0..c8d0d3ad3 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java @@ -18,7 +18,7 @@ import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; public class ReportsServiceSettings { private HazelcastClientParams hazelcast; private KafkaConsumerSettings kafkaConsumer; -// private KafkaProducerSettings kafkaProducer; + private KafkaProducerSettings kafkaProducer; private String reportModuleOut; public HazelcastClientParams getHazelcast() { @@ -37,13 +37,13 @@ public class ReportsServiceSettings { this.kafkaConsumer = kafkaConsumer; } -// public KafkaProducerSettings getKafkaProducer() { -// return kafkaProducer; -// } -// -// public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { -// this.kafkaProducer = kafkaProducer; -// } + public KafkaProducerSettings getKafkaProducer() { + return kafkaProducer; + } + + public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { + this.kafkaProducer = kafkaProducer; + } public String getReportModuleOut() { return reportModuleOut; 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 92f57089d..3570a0744 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 @@ -36,7 +36,7 @@ public abstract class CSVReportBuilder

{ protected abstract List getLines(); /** - * Название отчета, используется для формирования имени отчета + * Название отчета, используется для формирования имени отчета (без указания формата) * * @param params Параметры формирования отчета */ @@ -67,15 +67,14 @@ public abstract class CSVReportBuilder

{ CSVWriterBuilder csvWriterBuilder = new CSVWriterBuilder(writer) .withLineEnd("\n") .withSeparator(',') - .withQuoteChar('\'') - .withEscapeChar('\"'); + .withQuoteChar('\"'); return csvWriterBuilder.build(); } public File createReport(P params, File outFolder) { assert outFolder != null && outFolder.isDirectory(); - File reportFile = new File(outFolder, normalizeFilenameForOS(getReportFilename(params))); + File reportFile = new File(outFolder, normalizeFilenameForOS(getReportFilename(params) + ".csv")); collect(params); String[] headers = getHeaders(); @@ -85,11 +84,11 @@ public abstract class CSVReportBuilder

{ assert lines != null; try (ICSVWriter csvWriter = createCsvWriter(reportFile)) { - csvWriter.writeNext(headers); + csvWriter.writeNext(headers, false); csvWriter.writeAll(lines, true); } catch (IOException e) { - // todo check it - e.printStackTrace(); + log.error("Can't create report", e); + return null; } return reportFile; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java index f84070ab7..e7e6d7376 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java @@ -2,8 +2,6 @@ package ru.spcex.clearing.reports.reports; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; -import com.thoughtworks.xstream.annotations.XStreamConverter; -import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; import java.time.LocalDate; @@ -15,12 +13,12 @@ public abstract class ReportWithPeriod extends AbstractReport { @XStreamAsAttribute @XStreamAlias("startDate") - @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) +// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) protected LocalDate startDate; @XStreamAsAttribute @XStreamAlias("endDate") - @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) +// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) protected LocalDate endDate; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java index bc60bfb15..8c505c261 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java @@ -18,7 +18,8 @@ import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import java.math.RoundingMode; -import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalTime; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -35,7 +36,7 @@ public abstract class LiabilitiesClaimsReportBuilder

extends CSVReportBuilder protected final Imdg tradingClearingRegistryImdg; protected final String[] headers = { - "id", "doc_date", "doc_time", "doc_type", "clearingHouse", "firmId", "firName", "session_id", + "id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "session_id", "clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId", "tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value", "tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm", "cash_liability", @@ -83,7 +84,9 @@ public abstract class LiabilitiesClaimsReportBuilder

extends CSVReportBuilder Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); String clearingHouse = clearingHouseCompany.getFullName(); - Instant now = Instant.now(); + LocalDate nowDate = LocalDate.now(); + LocalTime nowTime = LocalTime.now(); + lines = new ArrayList<>(executions.size()); for (ExecutionCommon execution : executions) { Company company = companyImdg.getSingleObjectByID(execution.getCompanyId()); @@ -102,8 +105,8 @@ public abstract class LiabilitiesClaimsReportBuilder

extends CSVReportBuilder ); String id = String.valueOf(execution.getId()); - String docDate = dateFormatter.format(now); - String docTime = timeFormatter.format(now); + String docDate = dateFormatter.format(nowDate); + String docTime = timeFormatter.format(nowTime); String docName = "Отчет об обязательствах/требованиях Участника клиринга"; String docType = "KS_FIRMID_LIABILITIES"; String firmId = String.valueOf(execution.getCompanyId()); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java index f90e713cc..7f985a9a5 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java @@ -6,7 +6,7 @@ import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.Collection; import java.util.Map; @@ -31,7 +31,9 @@ public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaims @Override protected String getReportFilename(SessionIdParam params) { - return "operational_liabilities_claims.%s".formatted(Instant.now()); + return "operational_liabilities_claims.%s".formatted( + dateTimeFormatter.format(LocalDateTime.now()) + ); } @Override diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java index 21034018e..c10a38e33 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java @@ -2,11 +2,8 @@ package ru.spcex.clearing.reports.reports.bt.bt_13; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; -import com.thoughtworks.xstream.annotations.XStreamConverter; import ru.spcex.clearing.reports.reports.AbstractReport; import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; -import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter; import java.time.LocalDate; import java.time.LocalDateTime; @@ -22,7 +19,7 @@ public class ReportDOCIN extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("date") - @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) +// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) private final LocalDate date; /** @@ -30,7 +27,7 @@ public class ReportDOCIN extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("time") - @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) +// @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) private final LocalTime time; @XStreamAlias("rows") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java index 587f78796..be4037989 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java @@ -2,11 +2,8 @@ package ru.spcex.clearing.reports.reports.bt.bt_13; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; -import com.thoughtworks.xstream.annotations.XStreamConverter; import ru.spcex.clearing.reports.reports.AbstractReport; import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; -import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter; import java.time.LocalDate; import java.time.LocalDateTime; @@ -22,7 +19,7 @@ public class ReportDOCOUT extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("date") - @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) +// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) private final LocalDate date; /** @@ -30,7 +27,7 @@ public class ReportDOCOUT extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("time") - @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) +// @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) private final LocalTime time; @XStreamAlias("rows") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java index f58b05e20..32d9cad93 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java @@ -2,11 +2,8 @@ package ru.spcex.clearing.reports.reports.bt.bt_16_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; -import com.thoughtworks.xstream.annotations.XStreamConverter; import ru.spcex.clearing.reports.reports.AbstractReport; import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; -import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter; import java.time.LocalDate; import java.time.LocalDateTime; @@ -26,7 +23,7 @@ public class ReportINACCNT extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("date") - @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) +// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) private final LocalDate date; /** @@ -34,7 +31,7 @@ public class ReportINACCNT extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("time") - @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) +// @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) private final LocalTime time; @XStreamAlias("rows") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java index 4fd644a5d..084c20422 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java @@ -18,11 +18,10 @@ import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.reports.config.element.ReportsServiceSettings; import ru.spcex.clearing.reports.reports.*; import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.platform.enumeration.ReportType; -import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IEnumKey; -import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.validation.IValidator; import java.io.File; @@ -32,10 +31,9 @@ import java.util.function.Function; @Service public class ReportService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); - private final ImdgProvider imdgProvider; - private final IMessageResolver messageResolver; private final UserRoleVerification userRoleVerification; private final ValidationHelper validationHelper; + private final RequestHelper requestHelper; private final Function reportRequestValidator; private final Function reportRequestWithSessionIdValidator; private final Function reportRequestWithSessionIdListValidator; @@ -49,10 +47,9 @@ public class ReportService extends QueueConsumer implements InitializingBean { public ReportService(Consumer kafkaQueue, Producer kafkaResponseQueue, - ImdgProvider imdgProvider, - IMessageResolver messageResolver, UserRoleVerification userRoleVerification, ValidationHelper validationHelper, + RequestHelper requestHelper, ReportsServiceSettings reportsServiceSettings, @Qualifier("reportBuildersWithoutParams") Map> reportBuildersWithoutParams, @@ -71,10 +68,9 @@ public class ReportService extends QueueConsumer implements InitializingBean { @Qualifier("reportRequestWithPeriodValidator") Function reportRequestWithPeriodValidator) { super(kafkaQueue, kafkaResponseQueue); - this.imdgProvider = imdgProvider; - this.messageResolver = messageResolver; this.userRoleVerification = userRoleVerification; this.validationHelper = validationHelper; + this.requestHelper = requestHelper; this.reportRequestValidator = reportRequestValidator; this.reportRequestWithSessionIdValidator = reportRequestWithSessionIdValidator; this.reportRequestWithSessionIdListValidator = reportRequestWithSessionIdListValidator; @@ -97,10 +93,11 @@ public class ReportService extends QueueConsumer implements InitializingBean { .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, callbacks::put); callback(ReportRequestWithSessionIdList.class) .setFunction(this::createReportForSessionIdList) - .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, callbacks::put); + .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID_LIST, callbacks::put); callback(ReportRequestWithPeriod.class) .setFunction(this::createReportForPeriod) .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_PERIOD, callbacks::put); + init(); } public RequestInfoUpdate createReport(BaseRequest userRequest) { @@ -118,6 +115,8 @@ public class ReportService extends QueueConsumer implements InitializingBean { IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) ); File outFile = builder.createReport(new EmptyParams(), outFolder); + if (outFile == null) { + } log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath()); return null; diff --git a/clearing-parent/reports-service/src/main/resources/application.properties b/clearing-parent/reports-service/src/main/resources/application.properties index ed2aa2053..fdf19a25d 100644 --- a/clearing-parent/reports-service/src/main/resources/application.properties +++ b/clearing-parent/reports-service/src/main/resources/application.properties @@ -1,4 +1,6 @@ - +reports-service.hazelcast.cluster-members=127.0.0.1:5701 +reports-service.hazelcast.login=dev +reports-service.hazelcast.password=dev-pass reports-service.kafka-consumer.bootstrap-servers=localhost:9092 reports-service.kafka-consumer.group-id=dev-group-balance-service @@ -8,16 +10,11 @@ reports-service.kafka-consumer.auto-offset-reset=latest reports-service.kafka-consumer.linger-ms=1 reports-service.kafka-consumer.buffer-memory=33554432 -#reports-service.kafka-producer.bootstrap-servers=localhost:9092 -#reports-service.kafka-producer.acks=all -#reports-service.kafka-producer.retries=0 -#reports-service.kafka-producer.batch-size=16384 -#reports-service.kafka-producer.linger-ms=1 -#reports-service.kafka-producer.buffer-memory=33554432 - -reports-service.hazelcast.cluster-members=127.0.0.1:5701 - #,10.200.200.181:5701 -reports-service.hazelcast.login=dev -reports-service.hazelcast.password=dev-pass +reports-service.kafka-producer.bootstrap-servers=localhost:9092 +reports-service.kafka-producer.acks=all +reports-service.kafka-producer.retries=0 +reports-service.kafka-producer.batch-size=16384 +reports-service.kafka-producer.linger-ms=1 +reports-service.kafka-producer.buffer-memory=33554432 reports-service.ReportModuleOut=./report_out diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/config/TestConfig.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/config/TestConfig.java new file mode 100644 index 000000000..4133bd829 --- /dev/null +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/config/TestConfig.java @@ -0,0 +1,17 @@ +package ru.spcex.clearing.reports.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.reports.config.element.ReportsServiceSettings; + +@Configuration +public class TestConfig { + + @Bean + public ReportsServiceSettings reportsServiceSettings() { + ReportsServiceSettings reportsServiceSettings = new ReportsServiceSettings(); + reportsServiceSettings.setReportModuleOut("out"); + return reportsServiceSettings; + } + +} diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java new file mode 100644 index 000000000..48164120b --- /dev/null +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java @@ -0,0 +1,429 @@ +package ru.spcex.clearing.reports.services; + +import com.opencsv.CSVParser; +import com.opencsv.CSVParserBuilder; +import com.opencsv.CSVReader; +import com.opencsv.CSVReaderBuilder; +import com.opencsv.exceptions.CsvValidationException; +import org.apache.commons.io.FileUtils; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.MockProducer; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.execution.ExecutionDeposit; +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; +import ru.clearing.classes.statics.data.misc.Listing; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId; +import ru.spcex.clearing.reports.config.BeanConfiguration; +import ru.spcex.clearing.reports.config.ReportBuildersConfig; +import ru.spcex.clearing.reports.config.TestConfig; +import ru.spcex.clearing.reports.config.validation.ValidationConfig; +import ru.spcex.clearing.test.TestUtils; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.*; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import javax.annotation.PostConstruct; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + BeanConfiguration.class, + ValidationConfig.class, + ReportService.class, + ImdgTestConfig.class, + KafkaTestConfig.class, + ReportBuildersConfig.class, + TestConfig.class +}) +public class ReportServiceTest { + private Imdg executionFondImdg; + private Imdg executionDepositImdg; + private Imdg companyImdg; + private Imdg registryImdg; + private Imdg

listingImdg; + private Imdg fixedIncomeSecurityImdg; + private Imdg tradingClearingRegistryImdg; + + private final ExecutionFond testExecutionFond = new ExecutionFond(); + private final ExecutionDeposit testExecutionDeposit = new ExecutionDeposit(); + + private final Company testCompany_1 = new Company(); + private final Company testCompany_2 = new Company(); + private final Company testCompanyHouse = new Company(); + + private final Registry testRegistryForCompanyId_1 = new Registry(); + private final Registry testRegistryForCompanyId_2 = new Registry(); + + private final Registry tm_tRegistry_1 = new Registry(); + private final Registry om_tRegistry_1 = new Registry(); + private final Registry ts_tRegistry_1 = new Registry(); + private final Registry os_tRegistry_1 = new Registry(); + private final Registry tm_tRegistry_2 = new Registry(); + private final Registry om_tRegistry_2 = new Registry(); + private final Registry ts_tRegistry_2 = new Registry(); + private final Registry os_tRegistry_2 = new Registry(); + + private final Listing testListing_1 = new Listing(); + private final Listing testListing_2 = new Listing(); + + private final FixedIncomeSecurity testFixedIncomeSecurity_1 = new FixedIncomeSecurity(); + private final FixedIncomeSecurity testFixedIncomeSecurity_2 = new FixedIncomeSecurity(); + + private final TradingClearingRegistry testTradingClearingRegistry_1 = new TradingClearingRegistry(); + private final TradingClearingRegistry testTradingClearingRegistry_2 = new TradingClearingRegistry(); + + private static File outFolder; + + @Autowired + private ReportService reportService; + + @Autowired + @Qualifier("hazelcastServiceTest") + private ImdgProvider imdgProvider; + + @Captor + private ArgumentCaptor producerRecord; + + @SpyBean + private MockProducer producer; + + @BeforeAll + public static void createTestFolder() { + outFolder = new File("out"); + outFolder.mkdir(); + } + + @AfterAll + public static void deleteTestFolder() throws IOException { + FileUtils.deleteDirectory(outFolder); + } + + @Test + public void createReportTest_OPERATIONAL_LIABILITIES_CLAIMS() throws InterruptedException, IOException, CsvValidationException { + final Long oldSessionIdDeposit = testExecutionDeposit.getSessionId(); + final Long oldSessionIdFond = testExecutionFond.getSessionId(); + + ReportRequestWithSessionId reportRequestWithSessionId = new ReportRequestWithSessionId(); + reportRequestWithSessionId.setReportId(ReportType.OPERATIONAL_LIABILITIES_CLAIMS.getKey()); + reportRequestWithSessionId.setSessionId(TEST_SESSION_ID_1); + + testExecutionDeposit.setSessionId(TEST_SESSION_ID_1); + testExecutionFond.setSessionId(TEST_SESSION_ID_1); + executionDepositImdg.update(testExecutionDeposit); + executionFondImdg.update(testExecutionFond); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequestWithSessionId, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + 0, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("operational_liabilities_claims_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time")); + + System.out.println("hello"); + + testExecutionDeposit.setSessionId(oldSessionIdDeposit); + testExecutionFond.setSessionId(oldSessionIdFond); + executionDepositImdg.update(testExecutionDeposit); + executionFondImdg.update(testExecutionFond); + + outFile.delete(); + } + + public void compareCSVFiles(File expectedFile, File actualFile, List columnsForSkip) throws IOException, CsvValidationException { + if (columnsForSkip == null) columnsForSkip = Collections.emptyList(); + CSVParser csvParser = new CSVParserBuilder().withSeparator(',').withQuoteChar('\"').build(); + CSVReader expectedCSVReader = new CSVReaderBuilder(new FileReader(expectedFile)).withCSVParser(csvParser).build(); + CSVReader actualCSVReader = new CSVReaderBuilder(new FileReader(actualFile)).withCSVParser(csvParser).build(); + + Map expectedValueForColumn = new HashMap<>(); + Map actualValueForColumn = new HashMap<>(); + + String[] expectedHeaders = expectedCSVReader.readNext(); + String[] actualHeaders = actualCSVReader.readNext(); + assertEquals(expectedHeaders.length, actualHeaders.length); + + for (int headerIdx = 0; headerIdx < expectedHeaders.length; headerIdx++) { + String expectedHeader = expectedHeaders[headerIdx]; + String actualHeader = actualHeaders[headerIdx]; + if (!columnsForSkip.contains(expectedHeader)) expectedValueForColumn.put(expectedHeader, headerIdx); + if (!columnsForSkip.contains(actualHeader)) actualValueForColumn.put(actualHeader, headerIdx); + } + + do { + String[] expectedLines = expectedCSVReader.readNext(); + String[] actualLines = actualCSVReader.readNext(); + if (expectedLines == null || actualLines == null) { + if (expectedLines == null && actualLines == null) { + break; + } + Assertions.fail("expected and actual lines not equal"); + } + for (String expectedHeader : expectedValueForColumn.keySet()) { + int expectedIdx = expectedValueForColumn.get(expectedHeader); + int actualIdx = actualValueForColumn.get(expectedHeader); + String expected = expectedLines[expectedIdx]; + String actual = actualLines[actualIdx]; + assertEquals(expected, actual); + } + } while (true); + + expectedCSVReader.close(); + actualCSVReader.close(); + } + + + @PostConstruct + private void init() { + ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId(); + + testExecutionFond.setExchangeExecutionId(TEST_EXCHANGE_EXECUTION_ID_1); + testExecutionFond.setExchangeExecutionTime(TEST_EXCHANGE_EXECUTION_TIME_1); + testExecutionFond.setTradingDate(TEST_TRADING_DATE_1); + testExecutionFond.setTradingClearingRegistryId(TEST_TRADING_CLEARING_REGISTRY_ID_1); + testExecutionFond.setMarket(TEST_MARKET_1); + testExecutionFond.setPrice(TEST_PRICE_1); + testExecutionFond.setLots(TEST_LOTS_1); + testExecutionFond.setQuantity(TEST_QUANTITY_1); + testExecutionFond.setInterestAmount(TEST_INTEREST_AMOUNT_1); + testExecutionFond.setSide(TEST_SIDE_1); + testExecutionFond.setSettlementCurrency(TEST_SETTLEMENT_CURRENCY_1); + testExecutionFond.setCompanyId(TEST_COMPANY_ID_1); + testExecutionFond.setDuration(TEST_DURATION_1); + testExecutionFond.setSecurityFullName(TEST_SECURITY_FULL_NAME_1); + testExecutionFond.setSecuritySymbol(TEST_SECURITY_SYMBOL_1); + testExecutionFond.setSecurityId(TEST_SECURITY_ID_1); + testExecutionFond.setCounterPartyId(TEST_COUNTER_PARTY_ID_1); + testExecutionFond.setCoverageStatus(TEST_COVERAGE_STATUS_1); + testExecutionFond.setSessionId(TEST_SESSION_ID_1); + testExecutionFond.setClearingDate(TEST_CLEARING_DATE_1); + testExecutionFond.setExchangeOrderId(TEST_EXCHANGE_ORDER_ID); + testExecutionFond.setSettlementAmount(TEST_SETTLEMENT_AMOUNT); + testExecutionFond.setComment(TEST_COMMENT); + testExecutionFond.setClientCodeId(TEST_CLIENT_CODE_ID); + testExecutionFond.setSettlementCode(TEST_SETTLEMENT_CODE); + testExecutionFond.setSettlementDate(TEST_SETTLEMENT_DATE); + testExecutionFond.setExchangeExecutionMicroseconds(TEST_EXCHANGE_EXECUTION_MICROSECONDS); + + testExecutionDeposit.setExchangeExecutionId(TEST_EXCHANGE_EXECUTION_ID_2); + testExecutionDeposit.setExchangeExecutionTime(TEST_EXCHANGE_EXECUTION_TIME_2); + testExecutionDeposit.setTradingDate(TEST_TRADING_DATE_2); + testExecutionDeposit.setTradingClearingRegistryId(TEST_TRADING_CLEARING_REGISTRY_ID_2); + testExecutionDeposit.setMarket(TEST_MARKET_2); + testExecutionDeposit.setPrice(TEST_PRICE_2); + testExecutionDeposit.setLots(TEST_LOTS_2); + testExecutionDeposit.setQuantity(TEST_QUANTITY_2); + testExecutionDeposit.setInterestAmount(TEST_INTEREST_AMOUNT_2); + testExecutionDeposit.setSide(TEST_SIDE_2); + testExecutionDeposit.setSettlementCurrency(TEST_SETTLEMENT_CURRENCY_2); + testExecutionDeposit.setCompanyId(TEST_COMPANY_ID_2); + testExecutionDeposit.setDuration(TEST_DURATION_2); + testExecutionDeposit.setSecurityFullName(TEST_SECURITY_FULL_NAME_2); + testExecutionDeposit.setSecuritySymbol(TEST_SECURITY_SYMBOL_2); + testExecutionDeposit.setSecurityId(TEST_SECURITY_ID_2); + testExecutionDeposit.setCounterPartyId(TEST_COUNTER_PARTY_ID_2); + testExecutionDeposit.setCoverageStatus(TEST_COVERAGE_STATUS_2); + testExecutionDeposit.setSessionId(TEST_SESSION_ID_2); + testExecutionDeposit.setClearingDate(TEST_CLEARING_DATE_2); + testExecutionDeposit.setFirstLegAmount(TEST_FIRST_LEG_AMOUNT); + testExecutionDeposit.setSecondLegAmount(TEST_SECOND_LEG_AMOUNT); + testExecutionDeposit.setFirstLegSettlementDate(TEST_FIRST_LEG_SETTLEMENT_DATE); + testExecutionDeposit.setSecondLegSettlementDate(TEST_SECOND_LEG_SETTLEMENT_DATE); + testExecutionDeposit.setFirstLegSettlementCode(TEST_FIRST_LEG_SETTLEMENT_CODE); + testExecutionDeposit.setSecondLegSettlementCode(TEST_SECOND_LEG_SETTLEMENT_CODE); + testExecutionDeposit.setContract(TEST_CONTRACT); + + executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); + executionFondImdg.insert(testExecutionFond); + + executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); + executionDepositImdg.insert(testExecutionDeposit); + + testCompany_1.setWorkflowStatus(WorkflowStatus.Active.getKey()); + testCompany_1.setId(TEST_COMPANY_ID_1); + testCompany_1.setFullName(TEST_COMPANY_FULLNAME_1); + testCompany_2.setWorkflowStatus(WorkflowStatus.Active.getKey()); + testCompany_2.setId(TEST_COMPANY_ID_2); + testCompany_2.setFullName(TEST_COMPANY_FULLNAME_2); + testCompanyHouse.setId(1L); + testCompanyHouse.setFullName("COMPANY_HOUSE"); + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + companyImdg.insert(testCompany_1); + companyImdg.insert(testCompany_2); + companyImdg.insert(testCompanyHouse); + + + registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + testRegistryForCompanyId_1.setCompanyId(TEST_COMPANY_ID_1); + testRegistryForCompanyId_1.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_1); + testRegistryForCompanyId_2.setCompanyId(TEST_COMPANY_ID_2); + testRegistryForCompanyId_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2); + registryImdg.insert(testRegistryForCompanyId_1); + registryImdg.insert(testRegistryForCompanyId_2); + tm_tRegistry_1.setRegistryCode("TM_T"); + tm_tRegistry_1.setBalance(BigDecimal.valueOf(779L)); + om_tRegistry_1.setRegistryCode("OM_T"); + om_tRegistry_1.setBalance(BigDecimal.valueOf(2L)); + ts_tRegistry_1.setRegistryCode("TS_T"); + ts_tRegistry_1.setBalance(BigDecimal.valueOf(889L)); + os_tRegistry_1.setRegistryCode("OS_T"); + os_tRegistry_1.setBalance(BigDecimal.valueOf(1L)); + tm_tRegistry_1.setSessionId(TEST_SESSION_ID_1); + om_tRegistry_1.setSessionId(TEST_SESSION_ID_1); + ts_tRegistry_1.setSessionId(TEST_SESSION_ID_1); + os_tRegistry_1.setSessionId(TEST_SESSION_ID_1); + tm_tRegistry_2.setRegistryCode("TM_T"); + tm_tRegistry_2.setBalance(BigDecimal.valueOf(779L)); + om_tRegistry_2.setRegistryCode("OM_T"); + om_tRegistry_2.setBalance(BigDecimal.valueOf(2L)); + ts_tRegistry_2.setRegistryCode("TS_T"); + ts_tRegistry_2.setBalance(BigDecimal.valueOf(889L)); + os_tRegistry_2.setRegistryCode("OS_T"); + os_tRegistry_2.setBalance(BigDecimal.valueOf(1L)); + tm_tRegistry_2.setSessionId(TEST_SESSION_ID_2); + om_tRegistry_2.setSessionId(TEST_SESSION_ID_2); + ts_tRegistry_2.setSessionId(TEST_SESSION_ID_2); + os_tRegistry_2.setSessionId(TEST_SESSION_ID_2); + registryImdg.insert(tm_tRegistry_1); + registryImdg.insert(om_tRegistry_1); + registryImdg.insert(ts_tRegistry_1); + registryImdg.insert(os_tRegistry_1); + registryImdg.insert(tm_tRegistry_2); + registryImdg.insert(om_tRegistry_2); + registryImdg.insert(ts_tRegistry_2); + registryImdg.insert(os_tRegistry_2); + + listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); + testListing_1.setSecurityId(TEST_SECURITY_ID_1); + testListing_1.setLotSize(TEST_LOT_SIZE_1); + testListing_2.setSecurityId(TEST_SECURITY_ID_2); + testListing_2.setLotSize(TEST_LOT_SIZE_2); + listingImdg.insert(testListing_1); + listingImdg.insert(testListing_2); + + testFixedIncomeSecurity_1.setSecurityId(TEST_SECURITY_ID_1); + testFixedIncomeSecurity_1.setNominalValue(TEST_NOMINAL_1); + testFixedIncomeSecurity_1.setCoupon(TEST_COUPON_1); + testFixedIncomeSecurity_2.setSecurityId(TEST_SECURITY_ID_2); + testFixedIncomeSecurity_2.setNominalValue(TEST_NOMINAL_2); + testFixedIncomeSecurity_2.setCoupon(TEST_COUPON_2); + fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class); + fixedIncomeSecurityImdg.insert(testFixedIncomeSecurity_1); + fixedIncomeSecurityImdg.insert(testFixedIncomeSecurity_2); + + tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + testTradingClearingRegistry_1.setId(TEST_TRADING_CLEARING_REGISTRY_ID_1); + testTradingClearingRegistry_1.setMoneyAccountId(TEST_MONEY_ACCOUNT_1); + testTradingClearingRegistry_1.setDepoAccountId(TEST_DEPO_ACCOUNT_1); + tradingClearingRegistryImdg.insert(testTradingClearingRegistry_1); + testTradingClearingRegistry_2.setId(TEST_TRADING_CLEARING_REGISTRY_ID_2); + testTradingClearingRegistry_2.setMoneyAccountId(TEST_MONEY_ACCOUNT_2); + testTradingClearingRegistry_2.setDepoAccountId(TEST_DEPO_ACCOUNT_2); + tradingClearingRegistryImdg.insert(testTradingClearingRegistry_2); + } + + private final Long TEST_EXCHANGE_EXECUTION_ID_1 = 777L; + private final Long TEST_EXCHANGE_EXECUTION_ID_2 = 888L; + private final Instant TEST_EXCHANGE_EXECUTION_TIME_1 = Instant.ofEpochMilli(777777777777L); + private final Instant TEST_EXCHANGE_EXECUTION_TIME_2 = Instant.ofEpochMilli(888888888888L); + private final LocalDate TEST_TRADING_DATE_1 = LocalDate.now().minus(10, ChronoUnit.DAYS); + private final LocalDate TEST_TRADING_DATE_2 = LocalDate.now().minus(20, ChronoUnit.DAYS); + private final Long TEST_TRADING_CLEARING_REGISTRY_ID_1 = 777L; + private final Long TEST_TRADING_CLEARING_REGISTRY_ID_2 = 888L; + private final String TEST_MARKET_1 = Market.fond.getKey(); + private final String TEST_MARKET_2 = Market.mkrs.getKey(); + private final BigDecimal TEST_PRICE_1 = BigDecimal.valueOf(77L); + private final BigDecimal TEST_PRICE_2 = BigDecimal.valueOf(88L); + private final BigDecimal TEST_LOTS_1 = BigDecimal.valueOf(777L); + private final BigDecimal TEST_LOTS_2 = BigDecimal.valueOf(888L); + private final BigDecimal TEST_QUANTITY_1 = BigDecimal.valueOf(7777L); + private final BigDecimal TEST_QUANTITY_2 = BigDecimal.valueOf(8888L); + private final BigDecimal TEST_INTEREST_AMOUNT_1 = BigDecimal.valueOf(77777L); + private final BigDecimal TEST_INTEREST_AMOUNT_2 = BigDecimal.valueOf(88888L); + private final String TEST_SIDE_1 = Side.SELL.getKey(); + private final String TEST_SIDE_2 = Side.BUY.getKey(); + private final String TEST_SETTLEMENT_CURRENCY_1 = "test-settlement-currency-1"; + private final String TEST_SETTLEMENT_CURRENCY_2 = "test-settlement-currency-2"; + private final Long TEST_COMPANY_ID_1 = 1007L; + private final Long TEST_COMPANY_ID_2 = 1008L; + private final String TEST_COMPANY_FULLNAME_1 = "test-company-fullname-1"; + private final String TEST_COMPANY_FULLNAME_2 = "test-company-fullname-2"; + private final Long TEST_DURATION_1 = 2007L; + private final Long TEST_DURATION_2 = 2008L; + private final String TEST_SECURITY_FULL_NAME_1 = "test-security-full-name-1"; + private final String TEST_SECURITY_FULL_NAME_2 = "test-security-full-name-2"; + private final String TEST_SECURITY_SYMBOL_1 = "test-security-symbol-1"; + private final String TEST_SECURITY_SYMBOL_2 = "test-security-symbol-2"; + private final Long TEST_SECURITY_ID_1 = 3007L; + private final Long TEST_SECURITY_ID_2 = 3008L; + private final Long TEST_COUNTER_PARTY_ID_1 = 4007L; + private final Long TEST_COUNTER_PARTY_ID_2 = 4008L; + private final String TEST_COVERAGE_STATUS_1 = Allowed.ALLOWED.getKey(); + private final String TEST_COVERAGE_STATUS_2 = Allowed.DENIED.getKey(); + private final Long TEST_SESSION_ID_1 = 10007L; + private final Long TEST_SESSION_ID_2 = 10008L; + private final LocalDate TEST_CLEARING_DATE_1 = LocalDate.now().minus(30, ChronoUnit.DAYS); + private final LocalDate TEST_CLEARING_DATE_2 = LocalDate.now().minus(40, ChronoUnit.DAYS); + private final Long TEST_EXCHANGE_ORDER_ID = 20007L; + private final BigDecimal TEST_SETTLEMENT_AMOUNT = BigDecimal.valueOf(7777777L); + private final String TEST_COMMENT = "test-comment"; + private final Long TEST_CLIENT_CODE_ID = 222222L; + private final String TEST_SETTLEMENT_CODE = "test-settlement-code"; + private final LocalDate TEST_SETTLEMENT_DATE = LocalDate.now().minus(22, ChronoUnit.DAYS); + private final Instant TEST_EXCHANGE_EXECUTION_MICROSECONDS = Instant.now().minus(777L, ChronoUnit.SECONDS); + private final BigDecimal TEST_FIRST_LEG_AMOUNT = BigDecimal.valueOf(1L); + private final BigDecimal TEST_SECOND_LEG_AMOUNT = BigDecimal.valueOf(2L); + private final LocalDate TEST_FIRST_LEG_SETTLEMENT_DATE = LocalDate.now().minus(1, ChronoUnit.DAYS); + private final LocalDate TEST_SECOND_LEG_SETTLEMENT_DATE = LocalDate.now().minus(2, ChronoUnit.DAYS); + private final String TEST_FIRST_LEG_SETTLEMENT_CODE = "test-first-leg-settlement-code"; + private final String TEST_SECOND_LEG_SETTLEMENT_CODE = "test-second-leg-settlement-code"; + private final String TEST_CONTRACT = "test_contract"; + private final String TEST_TRADING_CLEARING_REGISTRY_1 = "test-trading-clearing-registry-1"; + private final String TEST_TRADING_CLEARING_REGISTRY_2 = "test-trading-clearing-registry-2"; + private final BigDecimal TEST_LOT_SIZE_1 = BigDecimal.valueOf(12L); + private final BigDecimal TEST_LOT_SIZE_2 = BigDecimal.valueOf(34L); + private final BigDecimal TEST_NOMINAL_1 = BigDecimal.valueOf(333L); + private final BigDecimal TEST_NOMINAL_2 = BigDecimal.valueOf(444L); + private final BigDecimal TEST_COUPON_1 = BigDecimal.valueOf(3333L); + private final BigDecimal TEST_COUPON_2 = BigDecimal.valueOf(4444L); + private final Long TEST_MONEY_ACCOUNT_1 = 11L; + private final Long TEST_MONEY_ACCOUNT_2 = 12L; + private final Long TEST_DEPO_ACCOUNT_1 = 13L; + private final Long TEST_DEPO_ACCOUNT_2 = 14L; + +} diff --git a/clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv new file mode 100644 index 000000000..d830c5b3b --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv @@ -0,0 +1,3 @@ +id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,session_id,clearing_date,clearing_time,trdAccId,account,depo_account,currency,tr_id,securityId,tr_buySell,tr_date,tr_execDate,exec_status,repaym_date,tr_price,nominal,lot_value,tr_lot,tr_quantity,tr_value,tr_accruedint,accruedint,tr_clrComm,tr_exhComm,cash_liability,depo_liability,cash_netto,depo_netto +"1","16.05.2023","20:45:22","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","16.04.2023","16.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","06.05.2023","24.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888" +"2","16.05.2023","20:45:25","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10007","06.04.2023","06.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","26.04.2023","14.05.2023","N","14.05.2023","88","","34","888","","1","","","","","1","","777","888" diff --git a/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java b/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java index 11b6871de..24d4f07d2 100644 --- a/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java +++ b/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java @@ -102,6 +102,10 @@ public class TestUtils { return getJsonBaseRequest(accountRequest, id, ActionType.DELETE); } + public static String getJsonStringForSystem(T request, long id) { + return getJsonBaseRequest(request, id, ActionType.SYSTEM); + } + private static String getJsonBaseRequest(T accountRequest, long id, ActionType actionType) { BaseRequest baseRequest = new BaseRequest<>(); baseRequest.setRequestPayload(accountRequest); diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java index 4b1da114d..3cd4c9aca 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java @@ -12,7 +12,7 @@ public class ReportRequest { * см. {@link ReportType} */ @JsonProperty - protected String reportId; + public String reportId; public String getReportId() { return reportId; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java index aca91be94..983d92d8e 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java @@ -15,12 +15,12 @@ public class ReportRequestWithPeriod extends ReportRequest { @JsonSerialize(using = LocalDateSerializer.class) @JsonDeserialize(using = LocalDateDeserializer.class) @JsonProperty - protected LocalDate startDate; + public LocalDate startDate; @JsonSerialize(using = LocalDateSerializer.class) @JsonDeserialize(using = LocalDateDeserializer.class) @JsonProperty - protected LocalDate endDate; + public LocalDate endDate; public LocalDate getStartDate() { return startDate; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java index c5c2cd857..c065ad6b4 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java @@ -10,7 +10,7 @@ public class ReportRequestWithSessionId extends ReportRequest { * Идентификатор сессии */ @JsonProperty - protected Long sessionId; + public Long sessionId; public Long getSessionId() { return sessionId; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java index 2202f7726..d5f9bce77 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java @@ -12,7 +12,7 @@ public class ReportRequestWithSessionIdList extends ReportRequest { * Идентификатор сессии */ @JsonProperty - protected List sessionId; + public List sessionId; public List getSessionIdList() { return sessionId;