diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashRegisterSumsReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashRegisterSumsReport.java index 22b72a380..2a2e54da2 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashRegisterSumsReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashRegisterSumsReport.java @@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.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; @@ -28,10 +29,12 @@ public class KSRepCashRegisterSumsReport { @CsvBindByName(column = "ADD_TIME") @CsvBindByPosition(position = 4) + @CsvDate(value = "HH:mm:ss") private LocalTime addTime; @CsvBindByName(column = "ADD_DATE") @CsvBindByPosition(position = 5) + @CsvDate(value = "dd.MM.yyyy") private LocalDate addDate; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoRegisterQuantitiesReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoRegisterQuantitiesReport.java index 20efa2ca7..941fd4aed 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoRegisterQuantitiesReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoRegisterQuantitiesReport.java @@ -33,6 +33,7 @@ public class KSRepDepoRegisterQuantitiesReport { @CsvBindByName(column = "ADD_TIME") @CsvBindByPosition(position = 5) + @CsvDate(value = "HH:mm:ss") private LocalTime addTime; @CsvBindByName(column = "ADD_DATE") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilder.java index 73fac3484..5a1f8c6ed 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegisterSumsReportBuilder.java @@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.reports.ks; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.registry.Registry; +import ru.clearing.classes.statics.data.statement.Statement; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; @@ -12,10 +13,12 @@ import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; -import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; +import ru.spcex.platform.utils.enumeration.IEnumKey; import java.time.Instant; import java.time.LocalDate; +import java.time.LocalTime; +import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collection; @@ -23,14 +26,16 @@ import java.util.List; @Component public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder { + private final Imdg statementImdg; private final Imdg registryImdg; private final Imdg companyImdg; private List rows = null; public KSRepCashRegisterSumsReportBuilder(ImdgProvider imdgProvider) { - registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); } @Override @@ -63,48 +68,65 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - rows = new ArrayList<>(registries.size()); - for (Registry registry : registries) { + Collection statements = statementImdg.getCollectionObjectsByPredicate(finalPredicate); + rows = new ArrayList<>(statements.size()); + for (Statement statement : statements) { try { - Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); + Company company = companyImdg.getSingleObjectByID(statement.getAddresseeId()); if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; - // Если есть одновременно registry.credit и registry.debit, записываем две записи по одному registry - if (registry.getCredit() != null) { - KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport(); - ksRepCashRegisterSumsReport.setFirmId(registry.getTradingCode()); - ksRepCashRegisterSumsReport.setAccount(registry.getAccount()); - ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode()); - ksRepCashRegisterSumsReport.setAddDate(nowDate); - ksRepCashRegisterSumsReport.setAddTime(null); - ksRepCashRegisterSumsReport.setAddSum(registry.getCredit()); - rows.add(ksRepCashRegisterSumsReport); - } - if (registry.getDebit() != null) { - KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport(); - ksRepCashRegisterSumsReport.setFirmId(registry.getTradingCode()); - ksRepCashRegisterSumsReport.setAccount(registry.getAccount()); - ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode()); - ksRepCashRegisterSumsReport.setAddDate(nowDate); - ksRepCashRegisterSumsReport.setAddTime(null); - ksRepCashRegisterSumsReport.setAddSum(registry.getDebit().negate()); - rows.add(ksRepCashRegisterSumsReport); + ImdgPredicateBuilder pbRegistry = registryImdg.predicateBuilder(); + Registry registry = registryImdg.getSingleObjectByPredicate( + pbRegistry.and( + pbRegistry.equals("companyId", statement.getAddresseeId()), + pbRegistry.equals("account", statement.getAccount()), + pbRegistry.in("accountType", AccountType.Clrn.getKey(), AccountType.Info.getKey()), + pbRegistry.notNull("registryCode") + ) + ); + if (registry == null) { + log.warn( + "Can't find registry for companyId = {} and account = {}. Statement id = {} skipped", + statement.getAddresseeId(), + statement.getAccount(), + statement.getId() + ); + continue; } + KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport(); + ksRepCashRegisterSumsReport.setFirmId(String.valueOf(statement.getAddresseeId())); + ksRepCashRegisterSumsReport.setAccount(statement.getAccount()); + ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode()); + ksRepCashRegisterSumsReport.setAddDate(nowDate); + ksRepCashRegisterSumsReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), ZoneId.systemDefault())); + + InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection()); + if (inOutDirection == InOutDirection.in) { + ksRepCashRegisterSumsReport.setAddSum(statement.getAmount()); + } else if (inOutDirection == InOutDirection.out) { + ksRepCashRegisterSumsReport.setAddSum(statement.getAmount().negate()); + } else { + log.warn( + "Invalid statement.in_out_direction ({}). Statement id = {} skipped", + statement.getInOutDirection(), + statement.getId() + ); + continue; + } + + rows.add(ksRepCashRegisterSumsReport); + } catch (Throwable e) { - log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e); + log.error("Can't create report row for registry (id = %d), skipped".formatted(statement.getId()), e); } } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegisterQuantitiesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegisterQuantitiesReportBuilder.java index e3133d21a..e757d7b1c 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegisterQuantitiesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegisterQuantitiesReportBuilder.java @@ -2,7 +2,12 @@ package ru.spcex.clearing.reports.reports.ks; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; +import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; import ru.clearing.classes.statics.data.registry.Registry; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.Security; +import ru.clearing.classes.statics.data.statement.Statement; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; @@ -12,10 +17,12 @@ import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; -import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; +import ru.spcex.platform.utils.enumeration.IEnumKey; import java.time.Instant; import java.time.LocalDate; +import java.time.LocalTime; +import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Collection; @@ -23,14 +30,22 @@ import java.util.List; @Component public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder { + private final Imdg statementImdg; private final Imdg registryImdg; private final Imdg companyImdg; + private final Imdg fixedIncomeSecurityImdg; + private final Imdg equitySecurityImdg; + private final Imdg moneyMarketSecurityImdg; private List rows = null; public KSRepDepoRegisterQuantitiesReportBuilder(ImdgProvider imdgProvider) { + statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class); + equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); + moneyMarketSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class); } @Override @@ -63,49 +78,102 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); + Collection statements = statementImdg.getCollectionObjectsByPredicate(finalPredicate); - rows = new ArrayList<>(registries.size()); - for (Registry registry : registries) { + rows = new ArrayList<>(statements.size()); + for (Statement statement : statements) { try { - Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); + Company company = companyImdg.getSingleObjectByID(statement.getAddresseeId()); if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; - // Если есть одновременно registry.credit и registry.debit, записываем две записи по одному registry - if (registry.getCredit() != null) { - KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport(); - ksRepDepoRegisterQuantitiesReport.setFirmId(registry.getTradingCode()); - ksRepDepoRegisterQuantitiesReport.setAccount(registry.getAccount()); - ksRepDepoRegisterQuantitiesReport.setSecurityId(registry.getSecuritySymbol()); - ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode()); - ksRepDepoRegisterQuantitiesReport.setAddTime(null); - ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate); - ksRepDepoRegisterQuantitiesReport.setAddQuantity(registry.getCredit()); - rows.add(ksRepDepoRegisterQuantitiesReport); - } - if (registry.getDebit() != null) { - KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport(); - ksRepDepoRegisterQuantitiesReport.setFirmId(registry.getTradingCode()); - ksRepDepoRegisterQuantitiesReport.setAccount(registry.getAccount()); - ksRepDepoRegisterQuantitiesReport.setSecurityId(registry.getSecuritySymbol()); - ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode()); - ksRepDepoRegisterQuantitiesReport.setAddTime(null); - ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate); - ksRepDepoRegisterQuantitiesReport.setAddQuantity(registry.getDebit().negate()); - rows.add(ksRepDepoRegisterQuantitiesReport); + ImdgPredicateBuilder pbRegistry = registryImdg.predicateBuilder(); + Registry registry = registryImdg.getSingleObjectByPredicate( + pbRegistry.and( + pbRegistry.equals("companyId", statement.getAddresseeId()), + pbRegistry.equals("account", statement.getAccount()), + pbRegistry.equals("accountType", AccountType.Depo.getKey()), + pbRegistry.notNull("registryCode") + ) + ); + if (registry == null) { + log.warn( + "Can't find registry for companyId = {} and account: {}. Statement id = {} skipped", + statement.getAddresseeId(), + statement.getAccount(), + statement.getId() + ); + continue; } + Security security = getSecurityWithSecuritySymbolForId(statement.getSecurityId()); + if (security == null) { + log.warn( + "Can't find security for securityId = {}. Statement id = {} skipped", + statement.getSecurityId(), + statement.getId() + ); + continue; + } + + KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport(); + ksRepDepoRegisterQuantitiesReport.setFirmId(String.valueOf(statement.getAddresseeId())); + ksRepDepoRegisterQuantitiesReport.setAccount(statement.getAccount()); + ksRepDepoRegisterQuantitiesReport.setSecurityId(security.getSecuritySymbol()); + ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode()); + ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate); + ksRepDepoRegisterQuantitiesReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), ZoneId.systemDefault())); + + InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection()); + if (inOutDirection == InOutDirection.in) { + ksRepDepoRegisterQuantitiesReport.setAddQuantity(statement.getAmount()); + } else if (inOutDirection == InOutDirection.out) { + ksRepDepoRegisterQuantitiesReport.setAddQuantity(statement.getAmount().negate()); + } else { + log.warn( + "Invalid statement.in_out_direction ({}). Statement id = {} skipped", + statement.getInOutDirection(), + statement.getId() + ); + continue; + } + + rows.add(ksRepDepoRegisterQuantitiesReport); } catch (Throwable e) { - log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e); + log.error("Can't create report row for registry (id = %d), skipped".formatted(statement.getId()), e); } } } + + private Security getSecurityWithSecuritySymbolForId(Long securityId) { + Security security; + security = equitySecurityImdg.getFirstObjectByPredicate( + equitySecurityImdg.predicateBuilder().and( + equitySecurityImdg.predicateBuilder().equals("securityId", securityId), + equitySecurityImdg.predicateBuilder().notNull("securitySymbol") + ) + ); + if (security == null) { + security = fixedIncomeSecurityImdg.getFirstObjectByPredicate( + fixedIncomeSecurityImdg.predicateBuilder().and( + fixedIncomeSecurityImdg.predicateBuilder().equals("securityId", securityId), + fixedIncomeSecurityImdg.predicateBuilder().notNull("securitySymbol") + ) + ); + } + if (security == null) + security = moneyMarketSecurityImdg.getFirstObjectByPredicate( + moneyMarketSecurityImdg.predicateBuilder().and( + moneyMarketSecurityImdg.predicateBuilder().equals("securityId", securityId), + moneyMarketSecurityImdg.predicateBuilder().notNull("securitySymbol") + ) + ); + return security; + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java index eb64ecb38..d135fc090 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java @@ -123,11 +123,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder statementImdg; private Imdg registryImdg; private Imdg marketImdg; private Imdg companyImdg; @@ -79,6 +82,7 @@ public class ReportServiceTest_KS { private Imdg sessionImdg; private Imdg companySymbolsImdg; private Imdg profileDocumentImdg; + private Imdg equitySecurityImdg; private Long COMPANY_ID; @Autowired @@ -161,17 +165,21 @@ public class ReportServiceTest_KS { Registry registry_1 = new Registry(); registry_1.setCompanyId(COMPANY_ID); - registry_1.setRegistryCode("AM__"); - registry_1.setRegistryDesignation(RegistryDesignation.A.getKey()); - registry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); - registry_1.setUpdated(Instant.now()); - registry_1.setTradingCode("TRADING_CODE"); registry_1.setAccount("ACCOUNT"); registry_1.setAccountType(AccountType.Clrn.getKey()); - registry_1.setDebit(BigDecimal.valueOf(22.2222222)); - registry_1.setCredit(BigDecimal.valueOf(44.4444444)); + registry_1.setRegistryCode(RegistryCode.T.getKey()); registryImdg.insert(registry_1); + Statement statement_1 = new Statement(); + statement_1.setAddresseeId(COMPANY_ID); + statement_1.setAccount("ACCOUNT"); + statement_1.setInOutDirection(InOutDirection.in.getKey()); + statement_1.setInOutSDfType(InOutSDfType.type6.getKey()); + statement_1.setOperationStatus(OperationStatus.Executed.getKey()); + statement_1.setAmount(BigDecimal.valueOf(7777.777777777)); + statement_1.setUpdated(Instant.now()); + statementImdg.insert(statement_1); + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), @@ -184,9 +192,10 @@ public class ReportServiceTest_KS { File outFile = outFolder.listFiles()[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/ks/KS_REP_CASH_REGISTER_SUMS_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("ADD_DATE")); + compareCSVFiles(expectedFile, outFile, Arrays.asList("FIRMID", "ADD_DATE", "ADD_TIME")); registryImdg.delete(registry_1); + statementImdg.delete(statement_1); } @Test @@ -248,18 +257,27 @@ public class ReportServiceTest_KS { Registry registry_1 = new Registry(); registry_1.setCompanyId(COMPANY_ID); - registry_1.setRegistryCode("AS__"); - registry_1.setRegistryDesignation(RegistryDesignation.A.getKey()); - registry_1.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); - registry_1.setSecuritySymbol("SECURITY_SYMBOL"); - registry_1.setUpdated(Instant.now()); - registry_1.setTradingCode("TRADING_CODE"); registry_1.setAccount("ACCOUNT"); registry_1.setAccountType(AccountType.Depo.getKey()); - registry_1.setDebit(BigDecimal.valueOf(22.2222222)); - registry_1.setCredit(BigDecimal.valueOf(44.4444444)); + registry_1.setRegistryCode(RegistryCode.T.getKey()); registryImdg.insert(registry_1); + EquitySecurity equitySecurity = new EquitySecurity(); + equitySecurity.setSecuritySymbol("value"); + equitySecurity.setSecurityId(777L); + equitySecurityImdg.insert(equitySecurity); + + Statement statement_1 = new Statement(); + statement_1.setAddresseeId(COMPANY_ID); + statement_1.setAccount("ACCOUNT"); + statement_1.setInOutDirection(InOutDirection.in.getKey()); + statement_1.setInOutSDfType(InOutSDfType.type10.getKey()); + statement_1.setOperationStatus(OperationStatus.Executed.getKey()); + statement_1.setAmount(BigDecimal.valueOf(7777.777777777)); + statement_1.setUpdated(Instant.now()); + statement_1.setSecurityId(777L); + statementImdg.insert(statement_1); + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), @@ -272,9 +290,11 @@ public class ReportServiceTest_KS { File outFile = outFolder.listFiles()[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/ks/KS_REP_DEPO_REGISTER_QUANTITIES_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("ADD_DATE")); + compareCSVFiles(expectedFile, outFile, Arrays.asList("FIRMID", "ADD_DATE", "ADD_TIME")); registryImdg.delete(registry_1); + equitySecurityImdg.delete(equitySecurity); + statementImdg.delete(statement_1); } @Test @@ -560,15 +580,6 @@ public class ReportServiceTest_KS { session_1.setClearingDate(LocalDate.now()); sessionImdg.insert(session_1); - Session session_2 = new Session(); - session_2.setCreated(Instant.ofEpochSecond(3777777777L)); - session_2.setUpdated(Instant.ofEpochSecond(4777777777L)); - session_2.setSection(Section.FOND.getKey()); - session_2.setSessionType(SessionType.IPO0.getKey()); - session_2.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); - session_2.setClearingDate(LocalDate.now()); - sessionImdg.insert(session_2); - ReportRequest reportRequest = new ReportRequest(); reportRequest.setReportId(ReportBuilderType.KS_SESSION_LIST.getKey()); @@ -587,7 +598,6 @@ public class ReportServiceTest_KS { compareCSVFiles(expectedFile, outFile, List.of("ID")); sessionImdg.delete(session_1); - sessionImdg.delete(session_2); } @@ -652,6 +662,8 @@ public class ReportServiceTest_KS { companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class); + statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); + equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); } private void clearTestDir() throws IOException { diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTER_SUMS_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTER_SUMS_expected.csv index aaa222cf8..e8f3dac99 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTER_SUMS_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTER_SUMS_expected.csv @@ -1,3 +1,2 @@ "FIRMID","ACCOUNT","REGISTER_CODE","ADD_SUM","ADD_TIME","ADD_DATE" -"TRADING_CODE","ACCOUNT","AM__","44.44","","2023-07-07" -"TRADING_CODE","ACCOUNT","AM__","-22.22","","2023-07-07" +"1","ACCOUNT","T","7777.78","17:00:50","17.07.2023" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTER_QUANTITIES_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTER_QUANTITIES_expected.csv index 04165ce73..6f948818a 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTER_QUANTITIES_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTER_QUANTITIES_expected.csv @@ -1,3 +1,2 @@ "FIRMID","ACCOUNT","SECURITYID","REGISTER_CODE","ADD_QUANTITY","ADD_TIME","ADD_DATE" -"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","44.44","","07.07.2023" -"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","-22.22","","07.07.2023" +"1","ACCOUNT","value","T","7777.78","18:39:59","17.07.2023" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_SESSION_LIST_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_SESSION_LIST_expected.csv index 374a8343d..371bcb9a9 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_SESSION_LIST_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_SESSION_LIST_expected.csv @@ -1,3 +1,2 @@ "ID","CREATED_AT","UPDATED_AT","SESSION_DATE","SESSION_TYPE","WORKFLOW_STATUS" "2","03.05.2026T03:09:37","09.01.2058T04:56:17","MKR","FINL","ACTV" -"3","17.09.2089T06:42:57","27.05.2121T08:29:37","FOND","IPO0","BLKD" diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java index 5854e19dc..bb92d6dd0 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java @@ -3,7 +3,14 @@ package ru.spcex.platform.enumeration; import ru.spcex.platform.utils.enumeration.IEnumKey; public enum InOutSDfType implements IEnumKey { - type1("0102"), type6("0607"), type16("1617"), type9("0910"), type57("57"), type08("0809"); + type1("0102"), + type6("0607"), + type16("1617"), + type9("0910"), + type57("57"), + type08("0809"), + type10("1011"), + ; private final String key; diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java index 808422510..fa7708a22 100644 --- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java @@ -296,6 +296,15 @@ public class ImdgHazelcast implements Imdg { return els.size() == 1 ? els.iterator().next() : null; } + @Override + public T getFirstObjectByPredicate(ImdgPredicate predicate) { + Collection els = getCollectionObjectsByPredicate(predicate); + Iterator iterator = els.iterator(); + if (iterator.hasNext()) { + return iterator.next(); + } else return null; + } + @Override public ImdgPredicateBuilder predicateBuilder() { return ImdgPredicateBuilderHazelcast.instance(); diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/Imdg.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/Imdg.java index e30ea8f30..9beb042df 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/Imdg.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/Imdg.java @@ -114,6 +114,11 @@ public interface Imdg { throw new UnsupportedOperationException("not implemented getSingleObjectByPredicate"); } + // Predicate API + default T getFirstObjectByPredicate(ImdgPredicate predicate) { + throw new UnsupportedOperationException("not implemented getFirstObjectByPredicate"); + } + default ImdgPredicateBuilder predicateBuilder() { throw new UnsupportedOperationException("not implemented predicateBuilder API"); }