From fafa894df890b8a3040802ee403629a005fbf3fb Mon Sep 17 00:00:00 2001 From: akulikov Date: Fri, 26 May 2023 15:13:36 +0300 Subject: [PATCH] ValidateIssuerCompanies stage --- .../config/PipelineConfiguration.java | 4 +- .../logic/listings/CheckCompanyExist.java | 11 +- .../logic/listings/CheckSecurityExist.java | 7 ++ ...ompanyParts.java => PrepareCompanies.java} | 3 +- ...urityParts.java => PrepareSecurities.java} | 2 +- .../listings/ValidateIncomeSecurities.java | 2 - .../listings/ValidateIssuerCompanies.java | 101 ++++++++++++++++++ .../platform/enumeration/CompanySymbol.java | 13 ++- .../platform/enumeration/ContactTypes.java | 4 +- 9 files changed, 136 insertions(+), 11 deletions(-) rename clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/{GroupingCompanyParts.java => PrepareCompanies.java} (98%) rename clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/{GroupingSecurityParts.java => PrepareSecurities.java} (97%) create mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/ValidateIssuerCompanies.java diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/PipelineConfiguration.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/PipelineConfiguration.java index e27b7288d..d4d8325d6 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/PipelineConfiguration.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/PipelineConfiguration.java @@ -15,8 +15,8 @@ public class PipelineConfiguration { @Bean public List> listingsRequestPipeline(ImdgProvider imdgProvider) { List> pipeline = new ArrayList<>(); - pipeline.add(new GroupingSecurityParts()); - pipeline.add(new GroupingCompanyParts()); + pipeline.add(new PrepareSecurities()); + pipeline.add(new PrepareCompanies()); pipeline.add(new ValidateIncomeSecurities()); pipeline.add(new CheckSecurityExist(imdgProvider)); return pipeline; diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/CheckCompanyExist.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/CheckCompanyExist.java index 7b9b17ccb..dced018b1 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/CheckCompanyExist.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/CheckCompanyExist.java @@ -62,8 +62,11 @@ public class CheckCompanyExist extends Stage { // Если по UUID не нашли, пытаемся найти по INN или CIO List companySymbolsListINNorCIO = companySymbolsList.stream() .filter(issuerCompanySymbols -> - CompanySymbol.CIO.equalsByKey(issuerCompanySymbols.getCompanySymbol()) || - CompanySymbol.INN.equalsByKey(issuerCompanySymbols.getCompanySymbol()) + !issuerCompanySymbols.isInvalidData() && + ( + CompanySymbol.CIO.equalsByKey(issuerCompanySymbols.getCompanySymbol()) || + CompanySymbol.INN.equalsByKey(issuerCompanySymbols.getCompanySymbol()) + ) ).collect(Collectors.toList()); // Для компании не найдены реквизиты, значит создаем новую компанию @@ -74,6 +77,8 @@ public class CheckCompanyExist extends Stage { // Реквизиты найдены, ищем по ним company.id for (IssuerCompanySymbols companySymbols : companySymbolsListINNorCIO) { + if (companySymbols.isInvalidData()) continue; + companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( Map.of( "companySymbol", companySymbols.getCompanySymbol(), @@ -158,6 +163,8 @@ public class CheckCompanyExist extends Stage { if (company.isAlreadyExist()) { List contactList = company.getIssuerContactList(); for (IssuerContact contact : contactList) { + if (contact.isInvalidData()) continue; + Collection contactsFromImdg = contactImdg.getCollectionObjectsByFieldValues( Map.of("contactType", contact.getContactType()) ); diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/CheckSecurityExist.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/CheckSecurityExist.java index 7117b1e9d..9317597db 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/CheckSecurityExist.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/CheckSecurityExist.java @@ -81,6 +81,8 @@ public class CheckSecurityExist extends Stage { } for (IncomeListing listing : incomeSecurity.getListingList()) { + if (listing.isInvalidData()) continue; + if (!incomeSecurity.isAlreadyExist()) { listing.setAlreadyExist(false); continue; @@ -108,6 +110,8 @@ public class CheckSecurityExist extends Stage { } for (CouponSchedule couponSchedules : incomeSecurity.getCouponScheduleList()) { + if (couponSchedules.isInvalidData()) continue; + if (!incomeSecurity.isAlreadyExist()) { couponSchedules.setAlreadyExist(false); continue; @@ -137,6 +141,8 @@ public class CheckSecurityExist extends Stage { } for (Nominal nominal : incomeSecurity.getNominalList()) { + if (nominal.isInvalidData()) continue; + if (incomeSecurity.isAlreadyExist()) { Collection fixedIncomeCashFlowListFromImdg = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues( Map.of( @@ -162,6 +168,7 @@ public class CheckSecurityExist extends Stage { } for (CouponSchedule couponSchedule : incomeSecurity.getCouponScheduleList()) { + if (couponSchedule.isInvalidData()) continue; if (nominal.getDate().isBefore(couponSchedule.getPeriodStartDate()) || nominal.getDate().isAfter(couponSchedule.getPeriodEndDate())) continue; nominal.setAccruedCoupon(couponSchedule.getAccruedCoupon()); diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/GroupingCompanyParts.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/PrepareCompanies.java similarity index 98% rename from clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/GroupingCompanyParts.java rename to clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/PrepareCompanies.java index 1d586bd25..64e79a4a8 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/GroupingCompanyParts.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/PrepareCompanies.java @@ -12,12 +12,13 @@ import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; -public class GroupingCompanyParts extends Stage { +public class PrepareCompanies extends Stage { private final Logger log = LoggerFactory.getLogger(getClass()); @Override public ProcessResult process(ListingsRequestParam param) { List issuerCompanyList = param.getListingsRequest().getIssuerCompanyList(); + Map issuerCompanyMap = new HashMap<>(); for (IssuerCompany issuerCompany : issuerCompanyList) { if (issuerCompanyMap.containsKey(issuerCompany.getId())) { diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/GroupingSecurityParts.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/PrepareSecurities.java similarity index 97% rename from clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/GroupingSecurityParts.java rename to clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/PrepareSecurities.java index 7ff86b4ac..6f6942ec5 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/GroupingSecurityParts.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/PrepareSecurities.java @@ -12,7 +12,7 @@ import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; -public class GroupingSecurityParts extends Stage { +public class PrepareSecurities extends Stage { private final Logger log = LoggerFactory.getLogger(getClass()); @Override diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/ValidateIncomeSecurities.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/ValidateIncomeSecurities.java index 5ecaedbe4..d884a39fd 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/ValidateIncomeSecurities.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/ValidateIncomeSecurities.java @@ -19,7 +19,6 @@ import java.util.stream.Collectors; public class ValidateIncomeSecurities extends Stage { private final Logger log = LoggerFactory.getLogger(getClass()); - // todo collect errors for response @Override public ProcessResult process(ListingsRequestParam param) { List securities = param.getSecurities(); @@ -95,7 +94,6 @@ public class ValidateIncomeSecurities extends Stage { param.setSecurities(filteredIncomeSecurities); - return null; } } diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/ValidateIssuerCompanies.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/ValidateIssuerCompanies.java new file mode 100644 index 000000000..a987e0916 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings/ValidateIssuerCompanies.java @@ -0,0 +1,101 @@ +package ru.spcex.clearing.gatewayapi.logic.listings; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.spcex.clearing.gatewayapi.logic.ProcessResult; +import ru.spcex.clearing.gatewayapi.logic.Stage; +import ru.spcex.clearing.gatewayapi.request.objects.IssuerCompany; +import ru.spcex.clearing.gatewayapi.request.objects.IssuerCompanySymbols; +import ru.spcex.clearing.gatewayapi.request.objects.IssuerContact; +import ru.spcex.platform.enumeration.CompanySymbol; +import ru.spcex.platform.enumeration.ContactTypes; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.utils.enumeration.IEnumKey; + +import java.util.Arrays; +import java.util.List; + +public class ValidateIssuerCompanies extends Stage { + private final Logger log = LoggerFactory.getLogger(getClass()); + + private final List validCompanySymbols = Arrays.asList( + CompanySymbol.OCVD, + CompanySymbol.INN, + CompanySymbol.CPP, + CompanySymbol.OCPO, + CompanySymbol.BIC, + CompanySymbol.OGRN + ); + private final List validContactTypes = Arrays.asList( + ContactTypes.adrs, + ContactTypes.cont, + ContactTypes.mail, + ContactTypes.gdir, + ContactTypes.trst, + ContactTypes.fax, + ContactTypes.info, + ContactTypes.web + ); + + @Override + public ProcessResult process(ListingsRequestParam param) { + List companyList = param.getIssuerCompanyList(); + + for (IssuerCompany issuerCompany : companyList) { + if (issuerCompany.isInvalidData()) continue; + + if (StringUtils.isEmpty(issuerCompany.getShortName())) { + log.warn("Empty or null shortName for company (UUID = {}), skipped", issuerCompany.getId()); + issuerCompany.setInvalidData(true); + continue; + } + + String workflowStatusStr = issuerCompany.getWorkflowStatus(); + WorkflowStatus workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr); + if (workflowStatus == null) { + log.warn("Invalid workflowStatus {} for company (UUID = {}), skipped", workflowStatusStr, issuerCompany.getId()); + issuerCompany.setInvalidData(true); + continue; + } + + + for (IssuerCompanySymbols companySymbols : issuerCompany.getIssuerCompanySymbolsList()) { + + String companySymbolStr = companySymbols.getCompanySymbol(); + CompanySymbol companySymbol = IEnumKey.getEnumByKey(CompanySymbol.class, companySymbolStr); + if (!validCompanySymbols.contains(companySymbol)) { + log.warn("Invalid companySymbol {} for company.UUID {}, skipped", companySymbolStr, issuerCompany.getId()); + companySymbols.setInvalidData(true); + } + + if (StringUtils.isEmpty(companySymbols.getCompanySymbolValue())) { + log.warn("Empty or null companySymbolValue for company.UUID {}, skipped", companySymbols.getCompanySymbolValue()); + companySymbols.setInvalidData(true); + } + + } + + + for (IssuerContact contact : issuerCompany.getIssuerContactList()) { + + String contactTypeStr = contact.getContactType(); + ContactTypes contactType = IEnumKey.getEnumByKey(ContactTypes.class, contactTypeStr); + if (!validContactTypes.contains(contactType)) { + log.warn("Invalid contactType {} for company.UUID {}, skipped", contactTypeStr, issuerCompany.getId()); + contact.setInvalidData(true); + } + + if (StringUtils.isEmpty(contact.getContactValue())) { + log.warn("Empty or null contactValue for contact {}, company.UUID {}", contactTypeStr, issuerCompany.getId()); + contact.setInvalidData(true); + } + + } + + + } + + return null; + } +} diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CompanySymbol.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CompanySymbol.java index 7cd2eee6e..7dcb75e7f 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CompanySymbol.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CompanySymbol.java @@ -3,8 +3,17 @@ package ru.spcex.platform.enumeration; import ru.spcex.platform.utils.enumeration.IEnumKey; public enum CompanySymbol implements IEnumKey { - INN("INN"), BIC("BIC"), CIO("CIO"), UUID("UUID"), - TRDC("TRDC"), CLRC("CLRC"), RGRC("RGRC"); + OCVD("OCVD"), + CPP("CPP"), + OCPO("OCPO"), + OGRN("OGRN"), + INN("INN"), + BIC("BIC"), + CIO("CIO"), + UUID("UUID"), + TRDC("TRDC"), + CLRC("CLRC"), + RGRC("RGRC"); private final String key; diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ContactTypes.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ContactTypes.java index 700babd7d..647335612 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ContactTypes.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ContactTypes.java @@ -15,7 +15,9 @@ public enum ContactTypes implements IEnumKey { trst("TRST"), // Доверенное лицо fax("FAX"), // Факс info("INFO"), // Контактная информация - cmnt("CMNT"); // Примечание + cmnt("CMNT"), // Примечание + web("WEB"), // Веб-сайт + ; private final String key;