From c4734252df808bc8fd245768cd4b922f8ed10461 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Tue, 20 Dec 2022 15:04:24 +0300 Subject: [PATCH 01/13] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-25=20?= =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-26=20=D0=BD=D0=B0=D1=87?= =?UTF-8?q?=D0=B0=D0=BB=D0=BE=20http://jira.mfd.msk:8088/browse/CLS-29=20-?= =?UTF-8?q?=20=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=BA=D1=83=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=B4=D0=BB=D1=8F=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=87=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=B9=20=D0=BE=D1=82=D1=87=D1=91=D1=82=D0=B0.=20TO?= =?UTF-8?q?=20DO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reports/services/ReportDataCollector.java | 30 +++++--- ...ollector.java => Bt17_1_P1_collector.java} | 74 ++++++++++++------ .../collector/Bt17_1_P2_collector.java | 62 +++++++++++++++ .../services/collector/Bt17_2_collector.java | 76 +++++++++++++++++++ .../collector/Bt17_5_P1_collector.java | 64 ++++++++++++++++ .../reports/services/collector/MapUtil.java | 33 ++++++++ .../services/impl/Bt17_1_collectorTest.java | 4 +- .../enumeration/ClearingCategory.java | 27 +++++++ .../ru/spcex/platform/enumeration/Market.java | 18 +++++ 9 files changed, 354 insertions(+), 34 deletions(-) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{Bt17_1_collector.java => Bt17_1_P1_collector.java} (53%) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/MapUtil.java create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ClearingCategory.java create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Market.java diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java index a3d5683e0..e2e2ea972 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java @@ -4,12 +4,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.spcex.clearing.reports.reports.AbstractReport; +import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; -public abstract class ReportDataCollector { +public abstract class ReportDataCollector { public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss"); @@ -20,15 +21,15 @@ public abstract class ReportDataCollector { * T extends ReportWithPeriod * @return */ - abstract public List collectReportWithPeriod(LocalDate startDate, LocalDate endDate); + abstract public R collectReportWithPeriod(LocalDate startDate, LocalDate endDate); - /** - * T extends ReportWithClearingStatus - * @param startDate - * @param endDate - * @return - */ - abstract public List collectReportWithClearingStatus(LocalDate startDate, LocalDate endDate, String clearingStatus); +// /** +// * T extends ReportWithClearingStatus +// * @param startDate +// * @param endDate +// * @return +// */ +// abstract public List collectReportWithClearingStatus(LocalDate startDate, LocalDate endDate, String clearingStatus); /** * @@ -38,4 +39,15 @@ public abstract class ReportDataCollector { * @return */ abstract public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow); + + + protected String toString(Long val) { + if (val == null) return null; + return val.toString(); + } + + protected String toString(Instant val) { + if (val == null) return null; + return DATE_TIME_FORMATTER.format(val);//todo проверить работает ли - юниттест. + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java similarity index 53% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java index e3d323dac..f704921f3 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java @@ -11,17 +11,22 @@ import ru.clearing.platform.dictionary.ClearingStatusDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P1; import ru.spcex.clearing.reports.services.ReportDataCollector; +import ru.spcex.platform.enumeration.ClearingCategory; import ru.spcex.platform.enumeration.ClearingStatus; +import ru.spcex.platform.enumeration.Market; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; @Component -public class Bt17_1_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(); + private Imdg companyImdg; private Imdg liabilitiesClaimsAssetsImdg; private Imdg clearingMemberCategoryImdg; @@ -29,7 +34,7 @@ public class Bt17_1_collector extends ReportDataCollector { private Imdg listingImdg; @Autowired - public Bt17_1_collector(ImdgProvider imdgProvider) { + public Bt17_1_P1_collector(ImdgProvider imdgProvider) { companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); @@ -46,41 +51,69 @@ public class Bt17_1_collector extends ReportDataCollector { String ql = String.format("'%s' <= refundDate and refundDate <= '%s'", startDate, endDate); Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); - for (LiabilitiesClaimsAssets liability : liabilities) { + + ClearingStatusDictionary allowClearingStatus = clearingStatusDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", ALLOW_CLEARING_STATUS)); + if (allowClearingStatus == null) { + throw new IllegalStateException("ClearingStatusDictionary with code=\"" + ALLOW_CLEARING_STATUS + "\" not fount"); + } + final Long allowClearingStatusId = allowClearingStatus.getId(); // "OK" + Collection filteredLiabilities = liabilities.stream() + .filter(liability -> allowClearingStatusId.equals(liability.getClearingStatus())) + .collect(Collectors.toList()); + Map> indexByCompany = MapUtil.indexList(filteredLiabilities, LiabilitiesClaimsAssets::getCompanyId); + + for (LiabilitiesClaimsAssets liability : filteredLiabilities) { final Long companyId = liability.getCompanyId(); Company company = companyImdg.getSingleObjectByID(companyId); if (company != null) { ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId)); - if (cmc == null || !Arrays.asList("I", "V", "I,V").contains(cmc.getClearingMemberCategory())) { - //todo уточнить фильтр need filter by I, V? + String checkCategory = cmc == null? null : cmc.getClearingMemberCategory(); + if (!ALLOW_CLEARING_MEMBER_CATEGORY.contains(cmc.getClearingMemberCategory())) { + // фильтруются <> I, V log.trace("Filtered ClearingMemberCategory[{}].ClearingMemberCategory={}", cmc == null ? null : cmc.getId(), cmc == null ? null : cmc.getClearingMemberCategory()); continue; } - ClearingStatusDictionary clearingStatus = clearingStatusDictionaryImdg.getSingleObjectByID(liability.getClearingStatus()); - if (clearingStatus == null || !ClearingStatus.OK.getKey().equals(clearingStatus.getCode())) { - continue; - } +// ClearingStatusDictionary clearingStatus = clearingStatusDictionaryImdg.getSingleObjectByID(liability.getClearingStatus()); +// if (clearingStatus == null || !ALLOW_CLEARING_STATUS.contains(clearingStatus.getCode())) { +// // фильтруются <> "OK" уже была, never +// log.warn("Found after filter LiabilitiesClaimsAssets[{}].getClearingStatus={}", liability.getId(), liability.getClearingStatus()); +// continue; +// } ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(startDate, endDate, "BR", cmc.getClearingMemberCategory(), - clearingStatus.getCode()); + ALLOW_CLEARING_STATUS //clearingStatus.getCode() "OK" + ); Listing listing; { Map qParam = new HashMap<>(); - qParam.put("market", "MKRS"); // todo use const + qParam.put("market", Market.MKRS.getKey()); qParam.put("securityId", liability.getSecurityId()); listing = listingImdg.getSingleObjectByFieldValues(qParam); } -// liability.getPrice()// todo как там с учётом валют это делать? - Integer contractorQty = StringUtils.isEmpty(liability.getContract()) ? 0 : 1; // todo то суммировать надо. Связь похоже много к 1. // liability.getContract() В данное поле необходимо записать общее количество исполненных договоров, шт. элемент contract из бизнес-объекта liabilitiesClaimsAssets - BigDecimal liabilitiesAmount = liability.getPrice() == null ? BigDecimal.ZERO : liability.getPrice(); // todo как правильно считать? - ReportBR_0420315_P1.Info_0420315_P1 info_0420315_p1 = new ReportBR_0420315_P1.Info_0420315_P1("companyId", + + + List allContract = indexByCompany.get(companyId); + long contractorQty; + double liabilitiesAmount = 0; + { + HashSet collectedToSumm = new HashSet<>(); // чтобы дважды не посчитать 1 и тот же контракт + for (LiabilitiesClaimsAssets lContract : allContract) { + if (lContract.getPrice()!=null && StringUtils.isNotEmpty(lContract.getContract()) + && !collectedToSumm.contains(lContract.getContract())) { + collectedToSumm.add(lContract.getContract()); + liabilitiesAmount += lContract.getLiabilitiesQuantity().doubleValue(); + } + } + contractorQty = collectedToSumm.size(); + } + ReportBR_0420315_P1.Info_0420315_P1 info_0420315_p1 = new ReportBR_0420315_P1.Info_0420315_P1(company.getId().toString(), company.getFullName(), listing == null ? null : listing.getMarket(), - contractorQty.toString(), - liabilitiesAmount.toString()); + String.valueOf(contractorQty), + String.valueOf(liabilitiesAmount)); reportBR_0420315_p1.getRows().add(info_0420315_p1); result.add(reportBR_0420315_p1); @@ -90,11 +123,6 @@ public class Bt17_1_collector extends ReportDataCollector { return result; } - @Override - public List collectReportWithClearingStatus(LocalDate startDate, LocalDate endDate, String clearingStatus) { - throw new IllegalStateException("clearingStatus not supported by this class"); - } - @Override public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java new file mode 100644 index 000000000..2fd59d0f0 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java @@ -0,0 +1,62 @@ +package ru.spcex.clearing.reports.services.collector; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P2; +import ru.spcex.clearing.reports.services.ReportDataCollector; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; + +@Component +public class Bt17_1_P2_collector extends ReportDataCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public Bt17_1_P2_collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + @Override + public ReportBR_0420315_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + if (startDate.isAfter(endDate)) { + throw new IllegalArgumentException("startDate(" + startDate + ") > endDate(" + endDate + ")"); + } + String ql = String.format("'%s' <= refundDate and refundDate <= '%s'", startDate, endDate); + Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); + + long contractorQty; + double liabilitiesAmount = 0; + { + HashSet collectedToSumm = new HashSet<>(); + for (LiabilitiesClaimsAssets lContract : liabilities) { + if (lContract.getPrice() != null && StringUtils.isNotEmpty(lContract.getContract()) + && !collectedToSumm.contains(lContract.getContract())) { + collectedToSumm.add(lContract.getContract()); + liabilitiesAmount += lContract.getLiabilitiesQuantity().doubleValue(); + } + } + contractorQty = collectedToSumm.size(); + } + + ReportBR_0420315_P2 reportBR_0420315_p2 = new ReportBR_0420315_P2(startDate, endDate, + "BR", + String.valueOf(contractorQty), + String.valueOf(liabilitiesAmount)); + + return reportBR_0420315_p2; + } + + @Override + public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) { + return String.format("REPBR.0420315.P2.%s-%s.%s", DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(dateTimeNow)); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java new file mode 100644 index 000000000..f9377c2fb --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java @@ -0,0 +1,76 @@ +package ru.spcex.clearing.reports.services.collector; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.clearing.classes.statics.data.company.relation.Relation; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_2.ReportBR_0420317; +import ru.spcex.clearing.reports.services.ReportDataCollector; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; + +@Component +public class Bt17_2_collector extends ReportDataCollector { + private Imdg companyImdg; + private Imdg relationImdg; + private Imdg companySymbolsImdg; + + @Autowired + public Bt17_2_collector(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + relationImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); + companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + } + + @Override + public ReportBR_0420317 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + if (startDate.isAfter(endDate)) { + throw new IllegalArgumentException("startDate(" + startDate + ") > endDate(" + endDate + ")"); + } + + String ql = String.format("'%s' <= updated and updated <= '%s' and service='MKR'", startDate, endDate); + // todo обговорить про updatedAt updated, todo enum MKR + Collection relations = relationImdg.getCollectionObjectsBySQL(ql); + + ReportBR_0420317 reportBR_0420317 = new ReportBR_0420317(startDate, endDate, "BR"); + for (Relation relation: relations) { + Company company = relation.getConsumerId() == null ? null : companyImdg.getSingleObjectByID(relation.getConsumerId()); + if (company == null) { + log.warn("Company.id={} not found for relation.id={}", relation.getConsumerId(), relation.getId()); + continue; + } + CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of( + "companySymbol", "INN",//todo use enum, todo ИНН или TIN участника клиринга + "companyId", company.getId() + )); + ReportBR_0420317.Info_0420317 info_0420317 = new ReportBR_0420317.Info_0420317( + company.getClearingCode(), + toString(relation.getSupplierId()), + relation.getService(), // todo "relationServiceId", + relation.getServiceStatus(), + toString(relation.getUpdated()), + company.getFullName(), + companySymbol == null ? null : companySymbol.getCompanySymbolValue(), + company.getProfile().getCountryCode(), + relation.getComment() + ); + reportBR_0420317.getRows().add(info_0420317); + } + + return reportBR_0420317; + } + + + @Override + public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) { + return String.format("REPBR.0420317.%s-%s.%s", DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(dateTimeNow)); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java new file mode 100644 index 000000000..fcf6c50a5 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.reports.services.collector; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.clearing.classes.statics.data.company.relation.Relation; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_2.ReportBR_0420317; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P1; +import ru.spcex.clearing.reports.services.ReportDataCollector; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.Map; + +@Component +public class Bt17_5_P1_collector extends ReportDataCollector { + private Imdg companyImdg; + private Imdg relationImdg; + private Imdg companySymbolsImdg; + + @Autowired + public Bt17_5_P1_collector(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + relationImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); + companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + } + + @Override + public ReportBR_0420312_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + if (startDate.isAfter(endDate)) { + throw new IllegalArgumentException("startDate(" + startDate + ") > endDate(" + endDate + ")"); + } + + // TODO ВСЁ по CLS-29... + String ql = String.format("'%s' <= updated and updated <= '%s' and service='MKR'", startDate, endDate); + // todo обговорить про updatedAt updated, todo enum MKR + Collection relations = relationImdg.getCollectionObjectsBySQL(ql); + + ReportBR_0420312_P1 reportBR_0420312P1 = new ReportBR_0420312_P1(LocalDate.now(), + LocalDate.now(), + "companyClearingCode", + "BR", + "liabilitesClaimsAssetsCompanyId", + "liabilitesClaimsAssetsFullName", + "companySymbolCode", + "companySymbolValue", + "companyInfoCountryCode", + "clearingMemberCategory"); + + return reportBR_0420312P1; + } + + + @Override + public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) { + return String.format("REPBR.0420312_р1-1.%s-%s.%s", DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(dateTimeNow)); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/MapUtil.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/MapUtil.java new file mode 100644 index 000000000..2b9216819 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/MapUtil.java @@ -0,0 +1,33 @@ +package ru.spcex.clearing.reports.services.collector; + +import ru.spcex.platform.classes.base.interfaces.WithId; + +import java.util.*; +import java.util.function.Function; + +public class MapUtil { + + public static Map index(Collection from, Function indexFieldExtractor) { + Map index = new HashMap<>(); + for (V obj : from) { + K key = indexFieldExtractor.apply(obj); + V exist = index.put(key, obj); + if (exist != null) { + throw new IllegalStateException(String.format("%s with id=%s,%s has duplicate key=\"{}\"", + exist.getClass().getSimpleName(), exist.getId(), obj.getId(), key + )); + } + } + return index; + } + + public static Map> indexList(Collection from, Function indexFieldExtractor) { + Map> index = new HashMap<>(); + for (V obj : from) { + K key = indexFieldExtractor.apply(obj); + List lst = index.computeIfAbsent(key, (_key_) -> new ArrayList<>()); + lst.add(obj); + } + return index; + } +} diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/impl/Bt17_1_collectorTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/impl/Bt17_1_collectorTest.java index 6b023cc50..cef49c50c 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/impl/Bt17_1_collectorTest.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/impl/Bt17_1_collectorTest.java @@ -2,7 +2,7 @@ package ru.spcex.clearing.reports.services.impl; import org.junit.jupiter.api.Test; import org.mockito.Mockito; -import ru.spcex.clearing.reports.services.collector.Bt17_1_collector; +import ru.spcex.clearing.reports.services.collector.Bt17_1_P1_collector; import java.time.LocalDate; import java.time.LocalDateTime; @@ -13,7 +13,7 @@ class Bt17_1_collectorTest { @Test void getFileName() { - Bt17_1_collector collector = Mockito.mock(Bt17_1_collector.class); + Bt17_1_P1_collector collector = Mockito.mock(Bt17_1_P1_collector.class); Mockito.when(collector.getFileName(Mockito.any(),Mockito.any(),Mockito.any())).thenCallRealMethod(); String str = collector.getFileName(LocalDate.of(2020,1,1), diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ClearingCategory.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ClearingCategory.java new file mode 100644 index 000000000..6bab3d4ca --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ClearingCategory.java @@ -0,0 +1,27 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +/** + * CLEARING_CATEGORY_DICTIONARY + */ +public enum ClearingCategory implements IEnumKey { + C("C"), // Категория «Ц» - Банк России + B("B"), // Категория «Б» - Кредитная организация ДР + F("F"), // Категория «Ф» - Участник рынка РЦБ + I("I"), // Категория «И» - Инициатор по ТБС + V("V"), // Категория «В» - Инициатор по ТКС + T("T"), // Категория «Т» - Участник товарного рынка + K("K"); // Категория «К» - Участник клиринга - Контроллер + + private final String key; + + ClearingCategory(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +} diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Market.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Market.java new file mode 100644 index 000000000..a135f0ee6 --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Market.java @@ -0,0 +1,18 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum Market implements IEnumKey { + MKRS("MKRS"); // Денежный рынок МКР + + private final String key; + + Market(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +} From eed33ce35b0f95a36701c87419a763e7e815a206 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 26 Dec 2022 14:38:31 +0300 Subject: [PATCH 02/13] insert values in docx (raw) --- .../reports/services/DOCXService.java | 5 ++++ .../services/builders/DOCXReportBuilder.java | 12 ++++++++ .../services/builders/FileReportBuilder.java | 29 +++++++++++++++++++ .../services/builders/XMLReportBuilder.java | 19 ++++++++++++ .../iml/hazelcast/adapter/ImdgHazelcast.java | 9 ++++++ 5 files changed, 74 insertions(+) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/DOCXService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/DOCXService.java index ac1a078ea..86483a38b 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/DOCXService.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/DOCXService.java @@ -15,6 +15,11 @@ import java.util.stream.Collectors; /** * Сервис для работы с DOCX файлами * Читает шаблон .docx и во всех текстовых элементах меняет переданные ключи на соответствующие им значения + * Пример ключа по умолчанию: ${ключ} + * + * При использовании нового шаблона, необходимо отредактировать docx документ так, чтобы ключ содержался в одном + * элементе. Для этого нужно вырезать ключ и в это же место вставить его как текст, без форматирования. Если нужно, + * идентификатору потом можно установить стиль, который будет применён к вставляемой строке. */ public class DOCXService { /** diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java new file mode 100644 index 000000000..ab27e7d9b --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java @@ -0,0 +1,12 @@ +package ru.spcex.clearing.reports.services.builders; + +import org.slf4j.Logger; +import ru.spcex.clearing.reports.reports.AbstractReport; + +import java.io.IOException; + +public abstract class DOCXReportBuilder extends FileReportBuilder { + protected DOCXReportBuilder(Class reportClass, Logger log, String filename) throws IOException { + super(reportClass, log, filename); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java new file mode 100644 index 000000000..01ffe19bb --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java @@ -0,0 +1,29 @@ +package ru.spcex.clearing.reports.services.builders; + +import org.slf4j.Logger; +import ru.spcex.clearing.reports.reports.AbstractReport; + +import java.io.File; +import java.io.IOException; + +public abstract class FileReportBuilder { + protected final Class reportClass; + protected final Logger log; + protected final String filename; + protected final File file; + + protected FileReportBuilder(Class reportClass, Logger log, String filename) throws IOException { + this.reportClass = reportClass; + this.log = log; + this.filename = filename; + this.file = new File(filename); + if (file.exists()) { + if (file.isFile()) { + log.warn("Файл {} существует и будет перезаписан", filename); + boolean deleteOk = file.delete(); + if (!deleteOk) throw new IOException("Не удалось удалить файл " + filename); + } else throw new IOException(filename + " существует, но не является файлом"); + } + } + +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java new file mode 100644 index 000000000..ce85af837 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java @@ -0,0 +1,19 @@ +package ru.spcex.clearing.reports.services.builders; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.naming.NoNameCoder; +import com.thoughtworks.xstream.io.xml.XppDriver; +import org.slf4j.Logger; +import ru.spcex.clearing.reports.reports.AbstractReport; + +import java.io.IOException; + +public abstract class XMLReportBuilder extends FileReportBuilder { + protected final XStream xStream; + + protected XMLReportBuilder(Class reportClass, Logger log, String filename) throws IOException { + super(reportClass, log, filename); + this.xStream = new XStream(new XppDriver(new NoNameCoder())); + xStream.processAnnotations(reportClass); + } +} diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java index ac3b60fa3..43aad9a39 100644 --- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java @@ -135,6 +135,15 @@ public class ImdgHazelcast implements Imdg { return searchResult; } + @Override + public Collection getCollectionObjectsBySQL(String paramString) { + SqlPredicate sqlPredicate = new SqlPredicate(paramString); + Set> found = map.entrySet(sqlPredicate); + List result = new ArrayList<>(found.size()); + for (Map.Entry entry : found) result.add(entry.getValue()); + return result; + } + @Override public Long nextIDSequenceFor() { return idGenerator.newId(); From e18d8c96647cf8d06fc07b985e1526081e3cced8 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 26 Dec 2022 15:21:48 +0300 Subject: [PATCH 03/13] =?UTF-8?q?reports-service=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D1=83=20ReportModuleOut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../element/ReportsServiceSettings.java | 34 ++++++++----------- .../src/main/resources/application.properties | 1 + 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java index 7cb550e10..a79eaa702 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java @@ -3,18 +3,19 @@ package ru.spcex.clearing.reports.config.element; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; -//import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings; -//import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings; import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; +/** + * Параметр запуска: XMLReportBuilder + * --spring.config.location=E:/MFD_GIT_REPO/clearing/clearing-parent/reports-service/src/main/resources + * + */ @Component @PropertySource("file:${spring.config.location}/application.properties") -//todo for test @PropertySource("classpath:application.properties") @ConfigurationProperties("reports-service") public class ReportsServiceSettings { private HazelcastClientParams hazelcast; -// private KafkaConsumerSettings kafkaConsumer; -// private KafkaProducerSettings kafkaProducer; + private String reportModuleOut; public HazelcastClientParams getHazelcast() { return hazelcast; @@ -24,19 +25,12 @@ public class ReportsServiceSettings { this.hazelcast = hazelcast; } -// public KafkaConsumerSettings getKafkaConsumer() { -// return kafkaConsumer; -// } -// -// public void setKafkaConsumer(KafkaConsumerSettings kafkaConsumer) { -// this.kafkaConsumer = kafkaConsumer; -// } -// -// public KafkaProducerSettings getKafkaProducer() { -// return kafkaProducer; -// } -// -// public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { -// this.kafkaProducer = kafkaProducer; -// } + + public String getReportModuleOut() { + return reportModuleOut; + } + + public void setReportModuleOut(String reportModuleOut) { + this.reportModuleOut = reportModuleOut; + } } diff --git a/clearing-parent/reports-service/src/main/resources/application.properties b/clearing-parent/reports-service/src/main/resources/application.properties index 514eaa82e..6c2158643 100644 --- a/clearing-parent/reports-service/src/main/resources/application.properties +++ b/clearing-parent/reports-service/src/main/resources/application.properties @@ -5,3 +5,4 @@ spring.main.web-application-type=servlet reports-service.hazelcast.cluster-members=127.0.0.1:5701 reports-service.hazelcast.login=dev reports-service.hazelcast.password=dev-pass +reports-service.ReportModuleOut=./report_out From 22598b867f9dc4fa9d148b5fcbb14a4843960c89 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 26 Dec 2022 15:45:07 +0300 Subject: [PATCH 04/13] reportName --- .../ru/spcex/clearing/reports/ReportWithPeriod.java | 2 +- .../spcex/clearing/reports/reports/AbstractReport.java | 7 +++++++ .../reports/reports/bt_12_2/ReportPA_BT2_B.java | 10 ++++++++++ .../reports/reports/bt_12_2/ReportPA_BT2_IV.java | 10 ++++++++++ .../clearing/reports/reports/bt_13/Report_BT13_11.java | 7 +++++++ .../clearing/reports/reports/bt_13/Report_BT13_12.java | 8 ++++++++ .../reports/reports/bt_16_5/Report_BT16_5.java | 8 ++++++++ .../reports/reports/bt_17_1/ReportBR_0420315_P1.java | 10 ++++++++++ .../reports/reports/bt_17_1/ReportBR_0420315_P2.java | 10 ++++++++++ .../reports/reports/bt_17_2/ReportBR_0420317.java | 10 ++++++++++ .../reports/reports/bt_17_3/ReportBR_0420318.java | 10 ++++++++++ .../reports/reports/bt_17_4/ReportBR_0420314_P1.java | 10 ++++++++++ .../reports/reports/bt_17_4/ReportBR_0420314_P2.java | 10 ++++++++++ .../reports/reports/bt_17_5/ReportBR_0420312_P1.java | 10 ++++++++++ .../reports/reports/bt_17_5/ReportBR_0420312_P10.java | 10 ++++++++++ .../reports/reports/bt_17_5/ReportBR_0420312_P2.java | 10 ++++++++++ .../reports/reports/bt_17_5/ReportBR_0420312_P3.java | 9 +++++++++ .../reports/reports/bt_17_5/ReportBR_0420312_P4.java | 9 +++++++++ .../reports/reports/bt_17_5/ReportBR_0420312_P5.java | 10 ++++++++++ .../reports/reports/bt_17_5/ReportBR_0420312_P6.java | 10 ++++++++++ .../reports/reports/bt_17_5/ReportBR_0420312_P7.java | 10 ++++++++++ .../reports/reports/bt_17_5/ReportBR_0420312_P8.java | 10 ++++++++++ .../reports/reports/bt_17_5/ReportBR_0420312_P9.java | 10 ++++++++++ 23 files changed, 209 insertions(+), 1 deletion(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportWithPeriod.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportWithPeriod.java index 07caffd69..77a00ec6e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportWithPeriod.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportWithPeriod.java @@ -11,7 +11,7 @@ import java.time.LocalDate; /** * Шапка для отчётов, содержащих startDate и endDate */ -public class ReportWithPeriod extends AbstractReport { +public abstract class ReportWithPeriod extends AbstractReport { @XStreamAsAttribute @XStreamAlias("startDate") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java index df56feb45..2c56605e1 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java @@ -3,10 +3,15 @@ package ru.spcex.clearing.reports.reports; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + /** * Общая шапка (атрибуты) для всех отчетов */ public abstract class AbstractReport { + public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss"); @XStreamAsAttribute @XStreamAlias("version") @@ -28,4 +33,6 @@ public abstract class AbstractReport { this.name = name; } + abstract public String getReportName(LocalDateTime reportDateTime); + } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_B.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_B.java index c527ee2b5..ac062d5fb 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_B.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_B.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("netPositionBank") public class ReportPA_BT2_B extends ReportWithPeriod { @@ -93,6 +94,15 @@ public class ReportPA_BT2_B extends ReportWithPeriod { this.total = new Total(claimsAmount, liabilitiesAmount, paymentAmount); } + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPPA.BT12.2.B.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + @XStreamAlias("total") public static class Total { @XStreamAlias("claimsAmount") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_IV.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_IV.java index 04ddbdc22..e10ac91bb 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_IV.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_IV.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("netPositionInitiator") public class ReportPA_BT2_IV extends ReportWithPeriod { @@ -93,6 +94,15 @@ public class ReportPA_BT2_IV extends ReportWithPeriod { this.total = new Total(claimsAmount, liabilitiesAmount, paymentAmount); } + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPPA.BT12.2.IV.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + @XStreamAlias("total") public static class Total { @XStreamAlias("claimsAmount") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/Report_BT13_11.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/Report_BT13_11.java index 0bb6fce3f..893c204ab 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/Report_BT13_11.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/Report_BT13_11.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.reports.AbstractReport; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.LocalTime; @XStreamAlias("incomingDocuments") @@ -91,4 +92,10 @@ public class Report_BT13_11 extends AbstractReport { this.inDocumentJournalReceiptDate = inDocumentJournalReceiptDate; } + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "DOCIN.%s".formatted( + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/Report_BT13_12.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/Report_BT13_12.java index 9e7a36639..de765fe63 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/Report_BT13_12.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/Report_BT13_12.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.reports.AbstractReport; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.LocalTime; @XStreamAlias("outgoingDocuments") @@ -119,4 +120,11 @@ public class Report_BT13_12 extends AbstractReport { this.outDocumentJournalDossierNumber = outDocumentJournalDossierNumber; this.outDocumentJournalPostDate = outDocumentJournalPostDate; } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "DOCOUT.%s".formatted( + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/Report_BT16_5.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/Report_BT16_5.java index 0b3db0ccc..3dc1d5737 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/Report_BT16_5.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/Report_BT16_5.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.reports.AbstractReport; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.LocalTime; @XStreamAlias("accountBalanceInfo") @@ -69,4 +70,11 @@ public class Report_BT16_5 extends AbstractReport { this.accountBalanceCloseAmount = accountBalanceCloseAmount; } + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "INACCNT.%s.%s".formatted( + companyClearingCode, + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P1.java index ab2700296..47600c673 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P1.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.reports.ReportWithClearingStatus; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -76,4 +77,13 @@ public class ReportBR_0420315_P1 extends ReportWithClearingStatus { } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420315.P1.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P2.java index 450b87e0f..a7c87f98d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P2.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearedLiabilitiesTotal") public class ReportBR_0420315_P2 extends ReportWithPeriod { @@ -68,4 +69,13 @@ public class ReportBR_0420315_P2 extends ReportWithPeriod { } + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420315.P2.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_2/ReportBR_0420317.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_2/ReportBR_0420317.java index 8ad1f2bcd..2357530a0 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_2/ReportBR_0420317.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_2/ReportBR_0420317.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -89,4 +90,13 @@ public class ReportBR_0420317 extends ReportWithPeriod { this.relationComment = relationComment; } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420317.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_3/ReportBR_0420318.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_3/ReportBR_0420318.java index c48422636..73dc19c81 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_3/ReportBR_0420318.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_3/ReportBR_0420318.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.reports.ReportWithClearingStatus; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -114,4 +115,13 @@ public class ReportBR_0420318 extends ReportWithClearingStatus { this.liabilitiesClaimsAssetsFullNames = liabilitiesClaimsAssetsFullNames; } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420318.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P1.java index cc6dfed89..0940041db 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P1.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.reports.ReportWithClearingStatus; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -90,4 +91,13 @@ public class ReportBR_0420314_P1 extends ReportWithClearingStatus { this.liabilitiesClaimsAssetsLiabilitiesQuantity = liabilitiesClaimsAssetsLiabilitiesQuantity; } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420314.P1.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P2.java index 6c924222a..478698b15 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P2.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -83,4 +84,13 @@ public class ReportBR_0420314_P2 extends ReportWithPeriod { } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420314.P2.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P1.java index a19956e75..af4884919 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P1.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearingCoverage1") public class ReportBR_0420312_P1 extends ReportWithPeriod { @@ -87,4 +88,13 @@ public class ReportBR_0420312_P1 extends ReportWithPeriod { } } + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420312_р1-1.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java index e7196690b..0f79fe269 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearingCoverage10") public class ReportBR_0420312_P10 extends ReportWithPeriod { @@ -37,4 +38,13 @@ public class ReportBR_0420312_P10 extends ReportWithPeriod { this.liabilitiesAmount = liabilitiesAmount; } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420312_р3-3.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java index 0cf73c838..84dbf562d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearingCoverage2") public class ReportBR_0420312_P2 extends ReportWithPeriod { @@ -45,4 +46,13 @@ public class ReportBR_0420312_P2 extends ReportWithPeriod { } } + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420312_р1-2.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java index 0c92c0676..97442b1a9 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearingCoverage3") public class ReportBR_0420312_P3 extends ReportWithPeriod { @@ -46,4 +47,12 @@ public class ReportBR_0420312_P3 extends ReportWithPeriod { } } + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420312_р1-3.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P4.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P4.java index ee1d00f29..d4725b978 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P4.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P4.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearingCoverage4") public class ReportBR_0420312_P4 extends ReportWithPeriod { @@ -38,4 +39,12 @@ public class ReportBR_0420312_P4 extends ReportWithPeriod { } } + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420312_р1-4.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P5.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P5.java index 57318d940..1af1850eb 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P5.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P5.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearingCoverage5") public class ReportBR_0420312_P5 extends ReportWithPeriod { @@ -37,4 +38,13 @@ public class ReportBR_0420312_P5 extends ReportWithPeriod { this.liabilitiesAmount = liabilitiesAmount; } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420312_р1-5.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P6.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P6.java index b03bf0069..6b5126f7e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P6.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P6.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearingCoverage6") public class ReportBR_0420312_P6 extends ReportWithPeriod { @@ -37,4 +38,13 @@ public class ReportBR_0420312_P6 extends ReportWithPeriod { this.liabilitiesAmount = liabilitiesAmount; } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420312_р1-6.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P7.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P7.java index 72a57f10b..81b539868 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P7.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P7.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearingCoverage7") public class ReportBR_0420312_P7 extends ReportWithPeriod { @@ -37,4 +38,13 @@ public class ReportBR_0420312_P7 extends ReportWithPeriod { this.liabilitiesAmount = liabilitiesAmount; } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420312_р1-7.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java index 8f6f431a5..563ffc599 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearingCoverage8") public class ReportBR_0420312_P8 extends ReportWithPeriod { @@ -85,4 +86,13 @@ public class ReportBR_0420312_P8 extends ReportWithPeriod { this.clearingMemberCategoryClearingMemberCategory = clearingMemberCategoryClearingMemberCategory; } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return " REPBR.0420312_р3-1.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java index d508df865..3438b9d05 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import ru.spcex.clearing.reports.ReportWithPeriod; import java.time.LocalDate; +import java.time.LocalDateTime; @XStreamAlias("clearingCoverage9") public class ReportBR_0420312_P9 extends ReportWithPeriod { @@ -61,4 +62,13 @@ public class ReportBR_0420312_P9 extends ReportWithPeriod { this.liabilitiesClaimsAssetsLiabilities = liabilitiesClaimsAssetsLiabilities; } } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "REPBR.0420312_р3-2.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } } From 2c5dbe914366aa81ccde123a3a68db0935a3a927 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 26 Dec 2022 15:51:54 +0300 Subject: [PATCH 05/13] reportName --- .../ru/spcex/clearing/reports/reports/AbstractReport.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java index 2c56605e1..7f82058a3 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java @@ -10,8 +10,8 @@ import java.time.format.DateTimeFormatter; * Общая шапка (атрибуты) для всех отчетов */ public abstract class AbstractReport { - public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); - public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss"); + protected static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + protected static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss"); @XStreamAsAttribute @XStreamAlias("version") From 6a3433c26fccbff4cff7c5e34fa83729736f737f Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 26 Dec 2022 15:55:42 +0300 Subject: [PATCH 06/13] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-25=20?= =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-26=20=D1=80=D0=B5=D1=84?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BB=D0=BB=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reports/services/ReportDataCollector.java | 4 +- .../collector/Bt17_1_P1_collector.java | 35 ++++++++--------- .../services/collector/Bt17_2_collector.java | 7 ++-- .../services/ReportDataCollectorTest.java | 39 +++++++++++++++++++ .../platform/enumeration/DocumentTypes.java | 39 +++++++++++++++++++ 5 files changed, 102 insertions(+), 22 deletions(-) create mode 100644 clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportDataCollectorTest.java create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/DocumentTypes.java diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java index e2e2ea972..71c1b41f2 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java @@ -7,6 +7,7 @@ import ru.spcex.clearing.reports.reports.AbstractReport; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.List; @@ -38,6 +39,7 @@ public abstract class ReportDataCollector { * @param dateTimeNow LocalDateTime.now() * @return */ + @Deprecated abstract public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow); @@ -48,6 +50,6 @@ public abstract class ReportDataCollector { protected String toString(Instant val) { if (val == null) return null; - return DATE_TIME_FORMATTER.format(val);//todo проверить работает ли - юниттест. + return DATE_TIME_FORMATTER.format(val.atZone(ZoneId.systemDefault())); } } 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 f704921f3..923144b98 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 @@ -42,6 +42,18 @@ public class Bt17_1_P1_collector extends ReportDataCollector(); + qParam.put("market", onMarket.getKey()); + qParam.put("securityId", securityId); + return listingImdg.getSingleObjectByFieldValues(qParam); + } + @Override public List collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { if (startDate.isAfter(endDate)) { @@ -67,33 +79,20 @@ public class Bt17_1_P1_collector extends ReportDataCollector I, V log.trace("Filtered ClearingMemberCategory[{}].ClearingMemberCategory={}", - cmc == null ? null : cmc.getId(), cmc == null ? null : cmc.getClearingMemberCategory()); + cmc == null ? null : cmc.getId(), checkCategory); continue; } -// ClearingStatusDictionary clearingStatus = clearingStatusDictionaryImdg.getSingleObjectByID(liability.getClearingStatus()); -// if (clearingStatus == null || !ALLOW_CLEARING_STATUS.contains(clearingStatus.getCode())) { -// // фильтруются <> "OK" уже была, never -// log.warn("Found after filter LiabilitiesClaimsAssets[{}].getClearingStatus={}", liability.getId(), liability.getClearingStatus()); -// continue; -// } ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(startDate, endDate, "BR", cmc.getClearingMemberCategory(), ALLOW_CLEARING_STATUS //clearingStatus.getCode() "OK" ); - Listing listing; - { - Map qParam = new HashMap<>(); - qParam.put("market", Market.MKRS.getKey()); - qParam.put("securityId", liability.getSecurityId()); - listing = listingImdg.getSingleObjectByFieldValues(qParam); - } - + Listing listing = findListing(Market.mkrs, liability.getSecurityId()); List allContract = indexByCompany.get(companyId); long contractorQty; @@ -101,7 +100,7 @@ public class Bt17_1_P1_collector extends ReportDataCollector collectedToSumm = new HashSet<>(); // чтобы дважды не посчитать 1 и тот же контракт for (LiabilitiesClaimsAssets lContract : allContract) { - if (lContract.getPrice()!=null && StringUtils.isNotEmpty(lContract.getContract()) + if (lContract.getPrice() != null && StringUtils.isNotEmpty(lContract.getContract()) && !collectedToSumm.contains(lContract.getContract())) { collectedToSumm.add(lContract.getContract()); liabilitiesAmount += lContract.getLiabilitiesQuantity().doubleValue(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java index f9377c2fb..6c7b61300 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java @@ -8,6 +8,7 @@ import ru.clearing.classes.statics.data.company.relation.Relation; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.bt_17_2.ReportBR_0420317; import ru.spcex.clearing.reports.services.ReportDataCollector; +import ru.spcex.platform.enumeration.DocumentTypes; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -47,13 +48,13 @@ public class Bt17_2_collector extends ReportDataCollector Date: Mon, 26 Dec 2022 16:23:55 +0300 Subject: [PATCH 07/13] reports-service http://jira.mfd.msk:8088/browse/CLS-25 refactoring --- .../services/collector/Bt17_1_P1_collector.java | 15 +++++++-------- .../services/collector/Bt17_1_P2_collector.java | 1 - 2 files changed, 7 insertions(+), 9 deletions(-) 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 923144b98..d7ff636d9 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 @@ -61,20 +61,19 @@ public class Bt17_1_P1_collector extends ReportDataCollector result = new ArrayList<>(); - String ql = String.format("'%s' <= refundDate and refundDate <= '%s'", startDate, endDate); - Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); - ClearingStatusDictionary allowClearingStatus = clearingStatusDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", ALLOW_CLEARING_STATUS)); if (allowClearingStatus == null) { throw new IllegalStateException("ClearingStatusDictionary with code=\"" + ALLOW_CLEARING_STATUS + "\" not fount"); } final Long allowClearingStatusId = allowClearingStatus.getId(); // "OK" - Collection filteredLiabilities = liabilities.stream() - .filter(liability -> allowClearingStatusId.equals(liability.getClearingStatus())) - .collect(Collectors.toList()); - Map> indexByCompany = MapUtil.indexList(filteredLiabilities, LiabilitiesClaimsAssets::getCompanyId); - for (LiabilitiesClaimsAssets liability : filteredLiabilities) { + String ql = String.format("'%s' <= refundDate and refundDate <= '%s' and clearingStatus=", + startDate, endDate, allowClearingStatusId); + Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); + + Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); + + for (LiabilitiesClaimsAssets liability : liabilities) { final Long companyId = liability.getCompanyId(); Company company = companyImdg.getSingleObjectByID(companyId); if (company != null) { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java index 2fd59d0f0..02e5587e3 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java @@ -3,7 +3,6 @@ package ru.spcex.clearing.reports.services.collector; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P2; From 2ad1b73300f9589325e3cbcc965f86b357f25d3e Mon Sep 17 00:00:00 2001 From: aalehin Date: Mon, 26 Dec 2022 16:55:51 +0300 Subject: [PATCH 08/13] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-78=20?= =?UTF-8?q?---=20=D0=9F=D1=80=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B8?= =?UTF-8?q?=20=D0=B2=20plannerTemplate=20=D0=B8=20clearingCalendar=20?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=BE=D0=BB=D0=B5=20createdAt=20=D1=81=D0=BE?= =?UTF-8?q?=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D1=83=D1=8E?= =?UTF-8?q?=D1=89=D0=B8=D1=85=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D1=8F=D0=BB?= =?UTF-8?q?=D0=BE=D1=81=D1=8C=20=D0=B2=D1=80=D0=B5=D0=BC=D1=8F=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ClearingCalendarService.java | 18 ++- .../service/PlannerTemplateService.java | 6 +- .../HazelcastServiceTestConfiguration.java | 68 +++++++++ .../service/ClearingCalendarServiceTest.java | 138 +++++++++++++++++ .../service/PlannerTemplateServiceTest.java | 141 ++++++++++++++++++ .../scheduler/utils/MatcherFactory.java | 38 +++++ 6 files changed, 401 insertions(+), 8 deletions(-) create mode 100644 clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/config/HazelcastServiceTestConfiguration.java create mode 100644 clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/ClearingCalendarServiceTest.java create mode 100644 clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/PlannerTemplateServiceTest.java create mode 100644 clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/utils/MatcherFactory.java diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java index 70bd24147..3a86684b7 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/ClearingCalendarService.java @@ -18,6 +18,8 @@ import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.time.Instant; + @Service public class ClearingCalendarService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -33,21 +35,23 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi @Override public void afterPropertiesSet() { callback(ClearingCalendarNewRequest.class) - .setConsumer(this::newTradingCalendar) + .setConsumer(this::newClearingCalendar) .forDestination(Consts.DESTINATION_CLEARING_CALENDAR_NEW, callbacks::put); callback(ClearingCalendarUpdateRequest.class) - .setConsumer(this::updateTradingCalendar) + .setConsumer(this::updateClearingCalendar) .forDestination(Consts.DESTINATION_CLEARING_CALENDAR_UPDATE, callbacks::put); callback(CommonDeleteRequest.class) - .setConsumer(this::deleteTradingCalendar) + .setConsumer(this::deleteClearingCalendar) .forDestination(Consts.DESTINATION_CLEARING_CALENDAR_DELETE, callbacks::put); init(); } - private void newTradingCalendar(BaseRequest userRequest) { + private void newClearingCalendar(BaseRequest userRequest) { ClearingCalendarNewRequest req = userRequest.getRequestPayload(); log.debug("ClearingCalendarNewRequest received"); ClearingCalendar clearingCalendar = new ClearingCalendar(); + Instant created = Instant.now(); + clearingCalendar.setCreated(created); clearingCalendar.setClearingDate(req.getClearingDate()); clearingCalendar.setCompanyId(req.getCompanyId()); clearingCalendar.setDayStatus(req.getDayStatus()); @@ -55,18 +59,20 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi log.debug("successfully processed, new id {}", clearingCalendar.getId()); } - private void updateTradingCalendar(BaseRequest userRequest) { + private void updateClearingCalendar(BaseRequest userRequest) { ClearingCalendarUpdateRequest req = userRequest.getRequestPayload(); log.debug("ClearingCalendarUpdateRequest received"); + Instant updated = Instant.now(); ClearingCalendar clearingCalendar = clearingCalendarMap.getSingleObjectByID(req.getId()); clearingCalendar.setClearingDate(req.getClearingDate()); clearingCalendar.setCompanyId(req.getCompanyId()); clearingCalendar.setDayStatus(req.getDayStatus()); + clearingCalendar.setUpdated(updated); clearingCalendarMap.update(clearingCalendar); log.debug("successfully processed, new id {}", clearingCalendar.getId()); } - private void deleteTradingCalendar(BaseRequest userRequest) { + private void deleteClearingCalendar(BaseRequest userRequest) { CommonDeleteRequest req = userRequest.getRequestPayload(); log.debug("CommonDeleteRequest received id = {}", req.getId()); ClearingCalendar clearingCalendar = clearingCalendarMap.getSingleObjectByID(req.getId()); diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/PlannerTemplateService.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/PlannerTemplateService.java index 491e884dc..77a1466a0 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/PlannerTemplateService.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/PlannerTemplateService.java @@ -50,7 +50,8 @@ public class PlannerTemplateService extends QueueConsumer implements Initializin PlannerTemplateNewRequest req = userRequest.getRequestPayload(); log.debug("PlannerTemplateNewRequest received"); PlannerTemplate plannerTemplate = new PlannerTemplate(); - plannerTemplate.setCreated(Instant.now()); + Instant created = Instant.now(); + plannerTemplate.setCreated(created); plannerTemplate.setTask(req.getTask()); plannerTemplate.setTaskTime(req.getTaskTime()); plannerTemplate.setTaskStatus(req.getTaskStatus()); @@ -64,7 +65,8 @@ public class PlannerTemplateService extends QueueConsumer implements Initializin PlannerTemplateUpdateRequest req = userRequest.getRequestPayload(); log.debug("PlannerTemplateUpdateRequest received"); PlannerTemplate plannerTemplate = plannerTemplateMap.getSingleObjectByID(req.getId()); - plannerTemplate.setUpdated(Instant.now()); + Instant updated = Instant.now(); + plannerTemplate.setUpdated(updated); plannerTemplate.setTask(req.getTask()); plannerTemplate.setTaskTime(req.getTaskTime()); plannerTemplate.setTaskStatus(req.getTaskStatus()); diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/config/HazelcastServiceTestConfiguration.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/config/HazelcastServiceTestConfiguration.java new file mode 100644 index 000000000..af55150d0 --- /dev/null +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/config/HazelcastServiceTestConfiguration.java @@ -0,0 +1,68 @@ +package ru.specx.clearing.scheduler.config; + +import com.hazelcast.config.*; +import com.hazelcast.core.Hazelcast; +import com.hazelcast.core.HazelcastInstance; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; +import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; +import ru.spcex.platform.imdg.iml.hazelcast.util.HazelcastHelper; + +import java.util.List; +import java.util.Random; + +@Configuration +public class HazelcastServiceTestConfiguration { + private HazelcastInstance hazelcastInstance; + + private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) { + ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor(); + if (maxPoolSz > 2) { + pool.setKeepAliveSeconds(60); + pool.setAllowCoreThreadTimeOut(true); + } + pool.setCorePoolSize(maxPoolSz); + pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion); + return pool; + } + + @Bean(name = "hazelcastServiceTest") + public HazelcastService hazelcastService(@Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer, @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter, HazelcastClientParams params) { + Config cfg = new Config(); + cfg.setInstanceName("localhost"); + + NetworkConfig networkConfig = new NetworkConfig(); + JoinConfig joinConfig = new JoinConfig(); + joinConfig.setMulticastConfig(new MulticastConfig().setEnabled(false)); + joinConfig.setTcpIpConfig(new TcpIpConfig().setEnabled(true).setMembers(List.of("127.0.0.1"))); + networkConfig.setJoin(joinConfig); + cfg.setNetworkConfig(networkConfig); + hazelcastInstance = Hazelcast.newHazelcastInstance(cfg); + HazelcastHelper.otcSystem_setStorageState(true, hazelcastInstance); + return new HazelcastService(taskExecutorHazelcastClientInitializer, taskExecutorIdGeneratorAwaiter, params); + } + + @Bean(name = "taskExecutorHazelcastClientInitializer") + public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() { + return createThreadPoolTaskExecutor(1, true); + } + + @Bean(name = "taskExecutorIdGeneratorAwaiter") + public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() { + return createThreadPoolTaskExecutor(1, false); + } + + @Bean(name = "hazelcastClientParams") + public HazelcastClientParams getHazelcastClientParams() { + HazelcastClientParams params = new HazelcastClientParams(); + params.setLogin("dev"); + params.setPassword("dev-pass"); + params.setClusterMembers("127.0.0.1"); + params.setInstanceName("hzTestClient" + new Random().nextInt()); + params.setNearCacheConfig(new NearCacheConfig()); + return params; + } +} diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/ClearingCalendarServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/ClearingCalendarServiceTest.java new file mode 100644 index 000000000..7307966f9 --- /dev/null +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/ClearingCalendarServiceTest.java @@ -0,0 +1,138 @@ +package ru.specx.clearing.scheduler.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.hazelcast.core.IMap; +import com.hazelcast.map.listener.EntryRemovedListener; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.consumer.OffsetResetStrategy; +import org.apache.kafka.clients.producer.MockProducer; +import org.apache.kafka.common.TopicPartition; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.profile.Contact; +import ru.clearing.classes.statics.data.scheduler.ClearingCalendar; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.schedule.ClearingCalendarNewRequest; +import ru.spcex.clearing.scheduler.service.ClearingCalendarService; +import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; +import ru.specx.clearing.scheduler.config.HazelcastServiceTestConfiguration; + +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collections; +import java.util.HashMap; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + HazelcastServiceTestConfiguration.class}) +class ClearingCalendarServiceTest { + + private static final int PARTITION = 0; + private static final String TOPIC_CLEARING_CALENDAR_NEW = Consts.DESTINATION_CLEARING_CALENDAR_NEW; + private static final Long ID = 0L; + + @Autowired + @Qualifier("hazelcastServiceTest") + private HazelcastService hazelcastServiceTest; + private MockConsumer mockConsumer; + private MockProducer mockProducer; + + @BeforeEach + void setUp() { + mockConsumer = new MockConsumer<>(OffsetResetStrategy.EARLIEST); + mockProducer = new MockProducer<>(); + } + + /** + * {@link ClearingCalendarService#newTradingCalendar(BaseRequest)}(BaseRequest)}
+ * Тест проверяет создание сущности {@link ClearingCalendar} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link ClearingCalendarNewRequest}:
+ */ + @Test + public void newClearingCalendarInQueue() throws InterruptedException { + //ARRANGE + + ClearingCalendar clearingCalendar = new ClearingCalendar(); + Instant created = Instant.now(); + clearingCalendar.setCreated(created); + clearingCalendar.setClearingDate(LocalDate.now()); + clearingCalendar.setCompanyId(0L); + clearingCalendar.setDayStatus("STATUS"); + + ClearingCalendarNewRequest clearingCalendarNewRequest = new ClearingCalendarNewRequest(); + clearingCalendarNewRequest.setClearingDate(clearingCalendar.getClearingDate()); + clearingCalendarNewRequest.setCompanyId(clearingCalendar.getCompanyId()); + clearingCalendarNewRequest.setDayStatus(clearingCalendar.getDayStatus()); + + BaseRequest baseNewRequest = new BaseRequest<>(); + baseNewRequest.setRequestPayload(clearingCalendarNewRequest); + baseNewRequest.setId(ID); + baseNewRequest.setActionType(ActionType.NEW); + String jsonBaseForRequest; + ObjectMapper objectMapper = new ObjectMapper(); + try { + jsonBaseForRequest = objectMapper.writeValueAsString(baseNewRequest); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + //ACT + //service set up + ClearingCalendarService clearingCalendarService = new ClearingCalendarService(mockConsumer, mockProducer, hazelcastServiceTest); + + //callbacks set up + clearingCalendarService.afterPropertiesSet(); + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_ClearingCalendar); + //KAFKA + HashMap startOffsetsUpdating = new HashMap<>(); + TopicPartition topic = new TopicPartition(TOPIC_CLEARING_CALENDAR_NEW, PARTITION); + startOffsetsUpdating.put(topic, 0L); + mockConsumer.updateBeginningOffsets(startOffsetsUpdating); + + mockConsumer.schedulePollTask(() -> { + mockConsumer.rebalance(Collections.singletonList(new TopicPartition(TOPIC_CLEARING_CALENDAR_NEW, PARTITION))); + mockConsumer.addRecord(new ConsumerRecord<>(TOPIC_CLEARING_CALENDAR_NEW, PARTITION, 0, "key", jsonBaseForRequest)); + }); + + //waiting for hazelcast map item removes + Object waiter = new Object(); + String listenerID = iMap.addEntryListener((EntryRemovedListener) entryEvent -> { + System.out.println("Checking If pushed.."); + + try { + waiter.wait(100); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + synchronized (waiter) { + waiter.notify(); + } + }, false); + + synchronized (waiter) { + waiter.wait(100); + } + ClearingCalendar clearingCalendarRes = iMap.get(iMap.keySet().stream().findFirst().get()); + //ASSERT + Assertions.assertEquals(1, iMap.size()); + + Assertions.assertNotNull(clearingCalendarRes.getCreated()); + Assertions.assertEquals(clearingCalendar.getClearingDate(), clearingCalendarRes.getClearingDate()); + Assertions.assertEquals(clearingCalendar.getCompanyId(), clearingCalendarRes.getCompanyId()); + Assertions.assertEquals(clearingCalendar.getDayStatus(), clearingCalendarRes.getDayStatus()); + + //preparing hazelcastImdgProvider for next test + iMap.removeEntryListener(listenerID); + } +} \ No newline at end of file diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/PlannerTemplateServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/PlannerTemplateServiceTest.java new file mode 100644 index 000000000..ff5ac8109 --- /dev/null +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/PlannerTemplateServiceTest.java @@ -0,0 +1,141 @@ +package ru.specx.clearing.scheduler.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.hazelcast.core.IMap; +import com.hazelcast.map.listener.EntryRemovedListener; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.consumer.OffsetResetStrategy; +import org.apache.kafka.clients.producer.MockProducer; +import org.apache.kafka.common.TopicPartition; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.profile.Contact; +import ru.clearing.classes.statics.data.scheduler.PlannerTemplate; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerTemplateNewRequest; +import ru.spcex.clearing.scheduler.service.PlannerTemplateService; +import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; +import ru.specx.clearing.scheduler.config.HazelcastServiceTestConfiguration; + +import java.time.Instant; +import java.time.LocalTime; +import java.util.Collections; +import java.util.HashMap; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + HazelcastServiceTestConfiguration.class}) +class PlannerTemplateServiceTest { + + private static final int PARTITION = 0; + private static final String TOPIC_PLANNER_TEMPLATE_NEW = Consts.DESTINATION_PLANNER_TEMPLATE_NEW; + private static final Long ID = 0L; + + @Autowired + @Qualifier("hazelcastServiceTest") + private HazelcastService hazelcastServiceTest; + private MockConsumer mockConsumer; + private MockProducer mockProducer; + + @BeforeEach + void setUp() { + mockConsumer = new MockConsumer<>(OffsetResetStrategy.EARLIEST); + mockProducer = new MockProducer<>(); + } + + /** + * {@link PlannerTemplateService#newTimetable(BaseRequest)}(BaseRequest)}
+ * Тест проверяет создание сущности {@link ru.clearing.classes.statics.data.scheduler.PlannerTemplate} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link PlannerTemplateNewRequest}:
+ */ + @Test + public void newPlannerTemplateInQueue() throws InterruptedException { + //ARRANGE + Instant created = Instant.now(); + PlannerTemplate plannerTemplate = new PlannerTemplate(); + plannerTemplate.setTask("TASK"); + plannerTemplate.setTaskTime(LocalTime.MIDNIGHT); + plannerTemplate.setTaskStatus("TASK_STATUS"); + plannerTemplate.setCompanyId(0L); + plannerTemplate.setSecurityId(10L); + + PlannerTemplateNewRequest plannerTemplateNewRequest = new PlannerTemplateNewRequest(); + plannerTemplateNewRequest.setTask(plannerTemplate.getTask()); + plannerTemplateNewRequest.setTaskTime(plannerTemplate.getTaskTime()); + plannerTemplateNewRequest.setTaskStatus(plannerTemplate.getTaskStatus()); + plannerTemplateNewRequest.setCompanyId(plannerTemplate.getCompanyId()); + plannerTemplateNewRequest.setSecurityId(plannerTemplate.getSecurityId()); + + BaseRequest plannerTemplateRequest = new BaseRequest<>(); + plannerTemplateRequest.setRequestPayload(plannerTemplateNewRequest); + plannerTemplateRequest.setId(ID); + plannerTemplateRequest.setActionType(ActionType.NEW); + String jsonBaseForDeleteRequest; + ObjectMapper objectMapper = new ObjectMapper(); + try { + jsonBaseForDeleteRequest = objectMapper.writeValueAsString(plannerTemplateRequest); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + //ACT + //service set up + PlannerTemplateService plannerTemplateService = new PlannerTemplateService(mockConsumer, mockProducer, hazelcastServiceTest); + + //callbacks set up + plannerTemplateService.afterPropertiesSet(); + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_PlannerTemplate); + //KAFKA + HashMap startOffsetsUpdating = new HashMap<>(); + TopicPartition topic = new TopicPartition(TOPIC_PLANNER_TEMPLATE_NEW, PARTITION); + startOffsetsUpdating.put(topic, 0L); + mockConsumer.updateBeginningOffsets(startOffsetsUpdating); + + mockConsumer.schedulePollTask(() -> { + mockConsumer.rebalance(Collections.singletonList(new TopicPartition(TOPIC_PLANNER_TEMPLATE_NEW, PARTITION))); + mockConsumer.addRecord(new ConsumerRecord<>(TOPIC_PLANNER_TEMPLATE_NEW, PARTITION, 0, "key", jsonBaseForDeleteRequest)); + }); + + //waiting for hazelcast map item removes + Object waiter = new Object(); + String listenerID = iMap.addEntryListener((EntryRemovedListener) entryEvent -> { + System.out.println("Checking If pushed.."); + + try { + waiter.wait(100); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + synchronized (waiter) { + waiter.notify(); + } + }, false); + + synchronized (waiter) { + waiter.wait(100); + } + PlannerTemplate plannerTemplateRes = iMap.get(iMap.keySet().stream().findFirst().get()); + //ASSERT + Assertions.assertEquals(1, iMap.size()); + + Assertions.assertNotNull(plannerTemplateRes.getCreated()); + Assertions.assertEquals(plannerTemplate.getTask(), plannerTemplateRes.getTask()); + Assertions.assertEquals(plannerTemplate.getTaskTime(), plannerTemplateRes.getTaskTime()); + Assertions.assertEquals(plannerTemplate.getTaskStatus(), plannerTemplateRes.getTaskStatus()); + Assertions.assertEquals(plannerTemplate.getCompanyId(), plannerTemplateRes.getCompanyId()); + Assertions.assertEquals(plannerTemplate.getSecurityId(), plannerTemplateRes.getSecurityId()); + //preparing hazelcastImdgProvider for next test + iMap.removeEntryListener(listenerID); + } +} \ No newline at end of file diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/utils/MatcherFactory.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/utils/MatcherFactory.java new file mode 100644 index 000000000..c214393ea --- /dev/null +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/utils/MatcherFactory.java @@ -0,0 +1,38 @@ +package ru.specx.clearing.scheduler.utils; + +import java.util.Arrays; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Factory for creating test matchers. + *

+ * Comparing actual and expected objects via AssertJ + */ +public class MatcherFactory { + + public static Matcher usingIgnoringFieldsComparator(String... fieldsToIgnore) { + return new Matcher<>(fieldsToIgnore); + } + + public static class Matcher { + private final String[] fieldsToIgnore; + + private Matcher(String... fieldsToIgnore) { + this.fieldsToIgnore = fieldsToIgnore; + } + + public void assertMatch(T actual, T expected) { + assertThat(actual).usingRecursiveComparison().ignoringFields(fieldsToIgnore).isEqualTo(expected); + } + + @SafeVarargs + public final void assertMatch(Iterable actual, T... expected) { + assertMatch(actual, Arrays.asList(expected)); + } + + public void assertMatch(Iterable actual, Iterable expected) { + assertThat(actual).usingRecursiveFieldByFieldElementComparatorIgnoringFields(fieldsToIgnore).isEqualTo(expected); + } + } +} From 47df118474e3ed8ead6b8393dccf86702e9c0e77 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 26 Dec 2022 17:04:58 +0300 Subject: [PATCH 09/13] =?UTF-8?q?reports-service=20http://jira.mfd.msk:808?= =?UTF-8?q?8/browse/CLS-25=20=D0=BF=D0=BE=D0=BD=D1=8F=D0=BB=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=20=D0=B2=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../collector/Bt17_1_P1_collector.java | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) 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 Date: Mon, 26 Dec 2022 17:20:54 +0300 Subject: [PATCH 10/13] =?UTF-8?q?reports-service=20=D0=BF=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B8=D0=BF=20ReportDat?= =?UTF-8?q?aCollector?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/reports/services/ReportDataCollector.java | 10 ++++++---- .../services/collector/Bt17_1_P1_collector.java | 2 +- .../services/collector/Bt17_1_P2_collector.java | 2 +- .../reports/services/collector/Bt17_2_collector.java | 2 +- .../services/collector/Bt17_5_P1_collector.java | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java index 71c1b41f2..69101ef75 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java @@ -11,7 +11,7 @@ import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.List; -public abstract class ReportDataCollector { +public abstract class ReportDataCollector { public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss"); @@ -22,7 +22,7 @@ public abstract class ReportDataCollector { * T extends ReportWithPeriod * @return */ - abstract public R collectReportWithPeriod(LocalDate startDate, LocalDate endDate); + abstract public T collectReportWithPeriod(LocalDate startDate, LocalDate endDate); // /** // * T extends ReportWithClearingStatus @@ -33,14 +33,16 @@ public abstract class ReportDataCollector { // abstract public List collectReportWithClearingStatus(LocalDate startDate, LocalDate endDate, String clearingStatus); /** - * + * todo убрать метод, он уже лишний * @param startDate * @param endDate * @param dateTimeNow LocalDateTime.now() * @return */ @Deprecated - abstract public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow); + public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) { + throw new IllegalArgumentException("deprecated"); + } protected String toString(Long val) { 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 33ddce3d0..073f8d7b2 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(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java index 02e5587e3..9c3db398c 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java @@ -15,7 +15,7 @@ import java.time.LocalDateTime; import java.util.*; @Component -public class Bt17_1_P2_collector extends ReportDataCollector { +public class Bt17_1_P2_collector extends ReportDataCollector { private Imdg liabilitiesClaimsAssetsImdg; @Autowired diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java index 6c7b61300..65aa7b0a8 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java @@ -18,7 +18,7 @@ import java.time.LocalDateTime; import java.util.*; @Component -public class Bt17_2_collector extends ReportDataCollector { +public class Bt17_2_collector extends ReportDataCollector { private Imdg companyImdg; private Imdg relationImdg; private Imdg companySymbolsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java index fcf6c50a5..d89f4383b 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java @@ -18,7 +18,7 @@ import java.util.Collection; import java.util.Map; @Component -public class Bt17_5_P1_collector extends ReportDataCollector { +public class Bt17_5_P1_collector extends ReportDataCollector { private Imdg companyImdg; private Imdg relationImdg; private Imdg companySymbolsImdg; From a8f15eff9dd016a7c41b92b3cdb0f00cf63a517b Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 26 Dec 2022 17:40:40 +0300 Subject: [PATCH 11/13] reportName --- .../services/builders/DOCXReportBuilder.java | 8 +++- .../services/builders/FileReportBuilder.java | 19 +--------- .../services/builders/XMLReportBuilder.java | 38 +++++++++++++++++-- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java index ab27e7d9b..ebf56d43d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java @@ -1,12 +1,16 @@ package ru.spcex.clearing.reports.services.builders; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import ru.spcex.clearing.reports.reports.AbstractReport; +import java.io.File; import java.io.IOException; public abstract class DOCXReportBuilder extends FileReportBuilder { - protected DOCXReportBuilder(Class reportClass, Logger log, String filename) throws IOException { - super(reportClass, log, filename); + private final Logger log = LoggerFactory.getLogger(getClass()); + + protected DOCXReportBuilder(Class reportClass, File templateResource) throws IOException { + super(reportClass); } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java index 01ffe19bb..ee7db9533 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java @@ -1,29 +1,12 @@ package ru.spcex.clearing.reports.services.builders; -import org.slf4j.Logger; import ru.spcex.clearing.reports.reports.AbstractReport; -import java.io.File; -import java.io.IOException; - public abstract class FileReportBuilder { protected final Class reportClass; - protected final Logger log; - protected final String filename; - protected final File file; - protected FileReportBuilder(Class reportClass, Logger log, String filename) throws IOException { + protected FileReportBuilder(Class reportClass) { this.reportClass = reportClass; - this.log = log; - this.filename = filename; - this.file = new File(filename); - if (file.exists()) { - if (file.isFile()) { - log.warn("Файл {} существует и будет перезаписан", filename); - boolean deleteOk = file.delete(); - if (!deleteOk) throw new IOException("Не удалось удалить файл " + filename); - } else throw new IOException(filename + " существует, но не является файлом"); - } } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java index ce85af837..a1b2e0849 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java @@ -4,16 +4,48 @@ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.naming.NoNameCoder; import com.thoughtworks.xstream.io.xml.XppDriver; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import ru.spcex.clearing.reports.reports.AbstractReport; +import ru.spcex.clearing.reports.services.ReportDataCollector; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.time.LocalDate; +import java.time.LocalDateTime; + +public class XMLReportBuilder extends FileReportBuilder { + private final Logger log = LoggerFactory.getLogger(getClass()); -public abstract class XMLReportBuilder extends FileReportBuilder { protected final XStream xStream; - protected XMLReportBuilder(Class reportClass, Logger log, String filename) throws IOException { - super(reportClass, log, filename); + protected final ReportDataCollector collector; + + public XMLReportBuilder(Class reportClass, ReportDataCollector collector) { + super(reportClass); + this.collector = collector; this.xStream = new XStream(new XppDriver(new NoNameCoder())); xStream.processAnnotations(reportClass); } + + public File createReport(LocalDate startDate, LocalDate endDate) throws IOException { + R report = collector.collectReportWithPeriod(startDate, endDate); + String reportName = report.getReportName(LocalDateTime.now()); + + if (System.getProperty("os.name").contains("windows")) reportName = reportName.replace(":", "_"); + + String reportFileName = reportName + ".xml"; + File reportFile = new File(reportFileName); + if (reportFile.exists()) { + if (reportFile.isFile()) { + log.warn("Файл {} существует и будет перезаписан", reportFileName); + boolean deleteOk = reportFile.delete(); + if (!deleteOk) throw new IOException("Не удалось удалить файл " + reportFileName); + } else throw new IOException(reportFileName + " существует, но не является файлом"); + } + try (FileOutputStream fos = new FileOutputStream(reportFile)) { + xStream.toXML(report, fos); + } + return reportFile; + } } From 4b5667747a9663bd398654486a80fe601b3086e1 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 26 Dec 2022 18:09:07 +0300 Subject: [PATCH 12/13] =?UTF-8?q?reports-service=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BA=D1=80=D1=83=D1=82=D0=B8=D0=BB=20=D0=B3=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D1=8E=20=D1=82=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BF=D1=80=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reports/ReportsServiceApplication.java | 28 +++++++++++++++++-- .../reports/services/ReportDataCollector.java | 1 + .../collector/Bt17_1_P1_collector.java | 5 ++++ .../collector/Bt17_1_P2_collector.java | 5 ++++ .../services/collector/Bt17_2_collector.java | 5 ++++ .../collector/Bt17_5_P1_collector.java | 5 ++++ .../services/ReportDataCollectorTest.java | 8 +++++- 7 files changed, 54 insertions(+), 3 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java index f95d0af68..19185ae84 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java @@ -1,18 +1,42 @@ package ru.spcex.clearing.reports; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; +import ru.spcex.clearing.reports.services.ReportDataCollector; import ru.spcex.clearing.reports.services.ReportsService; +import ru.spcex.clearing.reports.services.builders.XMLReportBuilder; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.LocalDate; +import java.util.Map; @SpringBootApplication public class ReportsServiceApplication { public static void main(String[] args) { try { SpringApplicationBuilder builder = new SpringApplicationBuilder(ReportsServiceApplication.class); - builder.run(args); + ConfigurableApplicationContext context = builder.run(args); + + //todo это тест. Переписать код: + Logger log = LoggerFactory.getLogger(ReportsServiceApplication.class); + ImdgProvider imdg = context.getBean(ImdgProvider.class); + log.info("Wait IMDG..."); + imdg.waitAvailable(); + log.info("Run generate report."); + Map allReports = context.getBeansOfType(ReportDataCollector.class); + System.out.println(allReports); + for (ReportDataCollector collector:allReports.values()) { + XMLReportBuilder xmlReportBuilder = new XMLReportBuilder(collector.getReportClass(), collector); + LocalDate date2 = LocalDate.now(); + LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1); + xmlReportBuilder.createReport(date1, date2); + } } catch (Throwable e) { - LoggerFactory.getLogger(ReportsServiceApplication.class).error("DBF-Loader start failed: {} -> {}", e.getClass().getSimpleName(), e.getMessage()); + LoggerFactory.getLogger(ReportsServiceApplication.class).error("DBF-Loader start failed: {} -> {}", e.getClass().getSimpleName(), ExceptionUtils.getStackTrace(e)); System.exit(-1); } ReportsService reportsService = new ReportsService(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java index 69101ef75..739c83759 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java @@ -44,6 +44,7 @@ public abstract class ReportDataCollector { throw new IllegalArgumentException("deprecated"); } + abstract public Class getReportClass(); protected String toString(Long val) { if (val == null) return null; 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 073f8d7b2..a81b79c22 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 @@ -135,4 +135,9 @@ public class Bt17_1_P1_collector extends ReportDataCollector getReportClass() { + return ReportBR_0420315_P1.class; + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java index 9c3db398c..8bc56a177 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java @@ -58,4 +58,9 @@ public class Bt17_1_P2_collector extends ReportDataCollector getReportClass() { + return ReportBR_0420315_P2.class; + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java index 65aa7b0a8..6081329ea 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java @@ -74,4 +74,9 @@ public class Bt17_2_collector extends ReportDataCollector { return String.format("REPBR.0420317.%s-%s.%s", DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(endDate), DATE_TIME_FORMATTER.format(dateTimeNow)); } + + @Override + public Class getReportClass() { + return ReportBR_0420317.class; + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java index d89f4383b..463f6ba36 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java @@ -61,4 +61,9 @@ public class Bt17_5_P1_collector extends ReportDataCollector getReportClass() { + return ReportBR_0420312_P1.class; + } } diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportDataCollectorTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportDataCollectorTest.java index 9dbff0808..7341332e7 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportDataCollectorTest.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportDataCollectorTest.java @@ -1,6 +1,7 @@ package ru.spcex.clearing.reports.services; import org.junit.jupiter.api.Test; +import ru.spcex.clearing.reports.reports.AbstractReport; import java.time.Instant; import java.time.LocalDate; @@ -28,7 +29,7 @@ class ReportDataCollectorTest extends ReportDataCollector { } @Override - public Object collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + public AbstractReport collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { throw new IllegalStateException("test"); } @@ -36,4 +37,9 @@ class ReportDataCollectorTest extends ReportDataCollector { public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) { throw new IllegalStateException("test"); } + + @Override + public Class getReportClass() { + return AbstractReport.class; + } } \ No newline at end of file From 2b0167803b7b34a4613056eba15a4587ae2db768 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 26 Dec 2022 18:26:48 +0300 Subject: [PATCH 13/13] =?UTF-8?q?reports-service=20=D0=BF=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BC=D0=B5=D0=BB=D0=BA=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B1=D0=B0=D0=B3=D0=B8,=20=D0=BF=D0=BE=D0=B4=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B8=D0=BB=D1=81=D1=8F=20=D0=BA=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=D0=B2=D0=BE=D0=BC=D1=83=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/spcex/clearing/reports/ReportsServiceApplication.java | 5 +++-- .../clearing/reports/services/builders/XMLReportBuilder.java | 2 +- .../reports/services/collector/Bt17_1_P1_collector.java | 2 +- .../src/main/resources/application.properties | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java index 19185ae84..113de634c 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java @@ -28,15 +28,16 @@ public class ReportsServiceApplication { imdg.waitAvailable(); log.info("Run generate report."); Map allReports = context.getBeansOfType(ReportDataCollector.class); - System.out.println(allReports); + log.info("Report types: {}", allReports); for (ReportDataCollector collector:allReports.values()) { + log.info("Make report {}", collector); XMLReportBuilder xmlReportBuilder = new XMLReportBuilder(collector.getReportClass(), collector); LocalDate date2 = LocalDate.now(); LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1); xmlReportBuilder.createReport(date1, date2); } } catch (Throwable e) { - LoggerFactory.getLogger(ReportsServiceApplication.class).error("DBF-Loader start failed: {} -> {}", e.getClass().getSimpleName(), ExceptionUtils.getStackTrace(e)); + LoggerFactory.getLogger(ReportsServiceApplication.class).error("Report-service start failed: {} -> {}", e.getClass().getSimpleName(), ExceptionUtils.getStackTrace(e)); System.exit(-1); } ReportsService reportsService = new ReportsService(); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java index a1b2e0849..ed8ac24bf 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java @@ -32,7 +32,7 @@ public class XMLReportBuilder extends FileReportBuilde R report = collector.collectReportWithPeriod(startDate, endDate); String reportName = report.getReportName(LocalDateTime.now()); - if (System.getProperty("os.name").contains("windows")) reportName = reportName.replace(":", "_"); + if (System.getProperty("os.name").toLowerCase().contains("windows")) reportName = reportName.replace(":", "_"); String reportFileName = reportName + ".xml"; File reportFile = new File(reportFileName); 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 a81b79c22..229eb2a8a 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 @@ -71,7 +71,7 @@ public class Bt17_1_P1_collector extends ReportDataCollector liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); diff --git a/clearing-parent/reports-service/src/main/resources/application.properties b/clearing-parent/reports-service/src/main/resources/application.properties index 6c2158643..52d18bea7 100644 --- a/clearing-parent/reports-service/src/main/resources/application.properties +++ b/clearing-parent/reports-service/src/main/resources/application.properties @@ -2,7 +2,7 @@ server.port=8080 server.servlet.context-path=/reports_service spring.main.web-application-type=servlet -reports-service.hazelcast.cluster-members=127.0.0.1:5701 +reports-service.hazelcast.cluster-members=127.0.0.1:5701,10.200.200.181:5701 reports-service.hazelcast.login=dev reports-service.hazelcast.password=dev-pass reports-service.ReportModuleOut=./report_out