diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java index d7ff636d9..33ddce3d0 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java @@ -23,7 +23,7 @@ import java.util.*; import java.util.stream.Collectors; @Component -public class Bt17_1_P1_collector extends ReportDataCollector> { +public class Bt17_1_P1_collector extends ReportDataCollector { protected static final List ALLOW_CLEARING_MEMBER_CATEGORY = Arrays.asList(ClearingCategory.I.getKey(), ClearingCategory.V.getKey()); protected static final String ALLOW_CLEARING_STATUS = ClearingStatus.OK.getKey(); @@ -55,11 +55,15 @@ public class Bt17_1_P1_collector extends ReportDataCollector collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + public ReportBR_0420315_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { if (startDate.isAfter(endDate)) { throw new IllegalArgumentException("startDate(" + startDate + ") > endDate(" + endDate + ")"); } - List result = new ArrayList<>(); + ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(startDate, endDate, + "BR", + "I,V", // cmc.getClearingMemberCategory() + ALLOW_CLEARING_STATUS //clearingStatus.getCode() "OK" + ); ClearingStatusDictionary allowClearingStatus = clearingStatusDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", ALLOW_CLEARING_STATUS)); if (allowClearingStatus == null) { @@ -72,33 +76,35 @@ public class Bt17_1_P1_collector extends ReportDataCollector liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); - - for (LiabilitiesClaimsAssets liability : liabilities) { - final Long companyId = liability.getCompanyId(); + for (Map.Entry> companyEntry : indexByCompany.entrySet()) { + final Long companyId = companyEntry.getKey(); + List liabilitiesOfCompany = companyEntry.getValue(); Company company = companyImdg.getSingleObjectByID(companyId); if (company != null) { ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId)); String checkCategory = cmc == null ? null : cmc.getClearingMemberCategory(); if (!ALLOW_CLEARING_MEMBER_CATEGORY.contains(checkCategory)) { // фильтруются <> I, V - log.trace("Filtered ClearingMemberCategory[{}].ClearingMemberCategory={}", - cmc == null ? null : cmc.getId(), checkCategory); + log.trace("Filtered company[{}] ClearingMemberCategory[{}].ClearingMemberCategory={}", + companyId, cmc == null ? null : cmc.getId(), checkCategory); continue; } - ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(startDate, endDate, - "BR", - cmc.getClearingMemberCategory(), - ALLOW_CLEARING_STATUS //clearingStatus.getCode() "OK" - ); - Listing listing = findListing(Market.mkrs, liability.getSecurityId()); + HashSet onMarket = new HashSet<>(); - List allContract = indexByCompany.get(companyId); long contractorQty; double liabilitiesAmount = 0; { HashSet collectedToSumm = new HashSet<>(); // чтобы дважды не посчитать 1 и тот же контракт - for (LiabilitiesClaimsAssets lContract : allContract) { + HashSet onMarketSecurity=new HashSet<>(); + for (LiabilitiesClaimsAssets lContract : liabilitiesOfCompany) { + if (!onMarketSecurity.contains(lContract.getSecurityId())) { + Listing listing = findListing(Market.mkrs, lContract.getSecurityId()); + if (listing!= null) { + onMarket.add(listing.getMarket()); + } + onMarketSecurity.add(lContract.getSecurityId()); + } if (lContract.getPrice() != null && StringUtils.isNotEmpty(lContract.getContract()) && !collectedToSumm.contains(lContract.getContract())) { collectedToSumm.add(lContract.getContract()); @@ -107,18 +113,20 @@ public class Bt17_1_P1_collector extends ReportDataCollector