diff --git a/clearing-parent/registry-service/README.md b/clearing-parent/registry-service/README.md index 2bf44faa9..5ef495533 100644 --- a/clearing-parent/registry-service/README.md +++ b/clearing-parent/registry-service/README.md @@ -30,9 +30,9 @@ registry-service.kafka-consumer.* и registry-service.kafka-producer.* не об Соответствие отчётам -------------------- -executionDepositLoader + executionFondLoader = executionRegisterReportBuilder (contract_register) +executionDepositLoader + executionFondLoader = executionRegisterReportBuilder (contract_register) Реестр сделок depoInstructionLoader = depoPaymentInstructionBuilder (rdc_register) moneyPaymentInstructionLoader = moneyPaymentInstructionRegisterReportBuilder (prc_register) moneyBalanceLoader = moneyBalanceRegisterReportBuilder (money_register) depoBalanceLoader = depoBalanceRegisterReportBuilder (security_register) -registryLoader = liabilitiesRegistryReportBuilder (registry) +registryLoader = liabilitiesRegistryReportBuilder (registry) Реестр обязательств diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/conf/properties/AProperties.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/conf/properties/AProperties.java index 0b71a626d..7ff490e9b 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/conf/properties/AProperties.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/conf/properties/AProperties.java @@ -23,6 +23,9 @@ public class AProperties { @Value("${registry-service.outFolder}") private String outFolder; + @Value("${registry-service.lck:false}") + private Boolean lckLoadExecutionCurrency; + public AProperties(CmdArgsParser argsParser) { period = argsParser.parsePeriodProperties(); LoggerFactory.getLogger(getClass()).info("Period from CMD: {}", period); @@ -60,6 +63,14 @@ public class AProperties { this.reportsStore = reportsStore; } + public Boolean getLckLoadExecutionCurrency() { + return lckLoadExecutionCurrency; + } + + public void setLckLoadExecutionCurrency(Boolean lckLoadExecutionCurrency) { + this.lckLoadExecutionCurrency = lckLoadExecutionCurrency; + } + public KafkaConsumerSettings getKafkaConsumer() { return kafkaConsumer; } diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/loaders/IDBLoader.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/loaders/IDBLoader.java index b4c14f366..d241bc645 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/loaders/IDBLoader.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/loaders/IDBLoader.java @@ -23,6 +23,7 @@ public abstract class IDBLoader { public List loadObjects() { log.trace("Загрузчик {}", getClass().getSimpleName()); + int count = 0; long timer = System.currentTimeMillis(); try { String sql = sqlQuery(); @@ -34,13 +35,15 @@ public abstract class IDBLoader { parameterSource.addValue("endDate", endDate); log.debug("Запрос SQL: \"{}\", с параметрами: startDate={}, endDate={}", sql, periodProperties.getStartDate(), endDate); - return clearingJdbc.query(sql, parameterSource, (rs, rowNum) -> fromRS(rs)); + List result = clearingJdbc.query(sql, parameterSource, (rs, rowNum) -> fromRS(rs)); + count = result.size(); + return result; } catch (Exception e) { log.error("Не могу загрузить объект класса %s, причина:".formatted(getDBObjectClass()), e); throw new RuntimeException(e); } finally { timer = System.currentTimeMillis() - timer; - log.debug("Загрузка {} завершена за {} ms", getDBObjectClass().getSimpleName(), timer); + log.debug("Загрузка {} завершена за {} ms. {} записей прочитано.", getDBObjectClass().getSimpleName(), timer, count); } } diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/loaders/RegistryLoader.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/loaders/RegistryLoader.java index 393334dea..c5f4ce830 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/loaders/RegistryLoader.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/reports/loaders/RegistryLoader.java @@ -6,9 +6,7 @@ import org.springframework.stereotype.Component; import ru.spcex.clearing.registry.conf.properties.AProperties; import ru.spcex.clearing.registry.reports.ReportUtils; import ru.spcex.clearing.registry.reports.bean.*; -import ru.spcex.clearing.registry.reports.loaders.helpers.ADictionaryRowMapper; -import ru.spcex.clearing.registry.reports.loaders.helpers.RegistryCodeSqlBuilder; -import ru.spcex.clearing.registry.reports.loaders.helpers.RegistryTradingParams; +import ru.spcex.clearing.registry.reports.loaders.helpers.*; import java.math.BigDecimal; import java.sql.ResultSet; @@ -75,7 +73,10 @@ public class RegistryLoader extends IDBLoader { @Override protected String sqlQuery() { - RegistryCodeSqlBuilder registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.OM_T, RegistryTradingParams.OS_T); + RegistryCodeSqlBuilder registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance( + RegistryTradingParams.OM_T, RegistryTradingParams.OS_T, + RegistryTradingParams.TM_T, RegistryTradingParams.TS_T + ); return ("select * from REGISTRY where SETTLEMENT_DATE >= :startDate and SETTLEMENT_DATE < :endDate " + "and (%s) and REGISTRY_STATUS='%s'") // and TRADING_CLEARING_REGISTRY is not null .formatted(registryCodeSqlBuilder.buildSql(), RegistryStatus.CLRD.getKey()); diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/RegisterUtilityRunner.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/RegisterUtilityRunner.java index d329aebeb..cff1d5af5 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/RegisterUtilityRunner.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/RegisterUtilityRunner.java @@ -3,15 +3,13 @@ package ru.spcex.clearing.registry.service; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import ru.spcex.clearing.registry.conf.properties.AProperties; import ru.spcex.clearing.registry.reports.bean.*; import ru.spcex.clearing.registry.reports.builders.*; import ru.spcex.clearing.registry.reports.loaders.*; import java.io.File; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.concurrent.*; @Service @@ -34,6 +32,7 @@ public class RegisterUtilityRunner { private final LiabilitiesRegistryReportBuilder liabilitiesRegistryReportBuilder; private final File outFolder; + private final boolean executionCurrencyLCK; public RegisterUtilityRunner(DepoInstructionLoader depoInstructionLoader, DepoBalanceLoader depoBalanceLoader, @@ -49,7 +48,8 @@ public class RegisterUtilityRunner { MoneyBalanceRegisterReportBuilder moneyBalanceRegisterReportBuilder, ExecutionRegisterReportBuilder executionRegisterReportBuilder, LiabilitiesRegistryReportBuilder liabilitiesRegistryReportBuilder, - File outFolder) { + File outFolder, + AProperties properties) { this.depoInstructionLoader = depoInstructionLoader; this.depoBalanceLoader = depoBalanceLoader; this.moneyInstructionLoader = moneyInstructionLoader; @@ -65,7 +65,8 @@ public class RegisterUtilityRunner { this.executionRegisterReportBuilder = executionRegisterReportBuilder; this.liabilitiesRegistryReportBuilder = liabilitiesRegistryReportBuilder; this.outFolder = outFolder; - log.info("Папка outFolder: {}", outFolder.getAbsolutePath()); + this.executionCurrencyLCK = properties.getLckLoadExecutionCurrency() == null ? false : properties.getLckLoadExecutionCurrency(); + log.info("Папка outFolder: \"{}\". Настройка LCK={}", outFolder.getAbsolutePath(), executionCurrencyLCK); } public void process() throws InterruptedException { @@ -113,10 +114,16 @@ public class RegisterUtilityRunner { moneyBalanceRegisterReportBuilder.buildReport(moneyBalances, outFolder); liabilitiesRegistryReportBuilder.buildReport(registrys, outFolder); - Set executionCommons = new HashSet<>(); + Collection executionCommons = new HashSet<>(); executionCommons.addAll(executionDeposits); executionCommons.addAll(executionFonds); - executionCommons.addAll(executionCurrencys); + if (executionCurrencyLCK) { + executionCommons = new ArrayList<>(executionCommons); + executionCommons.addAll(executionCurrencys); // без дедупликации по ExecutionCommon.ExchangeExecutionId + } else { + executionCommons.addAll(executionCurrencys); + } + log.debug("ExecutionCommons size={}, make execution report", executionCommons.size()); executionRegisterReportBuilder.buildReport(executionCommons, outFolder); log.info("Все отчёты завершены."); // todo возможно понадобится отсылать на SFTP ReportUtils.sendFilesToSftp diff --git a/clearing-parent/registry-service/src/main/resources/application.properties b/clearing-parent/registry-service/src/main/resources/application.properties index 303cff8ab..806c5dae6 100644 --- a/clearing-parent/registry-service/src/main/resources/application.properties +++ b/clearing-parent/registry-service/src/main/resources/application.properties @@ -6,6 +6,7 @@ registry-service.db-clearing.username=clearing registry-service.db-clearing.password=Aa111111 registry-service.outFolder=/opt/mfd/clearing/reestr_out/ +registry-service.LCK=true # use SFTP (not implemented): #registry-service.reports-store.local-temp-dir=./reports_out_temp