some fixes and tests
This commit is contained in:
parent
47fbbabb1b
commit
94ab971af1
20 changed files with 525 additions and 67 deletions
|
|
@ -101,6 +101,16 @@
|
|||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-validation</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>test-clearing</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ public abstract class CSVReportBuilder<P> {
|
|||
protected abstract List<String[]> getLines();
|
||||
|
||||
/**
|
||||
* Название отчета, используется для формирования имени отчета
|
||||
* Название отчета, используется для формирования имени отчета (без указания формата)
|
||||
*
|
||||
* @param params Параметры формирования отчета
|
||||
*/
|
||||
|
|
@ -67,15 +67,14 @@ public abstract class CSVReportBuilder<P> {
|
|||
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<P> {
|
|||
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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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<P> extends CSVReportBuilder
|
|||
protected final Imdg<TradingClearingRegistry> 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<P> 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<P> 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());
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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<ReportRequest, IValidator> reportRequestValidator;
|
||||
private final Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator;
|
||||
private final Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator;
|
||||
|
|
@ -49,10 +47,9 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
|
||||
public ReportService(Consumer<String, Object> kafkaQueue,
|
||||
Producer<String, Object> kafkaResponseQueue,
|
||||
ImdgProvider imdgProvider,
|
||||
IMessageResolver messageResolver,
|
||||
UserRoleVerification userRoleVerification,
|
||||
ValidationHelper validationHelper,
|
||||
RequestHelper requestHelper,
|
||||
ReportsServiceSettings reportsServiceSettings,
|
||||
@Qualifier("reportBuildersWithoutParams")
|
||||
Map<ReportType, CSVReportBuilder<EmptyParams>> reportBuildersWithoutParams,
|
||||
|
|
@ -71,10 +68,9 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
@Qualifier("reportRequestWithPeriodValidator")
|
||||
Function<ReportRequestWithPeriod, IValidator> 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<ReportRequest> 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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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<ExecutionFond> executionFondImdg;
|
||||
private Imdg<ExecutionDeposit> executionDepositImdg;
|
||||
private Imdg<Company> companyImdg;
|
||||
private Imdg<Registry> registryImdg;
|
||||
private Imdg<Listing> listingImdg;
|
||||
private Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
||||
private Imdg<TradingClearingRegistry> 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> producerRecord;
|
||||
|
||||
@SpyBean
|
||||
private MockProducer<String, Object> 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<String> 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<String, Integer> expectedValueForColumn = new HashMap<>();
|
||||
Map<String, Integer> 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;
|
||||
|
||||
}
|
||||
|
|
@ -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"
|
||||
|
|
|
@ -102,6 +102,10 @@ public class TestUtils {
|
|||
return getJsonBaseRequest(accountRequest, id, ActionType.DELETE);
|
||||
}
|
||||
|
||||
public static <T> String getJsonStringForSystem(T request, long id) {
|
||||
return getJsonBaseRequest(request, id, ActionType.SYSTEM);
|
||||
}
|
||||
|
||||
private static <T> String getJsonBaseRequest(T accountRequest, long id, ActionType actionType) {
|
||||
BaseRequest<T> baseRequest = new BaseRequest<>();
|
||||
baseRequest.setRequestPayload(accountRequest);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ public class ReportRequest {
|
|||
* см. {@link ReportType}
|
||||
*/
|
||||
@JsonProperty
|
||||
protected String reportId;
|
||||
public String reportId;
|
||||
|
||||
public String getReportId() {
|
||||
return reportId;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ public class ReportRequestWithSessionId extends ReportRequest {
|
|||
* Идентификатор сессии
|
||||
*/
|
||||
@JsonProperty
|
||||
protected Long sessionId;
|
||||
public Long sessionId;
|
||||
|
||||
public Long getSessionId() {
|
||||
return sessionId;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ public class ReportRequestWithSessionIdList extends ReportRequest {
|
|||
* Идентификатор сессии
|
||||
*/
|
||||
@JsonProperty
|
||||
protected List<Long> sessionId;
|
||||
public List<Long> sessionId;
|
||||
|
||||
public List<Long> getSessionIdList() {
|
||||
return sessionId;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue