diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java index bf40cf2e6..557de76f0 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java @@ -93,6 +93,49 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder statusForExecution = new HashMap<>(); + executions.forEach(execution -> { + if (Set.of("S", "SELL").contains(execution.getSide())) { + String status = ""; + if (execution.getCoverageStatus() != null) { + Long groupId = execution.getExchangeExecutionId(); + String coverageStatus = execution.getCoverageStatus().toUpperCase(); + CoverageStatus coverage = IEnumKey.getEnumByKey(CoverageStatus.class, coverageStatus); + // Есть 2 пары Execution, SELL и BUY, статус определяем заранее по SELL и проставляем в BUY + if (coverage == CoverageStatus.DEND) { + if (execution instanceof ExecutionFond) { + ImdgPredicateBuilder pbRegistry = registryImdg.predicateBuilder(); + String registryPredicateStr = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams._S_T).build(); + Collection registryCollection = registryImdg.getCollectionObjectsByPredicate( + pbRegistry.and( + pbRegistry.equals("groupId", groupId), + pbRegistry.equals("companyId", execution.getCompanyId()), + pbRegistry.in("registryStatus", + RegistryStatus.NACC.getKey(), + RegistryStatus.NACK.getKey(), + RegistryStatus.FAIL.getKey(), + RegistryStatus.UNCV.getKey()), + pbRegistry.sql(registryPredicateStr) + ) + ); + if (registryCollection.isEmpty()) { + status = null; + } else { + Registry registry = registryCollection.iterator().next(); + RegistryStatus registryStatus = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus()); + if (registryStatus == RegistryStatus.NACK || registryStatus == RegistryStatus.UNCV) { + status = "3"; + } else if (registryStatus == RegistryStatus.NACC || registryStatus == RegistryStatus.FAIL) { + status = "2"; + } + } + } + statusForExecution.put(new ExecutionKey(groupId, execution.getSessionId()), status); + } + } + } + }); + rows = new ArrayList<>(executions.size()); for (ExecutionCommon execution : executions) { try { @@ -226,37 +269,17 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder registryCollection = registryImdg.getCollectionObjectsByPredicate( - pbRegistry.and( - pbRegistry.equals("groupId", groupId), - pbRegistry.equals("companyId", execution.getCompanyId()), - pbRegistry.in("registryStatus", - RegistryStatus.NACC.getKey(), - RegistryStatus.NACC.getKey(), - RegistryStatus.FAIL.getKey(), - RegistryStatus.UNCV.getKey()), - pbRegistry.sql(registryPredicateStr) - ) - ); - if (registryCollection.isEmpty()) { + status = statusForExecution.get(new ExecutionKey(groupId, execution.getSessionId())); + if (status == null) { log.warn( - "Broken execution (empty registries). Registry for groupId = {}, companyId = {} not found. Execution (id = {}) skipped", + "Broken execution (can't define status). Registry for groupId = {}, companyId = {} not found. Execution (id = {}) skipped", groupId, execution.getCompanyId(), execution.getId() ); continue; } - Registry registry = registryCollection.iterator().next(); - RegistryStatus registryStatus = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus()); - if (registryStatus == RegistryStatus.NACK || registryStatus == RegistryStatus.UNCV) { - status = "3"; - } else if (registryStatus == RegistryStatus.NACC || registryStatus == RegistryStatus.FAIL) { - status = "2"; - } } } } @@ -272,21 +295,6 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder registries, Collection registryStatuses) { - for (Registry registry : registries) { - RegistryStatus registryStatus = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus()); - if (registryStatuses.contains(registryStatus)) continue; - return false; - } - return true; - } - - private boolean checkRegistryInstrumentType(Collection registries, Collection RegistryInstrumentTypes) { - for (Registry registry : registries) { - RegistryInstrumentType RegistryInstrumentType = IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()); - if (RegistryInstrumentTypes.contains(RegistryInstrumentType)) continue; - return false; - } - return true; + private record ExecutionKey(Long groupId, Long sessionId) { } } 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 7552f4cdd..ad726dea2 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 @@ -642,7 +642,7 @@ public class ReportServiceTest_KS { executionFond.setQuantity(BigDecimal.valueOf(123.456789)); executionFond.setExchangeExecutionId(222L); executionFond.setExchangeExecutionTime(Instant.ofEpochMilli(LocalDateTime.of(2022, 1, 1, 1, 1, 1).toEpochSecond(ZoneOffset.UTC))); - executionFond.setCoverageStatus(CoverageStatus.ALWD.getKey()); + executionFond.setCoverageStatus(CoverageStatus.DEND.getKey()); executionFondImdg.insert(executionFond); Market market = new Market(); @@ -655,7 +655,7 @@ public class ReportServiceTest_KS { registry.setRegistryCode("_S_T"); registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); registry.setRegistryUnit(RegistryUnit.T.getKey()); - registry.setGroupId(Long.parseLong("%s%d%d".formatted(dateFormatter_yyyyMMdd.format(LocalDate.now()), 222, marketId))); + registry.setGroupId(222L); registry.setRegistryStatus(RegistryStatus.FAIL.getKey()); registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); registryImdg.insert(registry); diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_TRADES_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_TRADES_expected.csv index 8504a5ba0..29b0f1120 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_TRADES_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_TRADES_expected.csv @@ -2,4 +2,4 @@ "4","20.01.1970T07:09:07","222","CONTRACT","TRADING_CODE","TKR","","","8888.89","0","222","3333","20.01.1970T02:49:58","2" "3","20.01.1970T15:54:43","222","","TRADING_CODE","TKR","","","-8888.89","123","222","3333","20.01.1970T02:49:58","1" "3","20.01.1970T15:54:43","222","","TRADING_CODE","TKR","","","-8888.89","123","222","3333","20.01.1970T02:49:58","2" -"3","20.01.1970T15:54:43","222","","TRADING_CODE","TKR","","","8888.89","-123","222","3333","20.01.1970T02:49:58","1" +"3","20.01.1970T15:54:43","222","","TRADING_CODE","TKR","","","8888.89","-123","222","3333","20.01.1970T02:49:58","2"