diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/bean/ExecutionRegisterReport.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/bean/ExecutionRegisterReport.java new file mode 100644 index 000000000..136c242fd --- /dev/null +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/bean/ExecutionRegisterReport.java @@ -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; + } +} diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/builders/ExecutionRegisterReportBuilder.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/builders/ExecutionRegisterReportBuilder.java new file mode 100644 index 000000000..c96d32dac --- /dev/null +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/builders/ExecutionRegisterReportBuilder.java @@ -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 { + private final static DateTimeFormatter yyyyMMddFormat = DateTimeFormatter.ofPattern("yyyyMMdd"); + + private final Imdg companyImdg; + private final Imdg companySymbolsImdg; + private final Imdg 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 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; + } + +} diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java index 2a1fe56f8..9a97baf28 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java @@ -64,7 +64,7 @@ public class DepoPaymentInstructionRegisterService extends QueueConsumer impleme Producer kafkaProducer, ImdgProvider imdgProvider, Function, IValidator> fieldValuesValidator, - @Qualifier("reportOutDir") File outFolder, + @Qualifier("reportOutDir") File outFolder, RegistryServiceSettings settings, SFTPReportsConfig.ReportsGateway reportsSftpGateway) { super(kafkaQueue, kafkaProducer); diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java index 4fe090b8f..473971e4e 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java @@ -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, IValidator> fieldValuesValidator; private final PreClearMap 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 kafkaQueue, Producer kafkaProducer, ImdgProvider imdgProvider, - Function, IValidator> fieldValuesValidator) { + Function, 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 userRequest) { + boolean csvMode = settings.isCsvMode(); LocalDate localDateNow = LocalDate.now(); log.debug("ExecutionRegisterNewRequest received"); Collection 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 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..."); } diff --git a/clearing-parent/registry-service/src/test/java/ru/spcex/clearing/registry/service/ExecutionRegisterServiceTest.java b/clearing-parent/registry-service/src/test/java/ru/spcex/clearing/registry/service/ExecutionRegisterServiceTest.java index d1e74dd33..2cb82cc47 100644 --- a/clearing-parent/registry-service/src/test/java/ru/spcex/clearing/registry/service/ExecutionRegisterServiceTest.java +++ b/clearing-parent/registry-service/src/test/java/ru/spcex/clearing/registry/service/ExecutionRegisterServiceTest.java @@ -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 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); } + } \ No newline at end of file diff --git a/clearing-parent/registry-service/src/test/resources/expected_reports/depo_payment_instruction_register_expected.csv b/clearing-parent/registry-service/src/test/resources/expected_reports/depo_payment_instruction_register_expected.csv index 6cc058c4a..1bd1dc657 100644 --- a/clearing-parent/registry-service/src/test/resources/expected_reports/depo_payment_instruction_register_expected.csv +++ b/clearing-parent/registry-service/src/test/resources/expected_reports/depo_payment_instruction_register_expected.csv @@ -1,2 +1,2 @@ "Номер распоряжения","Дата распоряжения","Время формирования","Номер торгового банковского/клирингового счета списания","Наименование владельца счета списания","Код владельца счета списания","Номер торгового банковского/клирингового счета зачисления","Наименование владельца счета зачисления","Код владельца счета зачисления","Код ЦБ","Количество ЦБ" -"1","29.12.2023",,,,,,,,,"1.00" +"1","29.12.2023",,,,,,,,,"1" diff --git a/clearing-parent/registry-service/src/test/resources/expected_reports/execution_register_expected.csv b/clearing-parent/registry-service/src/test/resources/expected_reports/execution_register_expected.csv new file mode 100644 index 000000000..a6d5585d7 --- /dev/null +++ b/clearing-parent/registry-service/src/test/resources/expected_reports/execution_register_expected.csv @@ -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",