http://jira.mfd.msk:8088/browse/CLS-608 executionRegisterReport
This commit is contained in:
parent
ed3c08cdeb
commit
227e76a5ce
7 changed files with 444 additions and 13 deletions
|
|
@ -0,0 +1,211 @@
|
|||
package ru.spcex.clearing.registry.reports.bean;
|
||||
|
||||
import com.opencsv.bean.CsvBindByName;
|
||||
import com.opencsv.bean.CsvBindByPosition;
|
||||
import com.opencsv.bean.CsvDate;
|
||||
import com.opencsv.bean.CsvNumber;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
public class ExecutionRegisterReport implements CSVReport {
|
||||
@CsvBindByName(column = "Наименование биржи")
|
||||
@CsvBindByPosition(position = 0)
|
||||
private String clearingOrganization;
|
||||
|
||||
@CsvBindByName(column = "Дата заключения сделки")
|
||||
@CsvBindByPosition(position = 1)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate tradingDate;
|
||||
|
||||
@CsvBindByName(column = "Дата исполнения")
|
||||
@CsvBindByPosition(position = 2)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate settlementDate;
|
||||
|
||||
@CsvBindByName(column = "Идентификационный номер сделки в Торговой системе")
|
||||
@CsvBindByPosition(position = 3)
|
||||
private Long exchangeExecutionId;
|
||||
|
||||
@CsvBindByName(column = "Время заключения сделки в Торговой системе")
|
||||
@CsvBindByPosition(position = 4)
|
||||
@CsvDate(value = "HH:mm:ss")
|
||||
private LocalTime exchangeExecutionTime;
|
||||
|
||||
@CsvBindByName(column = "Код БИ")
|
||||
@CsvBindByPosition(position = 5)
|
||||
private String security;
|
||||
|
||||
@CsvBindByName(column = "Дата возврата")
|
||||
@CsvBindByPosition(position = 6)
|
||||
@CsvDate(value = "dd.MM.yyyy")
|
||||
private LocalDate refundDate;
|
||||
|
||||
@CsvBindByName(column = "Код УК - продавца")
|
||||
@CsvBindByPosition(position = 7)
|
||||
private String sellerCode;
|
||||
|
||||
@CsvBindByName(column = "Наименование УК - продавца")
|
||||
@CsvBindByPosition(position = 8)
|
||||
private String seller;
|
||||
|
||||
@CsvBindByName(column = "ТКР продавца")
|
||||
@CsvBindByPosition(position = 9)
|
||||
private String sellerTkr;
|
||||
|
||||
@CsvBindByName(column = "Клиринговый код покупателя")
|
||||
@CsvBindByPosition(position = 10)
|
||||
private String buyerCode;
|
||||
|
||||
@CsvBindByName(column = "Наименование компании-покупателя")
|
||||
@CsvBindByPosition(position = 11)
|
||||
private String buyer;
|
||||
|
||||
@CsvBindByName(column = "Торгово-клиринговый регистр покупателя")
|
||||
@CsvBindByPosition(position = 12)
|
||||
private String buyerTkr;
|
||||
|
||||
@CsvBindByName(column = "Сумма сделки")
|
||||
@CsvBindByPosition(position = 13)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal amount;
|
||||
|
||||
@CsvBindByName(column = "Количество ценных бумаг")
|
||||
@CsvBindByPosition(position = 14)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal quantity;
|
||||
|
||||
@CsvBindByName(column = "Статус")
|
||||
@CsvBindByPosition(position = 15)
|
||||
private String status;
|
||||
|
||||
|
||||
public String getClearingOrganization() {
|
||||
return clearingOrganization;
|
||||
}
|
||||
|
||||
public void setClearingOrganization(String clearingOrganization) {
|
||||
this.clearingOrganization = clearingOrganization;
|
||||
}
|
||||
|
||||
public LocalDate getTradingDate() {
|
||||
return tradingDate;
|
||||
}
|
||||
|
||||
public void setTradingDate(LocalDate tradingDate) {
|
||||
this.tradingDate = tradingDate;
|
||||
}
|
||||
|
||||
public LocalDate getSettlementDate() {
|
||||
return settlementDate;
|
||||
}
|
||||
|
||||
public void setSettlementDate(LocalDate settlementDate) {
|
||||
this.settlementDate = settlementDate;
|
||||
}
|
||||
|
||||
public Long getExchangeExecutionId() {
|
||||
return exchangeExecutionId;
|
||||
}
|
||||
|
||||
public void setExchangeExecutionId(Long exchangeExecutionId) {
|
||||
this.exchangeExecutionId = exchangeExecutionId;
|
||||
}
|
||||
|
||||
public LocalTime getExchangeExecutionTime() {
|
||||
return exchangeExecutionTime;
|
||||
}
|
||||
|
||||
public void setExchangeExecutionTime(LocalTime exchangeExecutionTime) {
|
||||
this.exchangeExecutionTime = exchangeExecutionTime;
|
||||
}
|
||||
|
||||
public String getSecurity() {
|
||||
return security;
|
||||
}
|
||||
|
||||
public void setSecurity(String security) {
|
||||
this.security = security;
|
||||
}
|
||||
|
||||
public LocalDate getRefundDate() {
|
||||
return refundDate;
|
||||
}
|
||||
|
||||
public void setRefundDate(LocalDate refundDate) {
|
||||
this.refundDate = refundDate;
|
||||
}
|
||||
|
||||
public String getSellerCode() {
|
||||
return sellerCode;
|
||||
}
|
||||
|
||||
public void setSellerCode(String sellerCode) {
|
||||
this.sellerCode = sellerCode;
|
||||
}
|
||||
|
||||
public String getSeller() {
|
||||
return seller;
|
||||
}
|
||||
|
||||
public void setSeller(String seller) {
|
||||
this.seller = seller;
|
||||
}
|
||||
|
||||
public String getSellerTkr() {
|
||||
return sellerTkr;
|
||||
}
|
||||
|
||||
public void setSellerTkr(String sellerTkr) {
|
||||
this.sellerTkr = sellerTkr;
|
||||
}
|
||||
|
||||
public String getBuyerCode() {
|
||||
return buyerCode;
|
||||
}
|
||||
|
||||
public void setBuyerCode(String buyerCode) {
|
||||
this.buyerCode = buyerCode;
|
||||
}
|
||||
|
||||
public String getBuyer() {
|
||||
return buyer;
|
||||
}
|
||||
|
||||
public void setBuyer(String buyer) {
|
||||
this.buyer = buyer;
|
||||
}
|
||||
|
||||
public String getBuyerTkr() {
|
||||
return buyerTkr;
|
||||
}
|
||||
|
||||
public void setBuyerTkr(String buyerTkr) {
|
||||
this.buyerTkr = buyerTkr;
|
||||
}
|
||||
|
||||
public BigDecimal getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public void setAmount(BigDecimal amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public BigDecimal getQuantity() {
|
||||
return quantity;
|
||||
}
|
||||
|
||||
public void setQuantity(BigDecimal quantity) {
|
||||
this.quantity = quantity;
|
||||
}
|
||||
|
||||
public String getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(String status) {
|
||||
this.status = status;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
package ru.spcex.clearing.registry.reports.builders;
|
||||
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionFond;
|
||||
import ru.clearing.platform.dictionary.AllowedDictionary;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.registry.reports.bean.ExecutionRegisterReport;
|
||||
import ru.spcex.platform.enumeration.CompanySymbol;
|
||||
import ru.spcex.platform.enumeration.MoneyFlowSide;
|
||||
import ru.spcex.platform.enumeration.Side;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.time.LocalTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
|
||||
public class ExecutionRegisterReportBuilder extends CSVReportBuilder<ExecutionRegisterReport, ExecutionCommon> {
|
||||
private final static DateTimeFormatter yyyyMMddFormat = DateTimeFormatter.ofPattern("yyyyMMdd");
|
||||
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<CompanySymbols> companySymbolsImdg;
|
||||
private final Imdg<AllowedDictionary> allowedDictionaryImdg;
|
||||
|
||||
public ExecutionRegisterReportBuilder(ImdgProvider imdgProvider) {
|
||||
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||
allowedDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AllowedDictionary, AllowedDictionary.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String reportName() {
|
||||
return "Реестр договоров";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<ExecutionRegisterReport> getReportClass() {
|
||||
return ExecutionRegisterReport.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ExecutionRegisterReport toRow(ExecutionCommon input) {
|
||||
ExecutionRegisterReport entity = new ExecutionRegisterReport();
|
||||
|
||||
entity.setClearingOrganization("СПВБ");
|
||||
entity.setTradingDate(input.getTradingDate());
|
||||
entity.setExchangeExecutionId(input.getExchangeExecutionId());
|
||||
|
||||
if (input.getSide() != null && input.getCompanyId() != null && input.getCounterPartyId() != null) {
|
||||
CompanySymbols companySymbolsByCompanyId = companySymbolsImdg.getFirstObjectByFieldValues(
|
||||
Map.of(
|
||||
"companySymbol", CompanySymbol.CLRC.getKey(),
|
||||
"companyId", input.getCompanyId()
|
||||
)
|
||||
);
|
||||
CompanySymbols companySymbolsByCounterPartyId = companySymbolsImdg.getFirstObjectByFieldValues(
|
||||
Map.of(
|
||||
"companySymbol", CompanySymbol.CLRC.getKey(),
|
||||
"companyId", input.getCounterPartyId()
|
||||
)
|
||||
);
|
||||
Company companyByCounterPartyId = companyImdg.getSingleObjectByID(input.getCounterPartyId());
|
||||
Company companyByCompanyId = companyImdg.getSingleObjectByID(input.getCompanyId());
|
||||
|
||||
if (Arrays.asList(Side.BUY.getKey(), MoneyFlowSide.BUY.getKey()).contains(input.getSide().toUpperCase())) {
|
||||
if (companyByCounterPartyId != null) {
|
||||
entity.setSeller(companyByCounterPartyId.getShortName());
|
||||
entity.setBuyer(companyByCounterPartyId.getShortName());
|
||||
}
|
||||
entity.setSellerCode(companySymbolsByCounterPartyId.getCompanySymbolValue());
|
||||
entity.setSellerTkr(input.getCounterPartyTradingClearingRegistry());
|
||||
entity.setBuyerCode(companySymbolsByCompanyId.getCompanySymbolValue());
|
||||
entity.setBuyerTkr(input.getPartyTradingClearingRegistry());
|
||||
}
|
||||
if (Arrays.asList(Side.SELL.getKey(), MoneyFlowSide.SELL.getKey()).contains(input.getSide().toUpperCase())) {
|
||||
if (companyByCompanyId != null) {
|
||||
entity.setSeller(companyByCompanyId.getShortName());
|
||||
entity.setBuyer(companyByCompanyId.getShortName());
|
||||
}
|
||||
entity.setSellerCode(companySymbolsByCompanyId.getCompanySymbolValue());
|
||||
entity.setSeller(input.getPartyTradingClearingRegistry());
|
||||
entity.setBuyerCode(companySymbolsByCounterPartyId.getCompanySymbolValue());
|
||||
entity.setBuyerTkr(input.getCounterPartyTradingClearingRegistry());
|
||||
}
|
||||
}
|
||||
|
||||
if (input.getExchangeExecutionTime() != null)
|
||||
entity.setExchangeExecutionTime(LocalTime.from(input.getExchangeExecutionTime().atZone(ZoneId.systemDefault())));
|
||||
|
||||
if (input instanceof ExecutionDeposit deposit) {
|
||||
entity.setSettlementDate(deposit.getFirstLegSettlementDate());
|
||||
entity.setSecurity(deposit.getContract());
|
||||
entity.setRefundDate(deposit.getSecondLegSettlementDate());
|
||||
entity.setAmount(deposit.getFirstLegAmount());
|
||||
} else if (input instanceof ExecutionFond fond) {
|
||||
entity.setSettlementDate(fond.getSettlementDate());
|
||||
entity.setSecurity(fond.getSecuritySymbol());
|
||||
entity.setAmount(fond.getSettlementAmount());
|
||||
entity.setQuantity(fond.getQuantity());
|
||||
}
|
||||
|
||||
if (input.getCoverageStatus() != null) {
|
||||
AllowedDictionary allowed = allowedDictionaryImdg.getFirstObjectByFieldValues(
|
||||
Map.of("code", input.getCoverageStatus())
|
||||
);
|
||||
if (allowed != null) entity.setStatus(allowed.getName());
|
||||
}
|
||||
|
||||
return entity;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -64,7 +64,7 @@ public class DepoPaymentInstructionRegisterService extends QueueConsumer impleme
|
|||
Producer<String, Object> kafkaProducer,
|
||||
ImdgProvider imdgProvider,
|
||||
Function<Map<String, ?>, IValidator> fieldValuesValidator,
|
||||
@Qualifier("reportOutDir") File outFolder,
|
||||
@Qualifier("reportOutDir") File outFolder,
|
||||
RegistryServiceSettings settings,
|
||||
SFTPReportsConfig.ReportsGateway reportsSftpGateway) {
|
||||
super(kafkaQueue, kafkaProducer);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.account.Account;
|
||||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||
|
|
@ -17,6 +18,10 @@ import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
|||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.clearing.registry.config.SFTPReportsConfig;
|
||||
import ru.spcex.clearing.registry.config.settings.RegistryServiceSettings;
|
||||
import ru.spcex.clearing.registry.reports.ReportUtils;
|
||||
import ru.spcex.clearing.registry.reports.builders.ExecutionRegisterReportBuilder;
|
||||
import ru.spcex.clearing.registry.util.PreClearMap;
|
||||
import ru.spcex.platform.enumeration.CompanySymbol;
|
||||
import ru.spcex.platform.enumeration.MoneyFlowSide;
|
||||
|
|
@ -26,12 +31,11 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
|
|||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
|
||||
import java.io.File;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static ru.spcex.clearing.imdg.IMDGDistributedNames.*;
|
||||
|
|
@ -50,11 +54,22 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ
|
|||
private final Function<Map<String, ?>, IValidator> fieldValuesValidator;
|
||||
private final PreClearMap<ExecutionRegister> preClearMap;
|
||||
|
||||
private final ExecutionRegisterReportBuilder reportBuilder;
|
||||
private final File outFolder;
|
||||
private final RegistryServiceSettings settings;
|
||||
|
||||
private final SFTPReportsConfig.ReportsGateway reportsSftpGateway;
|
||||
private final boolean deleteAfterSend;
|
||||
|
||||
|
||||
@Autowired
|
||||
public ExecutionRegisterService(Consumer<String, Object> kafkaQueue,
|
||||
Producer<String, Object> kafkaProducer,
|
||||
ImdgProvider imdgProvider,
|
||||
Function<Map<String, ?>, IValidator> fieldValuesValidator) {
|
||||
Function<Map<String, ?>, IValidator> fieldValuesValidator,
|
||||
@Qualifier("reportOutDir") File outFolder,
|
||||
RegistryServiceSettings settings,
|
||||
SFTPReportsConfig.ReportsGateway reportsSftpGateway) {
|
||||
super(kafkaQueue, kafkaProducer);
|
||||
this.executionRegisterMap = imdgProvider.getImdg(Map_ExecutionRegister, ExecutionRegister.class);
|
||||
this.companySymbolsMap = imdgProvider.getImdg(Map_CompanySymbols, CompanySymbols.class);
|
||||
|
|
@ -63,6 +78,11 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ
|
|||
this.tradingClearingRegistryMap = imdgProvider.getImdg(Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||
this.accountImdg = imdgProvider.getImdg(Map_Account, Account.class);
|
||||
this.fieldValuesValidator = fieldValuesValidator;
|
||||
this.settings = settings;
|
||||
this.reportsSftpGateway = reportsSftpGateway;
|
||||
this.outFolder = outFolder;
|
||||
reportBuilder = new ExecutionRegisterReportBuilder(imdgProvider);
|
||||
deleteAfterSend = settings.getReportsStore().isDeleteAfterSend();
|
||||
preClearMap = PreClearMap.instanceForInstantField(executionRegisterMap, "created");
|
||||
}
|
||||
|
||||
|
|
@ -82,6 +102,7 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ
|
|||
}
|
||||
|
||||
public void executionRegisterNew(BaseRequest<LauncherCommandRequest> userRequest) {
|
||||
boolean csvMode = settings.isCsvMode();
|
||||
LocalDate localDateNow = LocalDate.now();
|
||||
log.debug("ExecutionRegisterNewRequest received");
|
||||
Collection<ExecutionFond> collectionFond = executionFondMap.getCollectionObjectsByFieldValues(
|
||||
|
|
@ -96,13 +117,21 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ
|
|||
));
|
||||
log.debug("Found {} ExecutionFond and {} ExecutionDeposit on clearingDate={}",
|
||||
collectionFond.size(), collectionDeposit.size(), localDateNow);
|
||||
preClearMap.preClearMap();
|
||||
if (!csvMode) preClearMap.preClearMap();
|
||||
List<ExecutionCommon> executionCommonForReport = new ArrayList<>();
|
||||
collectionFond.forEach(x -> {
|
||||
insertExecutionRegister(true, x);
|
||||
if (!csvMode) insertExecutionRegister(true, x);
|
||||
else executionCommonForReport.add(x);
|
||||
});
|
||||
collectionDeposit.forEach(x -> {
|
||||
insertExecutionRegister(false, x);
|
||||
if (!csvMode) insertExecutionRegister(false, x);
|
||||
else executionCommonForReport.add(x);
|
||||
});
|
||||
if (csvMode) {
|
||||
File reportFile = reportBuilder.buildReport(executionCommonForReport, outFolder);
|
||||
ReportUtils.sendFilesToSftp(List.of(reportFile), reportsSftpGateway, deleteAfterSend);
|
||||
}
|
||||
|
||||
log.debug("successfully processed...");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package ru.spcex.clearing.registry.service;
|
||||
|
||||
import com.opencsv.exceptions.CsvValidationException;
|
||||
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||
import org.apache.kafka.clients.producer.Producer;
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
|
|
@ -7,6 +8,7 @@ import org.junit.jupiter.api.Order;
|
|||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestMethodOrder;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
|
|
@ -19,7 +21,10 @@ import ru.clearing.classes.statics.data.register.ExecutionRegister;
|
|||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
|
||||
import ru.spcex.clearing.registry.config.SFTPTestConfig;
|
||||
import ru.spcex.clearing.registry.config.TestConfig;
|
||||
import ru.spcex.clearing.registry.config.ValidationConfig;
|
||||
import ru.spcex.clearing.registry.config.settings.RegistryServiceSettings;
|
||||
import ru.spcex.clearing.test.TestUtils;
|
||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||
|
|
@ -30,12 +35,14 @@ import ru.spcex.platform.enumeration.Task;
|
|||
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.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
|
@ -46,9 +53,11 @@ import static org.junit.jupiter.api.Assertions.assertNull;
|
|||
ExecutionRegisterService.class,
|
||||
ImdgTestConfig.class,
|
||||
KafkaTestConfig.class,
|
||||
TestConfig.class,
|
||||
SFTPTestConfig.class
|
||||
})
|
||||
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
|
||||
class ExecutionRegisterServiceTest {
|
||||
class ExecutionRegisterServiceTest implements InitializingBean {
|
||||
LocalDate TRADING_DATE = LocalDate.of(2020, 1, 1);
|
||||
Instant EXCHANGE_EXECUTION_TIME = LocalDate.of(2020, 1, 1).atStartOfDay().toInstant(ZoneOffset.UTC);
|
||||
Long COUNTER_PARTY_ID = 888L;
|
||||
|
|
@ -89,6 +98,9 @@ class ExecutionRegisterServiceTest {
|
|||
@Autowired
|
||||
private ExecutionRegisterService executionRegisterService;
|
||||
|
||||
@Autowired
|
||||
private RegistryServiceSettings settings;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("hazelcastServiceTest")
|
||||
private ImdgProvider imdgProvider;
|
||||
|
|
@ -97,8 +109,13 @@ class ExecutionRegisterServiceTest {
|
|||
@Qualifier("mockProducer")
|
||||
private Producer<String, Object> producer;
|
||||
|
||||
@PostConstruct
|
||||
private void init() {
|
||||
@Autowired
|
||||
@Qualifier("reportOutDir")
|
||||
private File outFolder;
|
||||
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId();
|
||||
|
||||
executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
|
||||
|
|
@ -147,9 +164,56 @@ class ExecutionRegisterServiceTest {
|
|||
companySymbolsImdg.insert(companySymbolsForCounterPartyId);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3)
|
||||
void executionRegisterNewForClearingDate_CSV() throws IOException, CsvValidationException {
|
||||
ReportTestUtils.resetDir(outFolder);
|
||||
boolean oldCsvMode = settings.isCsvMode();
|
||||
settings.setCsvMode(true);
|
||||
|
||||
ExecutionFond executionFond = new ExecutionFond();
|
||||
executionFond.setClearingDate(LocalDate.now());
|
||||
executionFond.setTradingDate(TRADING_DATE);
|
||||
executionFond.setExchangeExecutionId(EXCHANGE_EXECUTION_ID);
|
||||
executionFond.setExchangeExecutionTime(EXCHANGE_EXECUTION_TIME);
|
||||
executionFond.setSecurityId(SECURITY_ID);
|
||||
executionFond.setSettlementAmount(SETTLEMENT_AMOUNT);
|
||||
executionFond.setQuantity(QUANTITY);
|
||||
executionFond.setCounterPartyTradingClearingRegistryId(TKR_FOR_COUNTER_PARTY_TKR_ID);
|
||||
executionFond.setTradingClearingRegistryId(TKR_FOR_TKR_ID);
|
||||
executionFond.setCompanyId(COMPANY_ID);
|
||||
executionFond.setCounterPartyId(COUNTER_PARTY_ID);
|
||||
executionFond.setSide(Side.SELL.getKey());
|
||||
executionFond.setCounterPartyTradingClearingRegistry(COUNTER_PARTY_TKR);
|
||||
executionFond.setPartyTradingClearingRegistry(PARTY_TKR);
|
||||
executionFondImdg.insert(executionFond);
|
||||
|
||||
LauncherCommandRequest launcherCommandRequest = new LauncherCommandRequest();
|
||||
|
||||
String jsonString = TestUtils.getJsonStringForSystem(launcherCommandRequest, 0L);
|
||||
|
||||
TestUtils.addRecordToKafka((MockConsumer) executionRegisterService.getConsumer(),
|
||||
Task.createRegistry_ECNR.topic(),
|
||||
requestCount++,
|
||||
0,
|
||||
jsonString);
|
||||
|
||||
TestUtils.waitingSendAndCheckRecord(0L, producer);
|
||||
|
||||
File outFile = outFolder.listFiles()[0];
|
||||
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports/execution_register_expected.csv").getFile());
|
||||
ReportTestUtils.compareCSVFiles(expectedFile, outFile, List.of());
|
||||
|
||||
executionFondImdg.delete(executionFond);
|
||||
settings.setCsvMode(oldCsvMode);
|
||||
ReportTestUtils.deleteDir(outFolder);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(2)
|
||||
void executionRegisterNewForClearingDate() {
|
||||
boolean oldCsvMode = settings.isCsvMode();
|
||||
settings.setCsvMode(false);
|
||||
|
||||
ExecutionFond executionFond = new ExecutionFond();
|
||||
executionFond.setClearingDate(LocalDate.now());
|
||||
|
|
@ -201,11 +265,16 @@ class ExecutionRegisterServiceTest {
|
|||
assertEquals(executionRegister.getClearingDate(), LocalDate.now());
|
||||
|
||||
executionFondImdg.delete(executionFond);
|
||||
|
||||
settings.setCsvMode(oldCsvMode);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(1)
|
||||
void executionRegisterNewFromRequest() {
|
||||
boolean oldCsvMode = settings.isCsvMode();
|
||||
settings.setCsvMode(false);
|
||||
|
||||
ExecutionDeposit executionDeposit = new ExecutionDeposit();
|
||||
executionDeposit.setClearingDate(LocalDate.now());
|
||||
executionDeposit.setTradingDate(TRADING_DATE);
|
||||
|
|
@ -256,5 +325,8 @@ class ExecutionRegisterServiceTest {
|
|||
assertEquals(executionRegister.getClearingDate(), LocalDate.now());
|
||||
|
||||
executionDepositImdg.delete(executionDeposit);
|
||||
|
||||
settings.setCsvMode(oldCsvMode);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
"Номер распоряжения","Дата распоряжения","Время формирования","Номер торгового банковского/клирингового счета списания","Наименование владельца счета списания","Код владельца счета списания","Номер торгового банковского/клирингового счета зачисления","Наименование владельца счета зачисления","Код владельца счета зачисления","Код ЦБ","Количество ЦБ"
|
||||
"1","29.12.2023",,,,,,,,,"1.00"
|
||||
"1","29.12.2023",,,,,,,,,"1"
|
||||
|
|
|
|||
|
|
|
@ -0,0 +1,2 @@
|
|||
"Наименование биржи","Дата заключения сделки","Дата исполнения","Идентификационный номер сделки в Торговой системе","Время заключения сделки в Торговой системе","Код БИ","Дата возврата","Код УК - продавца","Наименование УК - продавца","ТКР продавца","Клиринговый код покупателя","Наименование компании-покупателя","Торгово-клиринговый регистр покупателя","Сумма сделки","Количество ценных бумаг","Статус"
|
||||
"СПВБ","01.01.2020",,"777","03:00:00",,,"COMPANY_SYMBOL_VALUE_FOR_COMPANY_ID","PARTY_TKR",,"COMPANY_SYMBOL_VALUE_FOR_COUNTER_PARTY_ID",,"COUNTER_PARTY_TKR","777.00","888.00",
|
||||
|
Loading…
Add table
Reference in a new issue