diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java index df1f4b839..b6eb8dd60 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java @@ -1,63 +1,163 @@ package ru.spcex.clearing.reports.config; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import ru.spcex.clearing.reports.reports.*; import ru.spcex.clearing.reports.reports.bp.*; import ru.spcex.clearing.reports.reports.ks.*; import ru.spcex.platform.enumeration.ReportType; -import ru.spcex.platform.imdg.api.ImdgProvider; import java.util.HashMap; import java.util.List; import java.util.Map; @Configuration +@ComponentScan(basePackages = "ru.spcex.clearing.reports.reports") public class ReportBuildersConfig { @Bean("reportBuildersWithoutParams") - public Map>> reportBuildersWithoutParams(ImdgProvider imdgProvider) { + public Map>> reportBuildersWithoutParams( + SummaryLiabilitiesClaimsReportBuilder summaryLiabilitiesClaimsReportBuilder, + SummaryMoneyChangeReportBuilder summaryMoneyChangeReportBuilder, + KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder, + KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder, + KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder, + KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder, + KSRepTradesReportBuilder ksRepTradesReportBuilder, + KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder + ) { Map>> resultMap = new HashMap<>(); - resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, List.of(new SummaryLiabilitiesClaimsReportBuilder(imdgProvider))); - resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, List.of(new SummaryMoneyChangeReportBuilder(imdgProvider))); - resultMap.put(ReportType.KS_REP_CASH_REGISTERS, List.of(new KSRepCashRegistersReportBuilder(imdgProvider))); - resultMap.put(ReportType.KS_REP_CASH_REGISTER_SUMS, List.of(new KSRepCashRegisterSumsReportBuilder(imdgProvider))); - resultMap.put(ReportType.KS_REP_DEPO_REGISTERS, List.of(new KSRepDepoRegistersReportBuilder(imdgProvider))); - resultMap.put(ReportType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(new KSRepDepoRegisterQuantitiesReportBuilder(imdgProvider))); - resultMap.put(ReportType.KS_REP_TRADES, List.of(new KSRepTradesReportBuilder(imdgProvider))); - resultMap.put(ReportType.KS_REP_FIRM_DETAILS, List.of(new KSRepFirmDetailsReportBuilder(imdgProvider))); + resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, List.of(summaryLiabilitiesClaimsReportBuilder)); + resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, List.of(summaryMoneyChangeReportBuilder)); + resultMap.put(ReportType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); + resultMap.put(ReportType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder)); + resultMap.put(ReportType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder)); + resultMap.put(ReportType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder)); + resultMap.put(ReportType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder)); + resultMap.put(ReportType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder)); return resultMap; } @Bean("reportBuildersWithSessionIdParam") - public Map>> reportBuildersWithSessionIdParam(ImdgProvider imdgProvider) { + public Map>> reportBuildersWithSessionIdParam( + OperationalLiabilitiesClaimsReportBuilder operationalLiabilitiesClaimsReportBuilder, + OperationalMoneyChangeReportBuilder operationalMoneyChangeReportBuilder, + ExecutedDealReportBuilder_INFTYPE_1 executedDealReportBuilder_inftype_1, + ExecutedDealReportBuilder_INFTYPE_2 executedDealReportBuilder_inftype_2, + ExecutedDealReportBuilder_INFTYPE_3 executedDealReportBuilder_inftype_3, + ExecutedDealReportBuilder_INFTYPE_4 executedDealReportBuilder_inftype_4, + UnfulfilledDealReportBuilder unfulfilledDealReportBuilder, + KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, + KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder + ) { Map>> resultMap = new HashMap<>(); - resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, List.of(new OperationalLiabilitiesClaimsReportBuilder(imdgProvider))); - resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, List.of(new OperationalMoneyChangeReportBuilder(imdgProvider))); + resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, List.of(operationalLiabilitiesClaimsReportBuilder)); + resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, List.of(operationalMoneyChangeReportBuilder)); resultMap.put(ReportType.EXECUTED_DEAL_REPORT, List.of( - new ExecutedDealReportBuilder_INFTYPE_1(imdgProvider), - new ExecutedDealReportBuilder_INFTYPE_2(imdgProvider), - new ExecutedDealReportBuilder_INFTYPE_3(imdgProvider), - new ExecutedDealReportBuilder_INFTYPE_4(imdgProvider) + executedDealReportBuilder_inftype_1, + executedDealReportBuilder_inftype_2, + executedDealReportBuilder_inftype_3, + executedDealReportBuilder_inftype_4 ) ); - resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, List.of(new UnfulfilledDealReportBuilder(imdgProvider))); - resultMap.put(ReportType.KS_REP_CASH_NETTO, List.of(new KSRepCashNettoReportBuilder(imdgProvider))); - resultMap.put(ReportType.KS_REP_DEPO_NETTO, List.of(new KSRepDepoNettoReportBuilder(imdgProvider))); + resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, List.of(unfulfilledDealReportBuilder)); + resultMap.put(ReportType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder)); + resultMap.put(ReportType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder)); return resultMap; } @Bean("reportBuildersWithSessionIdListParam") - public Map>> reportBuildersWithSessionIdListParams(ImdgProvider imdgProvider) { + public Map>> reportBuildersWithSessionIdListParams( + PeriodLiabilitiesClaimsReportBuilder periodLiabilitiesClaimsReportBuilder + ) { Map>> resultMap = new HashMap<>(); - resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, List.of(new PeriodLiabilitiesClaimsReportBuilder(imdgProvider))); + resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, List.of(periodLiabilitiesClaimsReportBuilder)); return resultMap; } @Bean("reportBuildersWithPeriodParams") - public Map>> reportBuildersWithPeriodParams(ImdgProvider imdgProvider) { + public Map>> reportBuildersWithPeriodParams( + PeriodMoneyChangeReportBuilder periodMoneyChangeReportBuilder + ) { Map>> resultMap = new HashMap<>(); - resultMap.put(ReportType.PERIOD_MONEY_CHANGE, List.of(new PeriodMoneyChangeReportBuilder(imdgProvider))); + resultMap.put(ReportType.PERIOD_MONEY_CHANGE, List.of(periodMoneyChangeReportBuilder)); return resultMap; } + + @Bean("reportBuildersForGREP") + public Map>> reportBuildersForGREP( + SummaryLiabilitiesClaimsReportBuilder summaryLiabilitiesClaimsReportBuilder, + SummaryMoneyChangeReportBuilder summaryMoneyChangeReportBuilder, + KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder, + KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder, + KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder, + KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder, + KSRepTradesReportBuilder ksRepTradesReportBuilder, + KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder, + KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, + KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder, + PeriodLiabilitiesClaimsReportBuilder periodLiabilitiesClaimsReportBuilder, + PeriodMoneyChangeReportBuilder periodMoneyChangeReportBuilder + ) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, List.of(summaryLiabilitiesClaimsReportBuilder)); + resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, List.of(summaryMoneyChangeReportBuilder)); + resultMap.put(ReportType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); + resultMap.put(ReportType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder)); + resultMap.put(ReportType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder)); + resultMap.put(ReportType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder)); + resultMap.put(ReportType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder)); + resultMap.put(ReportType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder)); + resultMap.put(ReportType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder)); + resultMap.put(ReportType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder)); + resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, List.of(periodLiabilitiesClaimsReportBuilder)); + resultMap.put(ReportType.PERIOD_MONEY_CHANGE, List.of(periodMoneyChangeReportBuilder)); + return resultMap; + } + + @Bean("reportBuildersForGREF") + public Map>> reportBuildersForGREF( + KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder, + KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder, + KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder, + KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder, + KSRepTradesReportBuilder ksRepTradesReportBuilder, + KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder, + KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, + KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder + ) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); + resultMap.put(ReportType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder)); + resultMap.put(ReportType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder)); + resultMap.put(ReportType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder)); + resultMap.put(ReportType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder)); + resultMap.put(ReportType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder)); + resultMap.put(ReportType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder)); + resultMap.put(ReportType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder)); + return resultMap; + } + + @Bean("reportBuildersForGRET") + public Map>> reportBuildersForGRET( + ExecutedDealReportBuilder_INFTYPE_1 executedDealReportBuilder_inftype_1, + ExecutedDealReportBuilder_INFTYPE_2 executedDealReportBuilder_inftype_2, + ExecutedDealReportBuilder_INFTYPE_3 executedDealReportBuilder_inftype_3, + ExecutedDealReportBuilder_INFTYPE_4 executedDealReportBuilder_inftype_4, + UnfulfilledDealReportBuilder unfulfilledDealReportBuilder + ) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.EXECUTED_DEAL_REPORT, + List.of( + executedDealReportBuilder_inftype_1, + executedDealReportBuilder_inftype_2, + executedDealReportBuilder_inftype_3, + executedDealReportBuilder_inftype_4 + ) + ); + resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, List.of(unfulfilledDealReportBuilder)); + return resultMap; + } + } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java index 392dc6062..8b978a55d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java @@ -155,7 +155,7 @@ public class ValidationConfig { // todo оставил бин валидатора на будущее, если в дальнейшем придется проверять запрос. в текущей версии, по факту, // запрос не проверяется: в случае если sessionId не указан отчеты не строятся - @Bean("reportRequestGREP") + @Bean("reportRequestGREPValidator") public Function reportRequestGREPValidator( Map> imdgForValidation ) { @@ -174,7 +174,7 @@ public class ValidationConfig { // todo оставил бин валидатора на будущее, если в дальнейшем придется проверять запрос. в текущей версии, по факту, // запрос не проверяется: в случае если sessionId не указан отчеты не строятся - @Bean("reportRequestGRET") + @Bean("reportRequestGRETValidator") public Function reportRequestGRETValidator( Map> imdgForValidation ) { @@ -193,7 +193,7 @@ public class ValidationConfig { // todo оставил бин валидатора на будущее, если в дальнейшем придется проверять запрос. в текущей версии, по факту, // запрос не проверяется: в случае если sessionId не указан отчеты не строятся - @Bean("reportRequestGREF") + @Bean("reportRequestGREFValidator") public Function reportRequestGREFValidator( Map> imdgForValidation ) { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java index 04e18b1e3..a80df3a60 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java @@ -53,6 +53,11 @@ public abstract class CSVReportBuilder

{ */ public abstract ReportType getReportType(); + /** + * Тип параметров для построения отчетов + */ + public abstract Class

getParamsType(); + /** * Формирование отчета на основе параметров * diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/PairRegistryId.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/PairRegistryId.java index 59637f072..6db22f3fa 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/PairRegistryId.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/PairRegistryId.java @@ -38,4 +38,12 @@ public class PairRegistryId { public int hashCode() { return Objects.hash(groupId, settlementDate); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PairRegistryId that = (PairRegistryId) o; + return Objects.equals(groupId, that.groupId) && Objects.equals(settlementDate, that.settlementDate); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java index b7a630692..9d3a9f263 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java @@ -14,7 +14,10 @@ import java.math.RoundingMode; import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; public abstract class ExecutedDealReportBuilderCommon extends CSVReportBuilder { protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS"); @@ -55,17 +58,11 @@ public abstract class ExecutedDealReportBuilderCommon extends CSVReportBuilde protected void collect(T params) { Collection executionFonds = getExecutionFondsForReport(params); - Map activeCompanyForId = new HashMap<>(); lines = new ArrayList<>(executionFonds.size()); for (ExecutionFond executionFond : executionFonds) { try { - Boolean activeCompany = activeCompanyForId.get(executionFond.getCompanyId()); - if (activeCompany == null) { - Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId()); - activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()); - activeCompanyForId.put(executionFond.getCompanyId(), activeCompany); - } - if (!activeCompany) continue; + Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; STrades sTrade = null; if (executionFond.getSide() != null && executionFond.getExchangeExecutionId() != null) { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java index 065ff9f5e..19071be95 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -9,6 +12,8 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuilderCommon { public ExecutedDealReportBuilder_INFTYPE_1(ImdgProvider imdgProvider) { @@ -20,6 +25,11 @@ public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuild return "KS_BR_PFX64_INFTYPE_1_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); } + @Override + public Class getParamsType() { + return SessionIdParam.class; + } + @Override protected Collection getExecutionFondsForReport(SessionIdParam params) { ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java index 72fadba5e..0b7e667a6 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -9,6 +12,8 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuilderCommon { public ExecutedDealReportBuilder_INFTYPE_2(ImdgProvider imdgProvider) { @@ -20,6 +25,11 @@ public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuild return "KS_BR_PFX64_INFTYPE_2_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); } + @Override + public Class getParamsType() { + return SessionIdParam.class; + } + @Override protected Collection getExecutionFondsForReport(SessionIdParam params) { ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java index 0e3c8e934..58eef1888 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -9,6 +12,8 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuilderCommon { public ExecutedDealReportBuilder_INFTYPE_3(ImdgProvider imdgProvider) { @@ -20,6 +25,11 @@ public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuild return "KS_BR_PFX64_INFTYPE_3_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); } + @Override + public Class getParamsType() { + return SessionIdParam.class; + } + @Override protected Collection getExecutionFondsForReport(SessionIdParam params) { ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java index 1135aab9f..62776a52d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.platform.enumeration.Allowed; @@ -10,6 +13,8 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuilderCommon { public ExecutedDealReportBuilder_INFTYPE_4(ImdgProvider imdgProvider) { @@ -21,6 +26,11 @@ public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuild return "KS_BR_PFX64_INFTYPE_4_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); } + @Override + public Class getParamsType() { + return SessionIdParam.class; + } + @Override protected Collection getExecutionFondsForReport(SessionIdParam params) { ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java index dd7e6f9d5..af350ca84 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.SessionIdParam; @@ -10,6 +13,8 @@ import java.time.LocalDateTime; import java.util.Collection; import java.util.Map; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { public OperationalLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { super(imdgProvider); @@ -40,4 +45,9 @@ public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaims public ReportType getReportType() { return ReportType.OPERATIONAL_LIABILITIES_CLAIMS; } + + @Override + public Class getParamsType() { + return SessionIdParam.class; + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java index 24a1283d6..cb11e4571 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.platform.enumeration.ReportType; @@ -9,6 +12,8 @@ import java.time.LocalDateTime; import java.util.Collection; import java.util.Map; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder { public OperationalMoneyChangeReportBuilder(ImdgProvider imdgProvider) { super(imdgProvider); @@ -30,4 +35,9 @@ public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilde public ReportType getReportType() { return ReportType.OPERATIONAL_MONEY_CHANGE; } + + @Override + public Class getParamsType() { + return SessionIdParam.class; + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java index de8e639ea..784cfdca4 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.SessionIdListParams; @@ -13,6 +16,8 @@ import java.time.LocalDateTime; import java.util.Collection; import java.util.Collections; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { public PeriodLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { @@ -29,6 +34,11 @@ public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepor return ReportType.PERIOD_LIABILITIES_CLAIMS; } + @Override + public Class getParamsType() { + return SessionIdListParams.class; + } + @Override protected Collection getExecutionFondsForReport(SessionIdListParams params) { if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java index 547d7d5d7..3e8ce9c02 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java @@ -1,15 +1,21 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.reports.reports.PeriodParams; +import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import java.time.LocalDateTime; import java.util.Collection; -import java.util.stream.Collectors; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder { public PeriodMoneyChangeReportBuilder(ImdgProvider imdgProvider) { @@ -19,16 +25,14 @@ public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder getRegistryForReport(PeriodParams params) { ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); - Collection registries = registryImdg.getCollectionObjectsByPredicate( + String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CM__, RegistryTradingParams.LM__).build(); + return registryImdg.getCollectionObjectsByPredicate( pb.and( + pb.sql(sql), pb.greatEqual("clearingDate", params.getStartDate()), pb.lessEqual("clearingDate", params.getEndDate()) ) ); - registries = registries.stream() - .filter(registry -> registry.getRegistryCode().startsWith("CM") || registry.getRegistryCode().startsWith("LM")) - .collect(Collectors.toList()); - return registries; } @Override @@ -45,4 +49,9 @@ public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder getParamsType() { + return PeriodParams.class; + } + } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java index 9656aca33..feee8d1ee 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.EmptyParams; @@ -11,6 +14,8 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { public SummaryLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { super(imdgProvider); @@ -41,4 +46,9 @@ public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepo public ReportType getReportType() { return ReportType.SUMMARY_LIABILITIES_CLAIMS; } + + @Override + public Class getParamsType() { + return EmptyParams.class; + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java index e9272ff1d..fa9740942 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java @@ -1,16 +1,22 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.reports.reports.EmptyParams; +import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; -import java.util.stream.Collectors; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder { public SummaryMoneyChangeReportBuilder(ImdgProvider imdgProvider) { super(imdgProvider); @@ -20,18 +26,16 @@ public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder getRegistryForReport(EmptyParams param) { // todo отсечение по периоду - временный код, пока не решили как передавать в GREP период. // по изначальной задумке в summary отчет должны включаться все записи. + String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CM__, RegistryTradingParams.LM__).build(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); LocalDate now = LocalDate.now(); - Collection registries = registryImdg.getCollectionObjectsByPredicate( + return registryImdg.getCollectionObjectsByPredicate( pb.and( + pb.sql(sql), pb.greatEqual("clearingDate", now), pb.lessEqual("clearingDate", now) ) ); - registries = registries.stream() - .filter(registry -> registry.getRegistryCode().startsWith("CM") || registry.getRegistryCode().startsWith("LM")) - .collect(Collectors.toList()); - return registries; } @Override @@ -44,4 +48,9 @@ public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder getParamsType() { + return EmptyParams.class; + } + } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java index 20ceb6362..4db833d40 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.bp; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.misc.STrades; @@ -17,6 +20,8 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.time.LocalDateTime; import java.util.*; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class UnfulfilledDealReportBuilder extends CSVReportBuilder { private final Imdg executionFondImdg; private final Imdg companyImdg; @@ -52,6 +57,11 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder getParamsType() { + return SessionIdParam.class; + } + @Override protected void collect(SessionIdParam params) { ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java index 6179f58af..00a25ca19 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java @@ -23,10 +23,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Component @@ -65,6 +62,11 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder getParamsType() { + return SessionIdParam.class; + } + @Override protected void collect(SessionIdParam params) { LocalDate nowDate = LocalDate.now(); @@ -78,14 +80,12 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - - // todo check filter (skip register without log) - Map> registryMap = registries.stream() - .filter(r -> r.getGroupId() != null && r.getSettlementDate() != null) - .collect(Collectors.groupingBy(PairRegistryId::new)); + Map> registryMap = registries.stream().collect(Collectors.groupingBy(PairRegistryId::new)); lines = new ArrayList<>(registryMap.size()); for (Map.Entry> entry : registryMap.entrySet()) { @@ -113,8 +113,8 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; @@ -53,14 +62,20 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder getParamsType() { + return EmptyParams.class; + } + @Override protected void collect(EmptyParams params) { LocalDate nowDate = LocalDate.now(); Instant instantNow = Instant.now(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM__).build(); ImdgPredicate finalPredicate = pb.and( - pb.regex("registryCode", "AM.."), + pb.sql(sql), pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)), pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)), pb.or( @@ -69,18 +84,11 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - - Map activeCompanyForId = new HashMap<>(); lines = new ArrayList<>(registries.size()); for (Registry registry : registries) { try { - Boolean activeCompany = activeCompanyForId.get(registry.getCompanyId()); - if (activeCompany == null) { - Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); - activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()); - activeCompanyForId.put(registry.getCompanyId(), activeCompany); - } - if (!activeCompany) continue; + Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : ""; String account = registry.getAccount(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java index 17149c9fc..5e6b0d726 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.ks; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.platform.dictionary.RegistryCodeDictionary; @@ -7,19 +10,26 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.enumeration.WorkflowStatus; 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 java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class KSRepCashRegistersReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; @@ -56,14 +66,20 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder getParamsType() { + return EmptyParams.class; + } + @Override protected void collect(EmptyParams params) { LocalDate nowDate = LocalDate.now(); Instant instantNow = Instant.now(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM_T).build(); ImdgPredicate finalPredicate = pb.and( - pb.regex("registryCode", "AM.T"), + pb.sql(sql), pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)), pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)), pb.or( @@ -72,20 +88,11 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - - Map nameForRegisterCode = new HashMap<>(); - Map activeCompanyForId = new HashMap<>(); - lines = new ArrayList<>(registries.size()); for (Registry registry : registries) { try { - Boolean activeCompany = activeCompanyForId.get(registry.getCompanyId()); - if (activeCompany == null) { - Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); - activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()); - activeCompanyForId.put(registry.getCompanyId(), activeCompany); - } - if (!activeCompany) continue; + Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : ""; String account = registry.getAccount(); @@ -93,12 +100,9 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg sessionImdg; @@ -52,81 +62,72 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder getParamsType() { + return SessionIdParam.class; + } + @Override protected void collect(SessionIdParam params) { LocalDate nowDate = LocalDate.now(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.TS_T, RegistryTradingParams.OS_T).build(); ImdgPredicate finalPredicate = pb.and( pb.equals("sessionId", params.getSessionId()), pb.equals("clearingDate", nowDate), - pb.regex("registryCode","[T|O]S.T"), - pb.equals("accountType", AccountType.Depo.getKey()) + pb.sql(sql), + pb.equals("accountType", AccountType.Depo.getKey()), + pb.notNull("settlementDate"), + pb.notNull("groupId") ); Collection registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - Map registryAlreadySaved = new HashMap<>(); - Map ostRegistries = new HashMap<>(); - Map tstRegistries = new HashMap<>(); - for (Registry registry : registries) { - if (registry.getGroupId() == null || registry.getSettlementDate() == null) continue; - registryAlreadySaved.put(registry.getGroupId() + registry.getSettlementDate().toString(), false); - if (registry.getRegistryCode().startsWith("O")) { - Registry existOSTRegistry = ostRegistries.get(registry.getGroupId() + registry.getSettlementDate().toString()); - if (existOSTRegistry != null && existOSTRegistry.getBalance() != null) { - log.warn("Duplicated registry OM*T (id = {} and id = {}). Use id = {}", - registry.getId(), - existOSTRegistry, - existOSTRegistry); - } else ostRegistries.put(registry.getGroupId() + registry.getSettlementDate().toString(), registry); - } - if (registry.getRegistryCode().startsWith("T")) { - Registry existTSTRegistry = tstRegistries.get(registry.getGroupId() + registry.getSettlementDate().toString()); - if (existTSTRegistry != null && existTSTRegistry.getBalance() != null) { - log.warn("Duplicated registry TM*T (id = {} and id = {}). Use id = {}", - registry.getId(), - existTSTRegistry, - existTSTRegistry); - } else tstRegistries.put(registry.getGroupId() + registry.getSettlementDate().toString(), registry); - } - } - - Map createdAtForSessionId = new HashMap<>(); + Map> registryMap = registries.stream().collect(Collectors.groupingBy(PairRegistryId::new)); lines = new ArrayList<>(registries.size()); - for (Registry registry : registries) { + for (Map.Entry> entry : registryMap.entrySet()) { + PairRegistryId pairRegistryId = entry.getKey(); + List groupedRegistry = entry.getValue(); try { - if (registry.getGroupId() == null || registry.getSettlementDate() == null) { - log.warn("Registry without GroupId or SettlementDate, id = {}. Skipped", registry.getId()); - continue; - } - if (registryAlreadySaved.get(registry.getGroupId() + registry.getSettlementDate().toString())) continue; - - Registry tstRegistry = tstRegistries.get(registry.getGroupId() + registry.getSettlementDate().toString()); - Registry ostRegistry = ostRegistries.get(registry.getGroupId() + registry.getSettlementDate().toString()); - - if (!tstRegistry.getTradingCode().equalsIgnoreCase(ostRegistry.getTradingCode()) || - !tstRegistry.getSessionId().equals(ostRegistry.getSessionId()) || - !tstRegistry.getAccount().equals(ostRegistry.getAccount())) { - log.warn("Invalid registry OS*T (id = {}) and TS*T (id = {}) registry pair: fields not equal. GroupId = {}, SettlementDate = {}. Skipped", - ostRegistry.getId(), - tstRegistry.getId(), - registry.getSettlementDate(), - registry.getGroupId()); + if (groupedRegistry.size() != 2) { + log.warn("Invalid OM_T and TM_T registries for GroupId = {} and SettlementDate = {}. Registries with id = [{}] was skipped", + pairRegistryId.getGroupId(), + pairRegistryId.getSettlementDate(), + groupedRegistry.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(", ")) + ); continue; } - String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : ""; - String sessionId = String.valueOf(registry.getSessionId()); - - String sessionDate = createdAtForSessionId.get(registry.getSessionId()); - if (sessionDate == null) { - Session session = sessionImdg.getSingleObjectByID(registry.getSessionId()); - sessionDate = session != null && session.getCreated() != null ? dateTimeFormatter.format(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault())) : ""; - createdAtForSessionId.put(registry.getSessionId(), sessionDate); + Registry tstRegistry = null; + Registry ostRegistry = null; + for (Registry registry : groupedRegistry) { + if (RegistryDesignation.O.equalsByKey(registry.getRegistryDesignation())) ostRegistry = registry; + if (RegistryDesignation.T.equalsByKey(registry.getRegistryDesignation())) tstRegistry = registry; } - String account = registry.getAccount(); - String securityId = registry.getSecuritySymbol() != null ? registry.getSecuritySymbol() : ""; + if (tstRegistry == null || ostRegistry == null) { + log.warn("Invalid TM_T and OM_T registry pair, {} doubled. Registry pair was skipped", tstRegistry == null ? "OM_T" : "TM_T"); + continue; + } + + + if (!Objects.equals(tstRegistry.getTradingCode(), ostRegistry.getTradingCode()) || + !Objects.equals(tstRegistry.getAccount(), ostRegistry.getAccount()) || + !Objects.equals(tstRegistry.getSecuritySymbol(), ostRegistry.getSecuritySymbol())) { + log.warn("Invalid TS_T and OS_T registry pair, account/tradingCode/securityId not equals. Registry pair was skipped"); + continue; + } + + String firmId = tstRegistry.getTradingCode() != null ? tstRegistry.getTradingCode() : ""; + String sessionId = String.valueOf(tstRegistry.getSessionId()); + + Session session = sessionImdg.getSingleObjectByID(tstRegistry.getSessionId()); + String sessionDate = ""; + if (session != null && session.getCreated() != null) + sessionDate = dateTimeFormatter.format(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault())); + + String account = tstRegistry.getAccount(); + String securityId = tstRegistry.getSecuritySymbol() != null ? tstRegistry.getSecuritySymbol() : ""; BigDecimal tmtBalance = tstRegistry.getBalance() != null ? tstRegistry.getBalance() : BigDecimal.ZERO; BigDecimal omtBalance = ostRegistry.getBalance() != null ? ostRegistry.getBalance() : BigDecimal.ZERO; @@ -145,9 +146,12 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder String.valueOf(r.getId())).collect(Collectors.joining(", ")) + ), 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 3a496306a..d2363cfb9 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 @@ -1,24 +1,33 @@ package ru.spcex.clearing.reports.reports.ks; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.enumeration.WorkflowStatus; 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 java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; @@ -53,32 +62,31 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder getParamsType() { + return EmptyParams.class; + } + @Override protected void collect(EmptyParams params) { LocalDate nowDate = LocalDate.now(); Instant instantNow = Instant.now(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AS__).build(); ImdgPredicate finalPredicate = pb.and( - pb.regex("registryCode", "AS.."), + pb.sql(sql), pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)), pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)), pb.equals("accountType", AccountType.Depo.getKey()) ); Collection registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - Map activeCompanyForId = new HashMap<>(); - lines = new ArrayList<>(registries.size()); for (Registry registry : registries) { try { - Boolean activeCompany = activeCompanyForId.get(registry.getCompanyId()); - if (activeCompany == null) { - Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); - activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()); - activeCompanyForId.put(registry.getCompanyId(), activeCompany); - } - if (!activeCompany) continue; + Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : ""; String account = registry.getAccount(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java index f42fbe86c..63f4169fa 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.ks; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.platform.dictionary.RegistryCodeDictionary; @@ -7,19 +10,26 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.enumeration.WorkflowStatus; 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 java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; @@ -56,33 +66,31 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder getParamsType() { + return EmptyParams.class; + } + @Override protected void collect(EmptyParams params) { LocalDate nowDate = LocalDate.now(); Instant instantNow = Instant.now(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AS_T).build(); ImdgPredicate finalPredicate = pb.and( - pb.regex("registryCode", "AS.T"), + pb.sql(sql), pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)), pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)), pb.equals("accountType", AccountType.Depo.getKey()) ); Collection registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - Map nameForRegisterCode = new HashMap<>(); - Map activeCompanyForId = new HashMap<>(); - lines = new ArrayList<>(registries.size()); for (Registry registry : registries) { try { - Boolean activeCompany = activeCompanyForId.get(registry.getCompanyId()); - if (activeCompany == null) { - Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); - activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()); - activeCompanyForId.put(registry.getCompanyId(), activeCompany); - } - if (!activeCompany) continue; + Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : ""; String account = registry.getAccount(); @@ -90,12 +98,9 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder { private final Imdg companyImdg; private final Imdg companySymbolsImdg; @@ -58,10 +61,12 @@ public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder } @Override - protected void collect(EmptyParams params) { - LocalDate nowDate = LocalDate.now(); - Instant instantNow = Instant.now(); + public Class getParamsType() { + return EmptyParams.class; + } + @Override + protected void collect(EmptyParams params) { Collection companies = companyImdg.getCollectionObjectsByFieldValues(Map.of("workflowStatus", WorkflowStatus.Active.getKey())); lines = new ArrayList<>(companies.size()); 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 ea0b15836..ba9ff8730 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 @@ -1,5 +1,8 @@ package ru.spcex.clearing.reports.reports.ks; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.execution.ExecutionCommon; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; @@ -9,13 +12,11 @@ import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; -import ru.spcex.platform.enumeration.CoverageStatus; -import ru.spcex.platform.enumeration.RegistryInstrumentType; -import ru.spcex.platform.enumeration.RegistryStatus; -import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; 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.LocalDate; @@ -24,6 +25,8 @@ import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class KSRepTradesReportBuilder extends CSVReportBuilder { private final Imdg executionDepositImdg; private final Imdg executionFondImdg; @@ -64,6 +67,11 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder { return ReportType.KS_REP_TRADES; } + @Override + public Class getParamsType() { + return EmptyParams.class; + } + @Override protected void collect(EmptyParams params) { LocalDate nowDate = LocalDate.now(); @@ -84,7 +92,6 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder { Map sessionDateForSessionId = new HashMap<>(); lines = new ArrayList<>(executions.size()); for (ExecutionCommon execution : executions) { - boolean brokenExecution = false; try { String sessionId = execution.getSessionId() != null ? String.valueOf(execution.getSessionId()) : ""; @@ -141,9 +148,15 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder { execution.getExchangeExecutionId(), execution.getMarket() ); + String sql = RegistryCodeSqlBuilder.getInstance( + RegistryTradingParams.OS_T, + RegistryTradingParams.TS_T, + RegistryTradingParams.OM_T, + RegistryTradingParams.TM_T + ).build(); Collection registryCollection = registryImdg.getCollectionObjectsByPredicate( pb.and( - pb.regex("registryCode", "[O|T][S|M].[T]"), + pb.sql(sql), pb.equals("groupId", groupId) ) ); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java index 468ff4430..fa4682674 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java @@ -39,6 +39,7 @@ public class ReportService extends QueueConsumer implements InitializingBean { private final UserRoleVerification userRoleVerification; private final ValidationHelper validationHelper; private final KafkaSender kafkaSender; + private final Function reportRequestValidator; private final Function reportRequestWithSessionIdValidator; private final Function reportRequestWithSessionIdListValidator; @@ -46,10 +47,14 @@ public class ReportService extends QueueConsumer implements InitializingBean { private final Function reportRequestGREPValidator; private final Function reportRequestGRETValidator; private final Function reportRequestGREFValidator; + private final Map>> reportBuildersWithoutParams; private final Map>> reportBuildersWithSessionIdParam; private final Map>> reportBuildersWithSessionIdListParam; private final Map>> reportBuildersWithPeriodParams; + private final Map>> reportBuildersForGREP; + private final Map>> reportBuildersForGREF; + private final Map>> reportBuildersForGRET; private final File outFolder; @@ -59,6 +64,7 @@ public class ReportService extends QueueConsumer implements InitializingBean { UserRoleVerification userRoleVerification, ValidationHelper validationHelper, ReportsServiceSettings reportsServiceSettings, + @Qualifier("reportBuildersWithoutParams") Map>> reportBuildersWithoutParams, @Qualifier("reportBuildersWithSessionIdParam") @@ -67,6 +73,14 @@ public class ReportService extends QueueConsumer implements InitializingBean { Map>> reportBuildersWithSessionIdListParam, @Qualifier("reportBuildersWithPeriodParams") Map>> reportBuildersWithPeriodParams, + + @Qualifier("reportBuildersForGREP") + Map>> reportBuildersForGREP, + @Qualifier("reportBuildersForGREF") + Map>> reportBuildersForGREF, + @Qualifier("reportBuildersForGRET") + Map>> reportBuildersForGRET, + @Qualifier("reportRequestValidator") Function reportRequestValidator, @Qualifier("reportRequestWithSessionIdValidator") @@ -75,12 +89,15 @@ public class ReportService extends QueueConsumer implements InitializingBean { Function reportRequestWithSessionIdListValidator, @Qualifier("reportRequestWithPeriodValidator") Function reportRequestWithPeriodValidator, - @Qualifier("reportRequestGREP") + + @Qualifier("reportRequestGREPValidator") Function reportRequestGREPValidator, - @Qualifier("reportRequestGRET") + @Qualifier("reportRequestGRETValidator") Function reportRequestGRETValidator, - @Qualifier("reportRequestGREF") - Function reportRequestGREFValidator) { + @Qualifier("reportRequestGREFValidator") + Function reportRequestGREFValidator + + ) { super(kafkaQueue, kafkaResponseQueue); this.userRoleVerification = userRoleVerification; this.validationHelper = validationHelper; @@ -97,6 +114,9 @@ public class ReportService extends QueueConsumer implements InitializingBean { this.reportRequestGRETValidator = reportRequestGRETValidator; this.reportRequestGREFValidator = reportRequestGREFValidator; this.outFolder = new File(reportsServiceSettings.getReportModuleOut()); + this.reportBuildersForGREP = reportBuildersForGREP; + this.reportBuildersForGREF = reportBuildersForGREF; + this.reportBuildersForGRET = reportBuildersForGRET; assert outFolder.isDirectory(); } @@ -275,94 +295,15 @@ public class ReportService extends QueueConsumer implements InitializingBean { public RequestInfoUpdate createReportForGREP(BaseRequest userRequest) { log.debug("GREP task received"); + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREPValidator); if (requestInfoUpdate != null) return null; - - Long sessionId = userRequest.getRequestPayload().getSessionId(); - logUnknownProperties(userRequest); - int cntErrors = 0; - Map outFilenames = new HashMap<>(); - - Collection>> buildersWithoutParams = reportBuildersWithoutParams.values(); - for (List> builderList : buildersWithoutParams) { - for (CSVReportBuilder builder : builderList) { - File outFile = builder.createReport(new EmptyParams(), outFolder); - if (outFile == null) { - log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); - cntErrors++; - continue; - } - outFilenames.put(outFile.getName(), builder.getReportType()); - } - } - - if (sessionId != null) { - - Collection>> buildersWithSessionIdParam = reportBuildersWithSessionIdParam.values(); - for (List> builderList : buildersWithSessionIdParam) { - for (CSVReportBuilder builder : builderList) { - // todo возможно, для тасков GRET/GREP/GREF стоит сделать отдельные коллекции с билдерами, чтобы не проверять эти условия - if ( - builder.getReportType() == ReportType.OPERATIONAL_MONEY_CHANGE || - builder.getReportType() == ReportType.OPERATIONAL_LIABILITIES_CLAIMS || - builder.getReportType() == ReportType.UNFULFILLED_DEAL_REPORT || - builder.getReportType() == ReportType.EXECUTED_DEAL_REPORT - ) { - continue; - } - SessionIdParam sessionIdParam = new SessionIdParam(); - sessionIdParam.setSessionId(sessionId); - File outFile = builder.createReport(sessionIdParam, outFolder); - if (outFile == null) { - log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); - cntErrors++; - continue; - } - outFilenames.put(outFile.getName(), builder.getReportType()); - } - } - - Collection>> buildersWithSessionIdListParam = reportBuildersWithSessionIdListParam.values(); - for (List> builderList : buildersWithSessionIdListParam) { - for (CSVReportBuilder builder : builderList) { - SessionIdListParams sessionIdListParams = new SessionIdListParams(); - sessionIdListParams.setSessionIdList(List.of(sessionId)); - File outFile = builder.createReport(sessionIdListParams, outFolder); - if (outFile == null) { - log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); - cntErrors++; - continue; - } - outFilenames.put(outFile.getName(), builder.getReportType()); - } - } - - } - - LocalDate now = LocalDate.now(); - Collection>> buildersWithPeriodParams = reportBuildersWithPeriodParams.values(); - for (List> builderList : buildersWithPeriodParams) { - for (CSVReportBuilder builder : builderList) { - PeriodParams periodParams = new PeriodParams(); - periodParams.setStartDate(now); - periodParams.setEndDate(now); - File outFile = builder.createReport(periodParams, outFolder); - if (outFile == null) { - log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); - cntErrors++; - continue; - } - outFilenames.put(outFile.getName(), builder.getReportType()); - } - } - - if (cntErrors == 0) log.debug("All reports successfully created. Output files: {}", String.join(", ", outFilenames.keySet())); - else log.debug("Some reports ({}) create failed. Output files: {}", cntErrors, String.join(", ", outFilenames.keySet())); + Long sessionId = userRequest.getRequestPayload().getSessionId(); + Map outFilenames = createReportsForTask(sessionId, reportBuildersForGREP.values()); sendReportsToGateway(sessionId, outFilenames, "REPORT_KS_TMP"); return null; @@ -370,46 +311,15 @@ public class ReportService extends QueueConsumer implements InitializingBean { public RequestInfoUpdate createReportForGRET(BaseRequest userRequest) { log.debug("GRET task received"); + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGRETValidator); if (requestInfoUpdate != null) return null; - - Long sessionId = userRequest.getRequestPayload().getSessionId(); - logUnknownProperties(userRequest); - int cntErrors = 0; - Map outFilenames = new HashMap<>(); - - if (sessionId != null) { - - Collection>> buildersWithSessionIdParam = reportBuildersWithSessionIdParam.values(); - for (List> builderList : buildersWithSessionIdParam) { - for (CSVReportBuilder builder : builderList) { - // todo возможно, для тасков GRET/GREP/GREF стоит сделать отдельные коллекции с билдерами, чтобы не проверять эти условия - if ( - builder.getReportType() != ReportType.UNFULFILLED_DEAL_REPORT && - builder.getReportType() != ReportType.EXECUTED_DEAL_REPORT - ) { - continue; - } - SessionIdParam sessionIdParam = new SessionIdParam(); - sessionIdParam.setSessionId(sessionId); - File outFile = builder.createReport(sessionIdParam, outFolder); - if (outFile == null) { - log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); - cntErrors++; - continue; - } - outFilenames.put(outFile.getName(), builder.getReportType()); - } - } - } - - if (cntErrors == 0) log.debug("All reports successfully created. Output files: {}", String.join(", ", outFilenames.keySet())); - else log.debug("Some reports ({}) create failed. Output files: {}", cntErrors, String.join(", ", outFilenames.keySet())); + Long sessionId = userRequest.getRequestPayload().getSessionId(); + Map outFilenames = createReportsForTask(sessionId, reportBuildersForGRET.values()); sendReportsToGateway(sessionId, outFilenames, null); return null; @@ -420,55 +330,56 @@ public class ReportService extends QueueConsumer implements InitializingBean { RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREFValidator); if (requestInfoUpdate != null) return null; - - Long sessionId = userRequest.getRequestPayload().getSessionId(); - logUnknownProperties(userRequest); - int cntErrors = 0; + Long sessionId = userRequest.getRequestPayload().getSessionId(); + Map outFilenames = createReportsForTask(sessionId, reportBuildersForGREF.values()); + + sendReportsToGateway(sessionId, outFilenames, "REPORT_KS_FINAL"); + return null; + } + + private Map createReportsForTask(Long sessionId, Collection>> buildersForTask) { Map outFilenames = new HashMap<>(); - - Collection>> buildersWithoutParams = reportBuildersWithoutParams.values(); - for (List> builderList : buildersWithoutParams) { - for (CSVReportBuilder builder : builderList) { - // todo возможно, для тасков GRET/GREP/GREF стоит сделать отдельные коллекции с билдерами, чтобы не проверять эти условия - if ( - builder.getReportType() != ReportType.KS_REP_CASH_REGISTERS && - builder.getReportType() != ReportType.KS_REP_CASH_REGISTER_SUMS && - builder.getReportType() != ReportType.KS_REP_DEPO_REGISTERS && - builder.getReportType() != ReportType.KS_REP_DEPO_REGISTER_QUANTITIES && - builder.getReportType() != ReportType.KS_REP_TRADES && - builder.getReportType() != ReportType.KS_REP_FIRM_DETAILS - ) { - continue; - } - File outFile = builder.createReport(new EmptyParams(), outFolder); - if (outFile == null) { - log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); - cntErrors++; - continue; - } - outFilenames.put(outFile.getName(), builder.getReportType()); - } - } - - if (sessionId != null) { - Collection>> buildersWithSessionIdParam = reportBuildersWithSessionIdParam.values(); - for (List> builderList : buildersWithSessionIdParam) { - for (CSVReportBuilder builder : builderList) { - // todo возможно, для тасков GRET/GREP/GREF стоит сделать отдельные коллекции с билдерами, чтобы не проверять эти условия - if ( - builder.getReportType() != ReportType.KS_REP_CASH_NETTO && - builder.getReportType() != ReportType.KS_REP_DEPO_NETTO - ) { + int cntErrors = 0; + LocalDate now = LocalDate.now(); + for (List> builders : buildersForTask) { + for (CSVReportBuilder builder : builders) { + if (builder.getParamsType() == EmptyParams.class) { + File outFile = ((CSVReportBuilder) builder).createReport(new EmptyParams(), outFolder); + if (outFile == null) { + log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); + cntErrors++; continue; } + outFilenames.put(outFile.getName(), builder.getReportType()); + } else if (builder.getParamsType() == SessionIdParam.class && sessionId != null) { SessionIdParam sessionIdParam = new SessionIdParam(); sessionIdParam.setSessionId(sessionId); - File outFile = builder.createReport(sessionIdParam, outFolder); + File outFile = ((CSVReportBuilder) builder).createReport(sessionIdParam, outFolder); + if (outFile == null) { + log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); + cntErrors++; + continue; + } + outFilenames.put(outFile.getName(), builder.getReportType()); + } else if (builder.getParamsType() == SessionIdListParams.class && sessionId != null) { + SessionIdListParams sessionIdListParams = new SessionIdListParams(); + sessionIdListParams.setSessionIdList(List.of(sessionId)); + File outFile = ((CSVReportBuilder) builder).createReport(sessionIdListParams, outFolder); + if (outFile == null) { + log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); + cntErrors++; + continue; + } + outFilenames.put(outFile.getName(), builder.getReportType()); + } else if (builder.getParamsType() == PeriodParams.class) { + PeriodParams periodParams = new PeriodParams(); + periodParams.setStartDate(now); + periodParams.setEndDate(now); + File outFile = ((CSVReportBuilder) builder).createReport(periodParams, outFolder); if (outFile == null) { log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); cntErrors++; @@ -478,12 +389,10 @@ public class ReportService extends QueueConsumer implements InitializingBean { } } } - if (cntErrors == 0) log.debug("All reports successfully created. Output files: {}", String.join(", ", outFilenames.keySet())); else log.debug("Some reports ({}) create failed. Output files: {}", cntErrors, String.join(", ", outFilenames.keySet())); - sendReportsToGateway(sessionId, outFilenames, "REPORT_KS_FINAL"); - return null; + return outFilenames; } private void sendReportsToGateway(Long sessionId, Map reportsWithReportType, String type) { diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java index 5592409b2..2e174aade 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java @@ -779,6 +779,8 @@ public class ReportServiceTest_BP { testRegistry_1.setAccountId(TEST_MONEY_ACCOUNT_1); String TEST_REGISTRY_CODE_1 = "CM"; testRegistry_1.setRegistryCode(TEST_REGISTRY_CODE_1); + testRegistry_1.setRegistryDesignation(RegistryDesignation.C.getKey()); + testRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); testRegistry_1.setOpenBalance(TEST_OPEN_BALANCE_1); testRegistry_1.setCloseBalance(TEST_CLOSE_BALANCE_1); testRegistry_1.setCredit(TEST_CREDIT_1); @@ -797,6 +799,8 @@ public class ReportServiceTest_BP { testRegistry_2.setAccountId(TEST_MONEY_ACCOUNT_2); String TEST_REGISTRY_CODE_2 = "CM"; testRegistry_2.setRegistryCode(TEST_REGISTRY_CODE_2); + testRegistry_2.setRegistryDesignation(RegistryDesignation.C.getKey()); + testRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); testRegistry_2.setOpenBalance(TEST_OPEN_BALANCE_2); testRegistry_2.setCloseBalance(TEST_CLOSE_BALANCE_2); testRegistry_2.setCredit(TEST_CREDIT_2); @@ -810,15 +814,27 @@ public class ReportServiceTest_BP { testRegistryForCompanyId_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2); testRegistryForCompanyId_2.setUpdated(Instant.now()); tm_tRegistry_1.setRegistryCode("TM_T"); + tm_tRegistry_1.setRegistryDesignation(RegistryDesignation.T.getKey()); + tm_tRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + tm_tRegistry_1.setRegistryUnit(RegistryUnit.T.getKey()); tm_tRegistry_1.setBalance(BigDecimal.valueOf(779L)); tm_tRegistry_1.setUpdated(Instant.now()); om_tRegistry_1.setRegistryCode("OM_T"); + om_tRegistry_1.setRegistryDesignation(RegistryDesignation.O.getKey()); + om_tRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + om_tRegistry_1.setRegistryUnit(RegistryUnit.T.getKey()); om_tRegistry_1.setBalance(BigDecimal.valueOf(2L)); om_tRegistry_1.setUpdated(Instant.now()); ts_tRegistry_1.setRegistryCode("TS_T"); + ts_tRegistry_1.setRegistryDesignation(RegistryDesignation.T.getKey()); + ts_tRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); + ts_tRegistry_1.setRegistryUnit(RegistryUnit.T.getKey()); ts_tRegistry_1.setBalance(BigDecimal.valueOf(889L)); ts_tRegistry_1.setUpdated(Instant.now()); os_tRegistry_1.setRegistryCode("OS_T"); + os_tRegistry_1.setRegistryDesignation(RegistryDesignation.O.getKey()); + os_tRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); + os_tRegistry_1.setRegistryUnit(RegistryUnit.T.getKey()); os_tRegistry_1.setBalance(BigDecimal.valueOf(1L)); os_tRegistry_1.setUpdated(Instant.now()); tm_tRegistry_1.setSessionId(TEST_SESSION_ID_1); @@ -826,15 +842,27 @@ public class ReportServiceTest_BP { 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.setRegistryDesignation(RegistryDesignation.T.getKey()); + tm_tRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + tm_tRegistry_2.setRegistryUnit(RegistryUnit.T.getKey()); tm_tRegistry_2.setBalance(BigDecimal.valueOf(779L)); tm_tRegistry_2.setUpdated(Instant.now()); om_tRegistry_2.setRegistryCode("OM_T"); + om_tRegistry_2.setRegistryDesignation(RegistryDesignation.O.getKey()); + om_tRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + om_tRegistry_2.setRegistryUnit(RegistryUnit.T.getKey()); om_tRegistry_2.setBalance(BigDecimal.valueOf(2L)); om_tRegistry_2.setUpdated(Instant.now()); ts_tRegistry_2.setRegistryCode("TS_T"); + ts_tRegistry_2.setRegistryDesignation(RegistryDesignation.T.getKey()); + ts_tRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); + ts_tRegistry_2.setRegistryUnit(RegistryUnit.T.getKey()); ts_tRegistry_2.setBalance(BigDecimal.valueOf(889L)); ts_tRegistry_2.setUpdated(Instant.now()); os_tRegistry_2.setRegistryCode("OS_T"); + os_tRegistry_2.setRegistryDesignation(RegistryDesignation.O.getKey()); + os_tRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); + os_tRegistry_2.setRegistryUnit(RegistryUnit.T.getKey()); os_tRegistry_2.setBalance(BigDecimal.valueOf(1L)); os_tRegistry_2.setUpdated(Instant.now()); tm_tRegistry_2.setSessionId(TEST_SESSION_ID_2); diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java index 5040ee734..8940e0117 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java @@ -128,6 +128,9 @@ public class ReportServiceTest_KS { Registry registry = new Registry(); registry.setCompanyId(COMPANY_ID); registry.setRegistryCode("AM_T"); + registry.setRegistryDesignation(RegistryDesignation.A.getKey()); + registry.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + registry.setRegistryUnit(RegistryUnit.T.getKey()); registry.setUpdated(Instant.now()); registry.setTradingCode("TRADING_CODE"); registry.setAccount("ACCOUNT"); @@ -169,6 +172,8 @@ 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"); @@ -210,6 +215,9 @@ public class ReportServiceTest_KS { Registry registry = new Registry(); registry.setCompanyId(COMPANY_ID); registry.setRegistryCode("AS_T"); + registry.setRegistryDesignation(RegistryDesignation.A.getKey()); + registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); + registry.setRegistryUnit(RegistryUnit.T.getKey()); registry.setUpdated(Instant.now()); registry.setTradingCode("TRADING_CODE"); registry.setAccount("ACCOUNT"); @@ -251,6 +259,8 @@ 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"); @@ -308,6 +318,9 @@ public class ReportServiceTest_KS { Registry registry = new Registry(); registry.setSessionId(sessionId_2); registry.setRegistryCode("OM_T"); + registry.setRegistryDesignation(RegistryDesignation.O.getKey()); + registry.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + registry.setRegistryUnit(RegistryUnit.T.getKey()); registry.setGroupId(Long.parseLong("%s%d%s".formatted(dateFormatter_yyMMdd.format(LocalDate.now()), 222, "333"))); registry.setRegistryStatus(RegistryStatus.FAIL.getKey()); registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); @@ -365,6 +378,9 @@ public class ReportServiceTest_KS { registry_1.setGroupId(Long.MAX_VALUE); registry_1.setClearingDate(LocalDate.now()); registry_1.setRegistryCode("OM_T"); + registry_1.setRegistryDesignation(RegistryDesignation.O.getKey()); + registry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + registry_1.setRegistryUnit(RegistryUnit.T.getKey()); registry_1.setSessionId(sessionId); registry_1.setAccount("ACCOUNT"); registry_1.setAccountType(AccountType.Clrn.getKey()); @@ -377,6 +393,9 @@ public class ReportServiceTest_KS { registry_2.setGroupId(Long.MAX_VALUE); registry_2.setClearingDate(LocalDate.now()); registry_2.setRegistryCode("TM_T"); + registry_2.setRegistryDesignation(RegistryDesignation.T.getKey()); + registry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + registry_2.setRegistryUnit(RegistryUnit.T.getKey()); registry_2.setSessionId(sessionId); registry_2.setAccount("ACCOUNT"); registry_2.setAccountType(AccountType.Clrn.getKey()); @@ -421,6 +440,9 @@ public class ReportServiceTest_KS { registry_1.setGroupId(Long.MAX_VALUE); registry_1.setSettlementDate(LocalDate.now()); registry_1.setRegistryCode("TS_T"); + registry_1.setRegistryDesignation(RegistryDesignation.T.getKey()); + registry_1.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); + registry_1.setRegistryUnit(RegistryUnit.T.getKey()); registry_1.setSecuritySymbol("SECURITY_SYMBOL"); registry_1.setSessionId(sessionId); registry_1.setAccount("ACCOUNT"); @@ -434,6 +456,9 @@ public class ReportServiceTest_KS { registry_2.setGroupId(Long.MAX_VALUE); registry_2.setSettlementDate(LocalDate.now()); registry_2.setRegistryCode("OS_T"); + registry_2.setRegistryDesignation(RegistryDesignation.O.getKey()); + registry_2.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); + registry_2.setRegistryUnit(RegistryUnit.T.getKey()); registry_2.setSecuritySymbol("SECURITY_SYMBOL"); registry_2.setSessionId(sessionId); registry_2.setAccount("ACCOUNT"); diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java index 8271d2bb6..03512296f 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java @@ -34,6 +34,8 @@ public record RegistryTradingParams(RegistryDesignation registryDesignation, public final static RegistryTradingParams DM__; public final static RegistryTradingParams AM__; public final static RegistryTradingParams AS__; + public final static RegistryTradingParams CM__; + public final static RegistryTradingParams LM__; static { OS_T = new RegistryTradingParams(RegistryDesignation.O, @@ -117,6 +119,14 @@ public record RegistryTradingParams(RegistryDesignation registryDesignation, RegistryInstrumentType.S, null, null); + CM__ = new RegistryTradingParams(RegistryDesignation.C, + RegistryInstrumentType.M, + null, + null); + LM__ = new RegistryTradingParams(RegistryDesignation.L, + RegistryInstrumentType.M, + null, + null); } } diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java index a7f2dc192..efb410793 100644 --- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java @@ -40,6 +40,11 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder { return new ImdgPredicateHazelcast(Predicates.lessThan(key, cmpValue)); } + @Override + public ImdgPredicate notNull(String key) { + return new ImdgPredicateHazelcast(Predicates.not(Predicates.equal(key, null))); + } + @Override public ImdgPredicate in(String key, Comparable[] values) { return new ImdgPredicateHazelcast(Predicates.in(key, values)); diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java index dba3f77e8..187f43ae6 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java @@ -6,6 +6,7 @@ public interface ImdgPredicateBuilder { ImdgPredicate lessEqual(String key, Comparable value); ImdgPredicate greater(String key, Comparable value); ImdgPredicate less(String key, Comparable value); + ImdgPredicate notNull(String key); ImdgPredicate in(String key, Comparable... values);