From 0881e1182bb369b0b863ca018f1a4d562e36094c Mon Sep 17 00:00:00 2001 From: akulikov Date: Sat, 27 May 2023 12:29:16 +0300 Subject: [PATCH] ValidateMemberCompanies, CheckMemberCompanyExist --- .../config/PipelineConfiguration.java | 4 +- .../companies/CheckMemberCompanyExist.java | 257 ++++++++++++++++++ .../companies/PrepareMemberCompanies.java | 24 +- .../companies/ValidateMemberCompanies.java | 134 ++++++++- ...Exist.java => CheckFondSecurityExist.java} | 4 +- ...xist.java => CheckIssuerCompanyExist.java} | 14 +- .../ValidateIssuerCompanies.java | 1 + .../gatewayapi/request/CompaniesRequest.java | 20 +- .../request/objects/IssuerCompanySymbols.java | 2 + .../{Client.java => MemberClient.java} | 2 +- .../request/objects/MemberCompany.java | 20 +- ...cument.java => MemberProfileDocument.java} | 2 +- .../platform/enumeration/CompanySymbol.java | 9 +- .../platform/enumeration/DocumentTypes.java | 4 + 14 files changed, 451 insertions(+), 46 deletions(-) create mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CheckMemberCompanyExist.java rename clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/{CheckSecurityExist.java => CheckFondSecurityExist.java} (98%) rename clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/{CheckCompanyExist.java => CheckIssuerCompanyExist.java} (94%) rename clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/{Client.java => MemberClient.java} (97%) rename clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/{ProfileDocument.java => MemberProfileDocument.java} (98%) 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 2f5106078..b678663c2 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 @@ -20,8 +20,8 @@ public class PipelineConfiguration { pipeline.add(new PrepareIssuerCompanies()); pipeline.add(new ValidateIncomeSecurities()); pipeline.add(new ValidateIssuerCompanies()); - pipeline.add(new CheckSecurityExist(imdgProvider)); - pipeline.add(new CheckCompanyExist(imdgProvider)); + pipeline.add(new CheckFondSecurityExist(imdgProvider)); + pipeline.add(new CheckIssuerCompanyExist(imdgProvider)); pipeline.add(new SendMessageToCompanyService(kafkaSender, imdgProvider)); pipeline.add(new SendMessageToSecurityService(kafkaSender, imdgProvider)); return pipeline; diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CheckMemberCompanyExist.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CheckMemberCompanyExist.java new file mode 100644 index 000000000..29a63adac --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CheckMemberCompanyExist.java @@ -0,0 +1,257 @@ +package ru.spcex.clearing.gatewayapi.logic.companies; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.clearing.classes.statics.data.account.ClientCode; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.clearing.classes.statics.data.profile.Contact; +import ru.clearing.classes.statics.data.profile.ProfileDocument; +import ru.spcex.clearing.gatewayapi.logic.ProcessResult; +import ru.spcex.clearing.gatewayapi.logic.Stage; +import ru.spcex.clearing.gatewayapi.request.objects.*; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.platform.enumeration.CompanySymbol; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +public class CheckMemberCompanyExist extends Stage { + private final Logger log = LoggerFactory.getLogger(getClass()); + + private final Imdg companyImdg; + private final Imdg companySymbolsImdg; + private final Imdg contactImdg; + private final Imdg profileDocumentImdg; + private final Imdg clientCodeImdg; + + public CheckMemberCompanyExist(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + contactImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, Contact.class); + profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); + clientCodeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClientCode, ClientCode.class); + } + + + @Override + public ProcessResult process(CompaniesRequestParam param) { + List companyList = param.getMemberCompanyList(); + + for (MemberCompany company : companyList) { + boolean companyFound = false; + List companySymbolsList = company.getMemberCompanySymbolsList(); + + // Пытаемся найти компанию по UUID + Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( + Map.of( + "companySymbol", "UUID", + "companySymbolValue", company.getId() + ) + ); + if (!companySymbolsFromImdg.isEmpty()) { + CompanySymbols companySymbolFromImdg = companySymbolsFromImdg.iterator().next(); + if (companySymbolsFromImdg.size() > 1) { + log.warn("For UUID found > 1 company_symbols, update first (id = {})", companySymbolFromImdg.getId()); + } + companyFound = true; + company.setAlreadyExist(true); + company.setMapId(companySymbolFromImdg.getId()); + } + + // Если по UUID не нашли, пытаемся найти по INN или CIO + List companySymbolsListINNorCIO = companySymbolsList.stream() + .filter(issuerCompanySymbols -> + !issuerCompanySymbols.isInvalidData() && + ( + CompanySymbol.CIO.equalsByKey(issuerCompanySymbols.getCompanySymbol()) || + CompanySymbol.INN.equalsByKey(issuerCompanySymbols.getCompanySymbol()) + ) + ).collect(Collectors.toList()); + + // Для компании не найдены реквизиты, значит создаем новую компанию + if (companySymbolsListINNorCIO.isEmpty()) { + company.setAlreadyExist(false); + continue; + } + + // Реквизиты найдены, ищем по ним company.id + for (MemberCompanySymbols companySymbols : companySymbolsListINNorCIO) { + if (companySymbols.isInvalidData()) continue; + + companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( + Map.of( + "companySymbol", companySymbols.getCompanySymbol(), + "companySymbolValue", companySymbols.getCompanySymbolValue() + ) + ); + if (companySymbolsFromImdg.isEmpty()) { + companySymbols.setAlreadyExist(false); + } else { + if (companySymbolsFromImdg.size() > 1) + log.warn("For {} found > 1 company_symbols, use first", companySymbols.getCompanySymbol()); + + CompanySymbols companySymbolFromImdg = companySymbolsFromImdg.iterator().next(); + Company companyFromImdg = companyImdg.getSingleObjectByID(companySymbolFromImdg.getCompanyId()); + if (companyFromImdg == null) { + + // Случай, когда реквизиты есть, а компании нет (по сути данных ошибка в мапе) + log.warn("For own company_symbols (id = {}) company not found", companySymbolFromImdg.getId()); + companySymbols.setAlreadyExist(false); + continue; + + } else if (companyFound) { + + // Случай, когда по переданным реквизитам найдено несколько компании + if (!Objects.equals(company.getMapId(), companyFromImdg.getId())) { + log.warn("For company_symbols (company.UUID = {}, {} = {}) found > 1 company (company.id = {}), " + + "company_symbols skipped", + company.getId(), + companySymbols.getCompanySymbol(), + companySymbols.getCompanySymbolValue(), + companyFromImdg.getId()); + companySymbols.setInvalidData(true); + continue; + } + + } else { + + // Самый вероятный случай: компания найдена по реквизитам + companyFound = true; + company.setAlreadyExist(true); + company.setMapId(companyFromImdg.getId()); + } + + companySymbols.setAlreadyExist(true); + companySymbols.setMapId(companySymbolsFromImdg.iterator().next().getId()); + } + } + + // Если компания реквизиты есть, а компании нет. Маловероятный кейс + if (!companyFound) { + company.setAlreadyExist(false); + continue; + } + + // Проверяем оставшиеся реквизиты на необходимость обновления + for (MemberCompanySymbols companySymbols : companySymbolsList) { + if (companySymbols.isInvalidData() || companySymbols.getMapId() == null) continue; + + companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( + Map.of( + "companyId", company.getMapId(), + "companySymbol", companySymbols.getCompanySymbol(), + "companySymbolValue", companySymbols.getCompanySymbolValue() + ) + ); + if (companySymbolsFromImdg.isEmpty()) { + companySymbols.setAlreadyExist(false); + } else { + CompanySymbols companySymbolFromImdg = companySymbolsFromImdg.iterator().next(); + if (companySymbolsFromImdg.size() > 1) { + log.warn("For company_symbols ({}={}) found > 1 own company_symbols, " + + "update first (company_symbols.id = {})", + companySymbols.getCompanySymbol(), + companySymbols.getCompanySymbolValue(), + companySymbolFromImdg.getId()); + } + companySymbols.setAlreadyExist(true); + companySymbols.setMapId(companySymbolFromImdg.getId()); + } + } + + // Проверяем контакты, документы и клиентов на необходимость обновления + if (company.isAlreadyExist()) { + List contactList = company.getContactList(); + for (MemberContact contact : contactList) { + if (contact.isInvalidData()) continue; + + Collection contactsFromImdg = contactImdg.getCollectionObjectsByFieldValues( + Map.of( + "companyId", company.getMapId(), + "contactType", contact.getContactType() + ) + ); + if (contactsFromImdg.isEmpty()) { + contact.setAlreadyExist(false); + } else { + Contact contactFromImdg = contactsFromImdg.iterator().next(); + if (contactsFromImdg.size() > 1) { + log.warn("Found contact > 1 for contactType {}, update first (id = {})", + contactFromImdg.getContactType(), + contactFromImdg.getId()); + } + contact.setAlreadyExist(true); + contact.setMapId(contactFromImdg.getId()); + } + } + + List memberProfileDocumentList = company.getProfileDocumentList(); + for (MemberProfileDocument memberProfileDocument : memberProfileDocumentList) { + if (memberProfileDocument.isInvalidData()) continue; + + Collection profileDocumentsFromImdg = profileDocumentImdg.getCollectionObjectsByFieldValues( + Map.of( + "companyId", company.getMapId(), + "documentType", memberProfileDocument.getDocumentType() + ) + ); + if (profileDocumentsFromImdg.isEmpty()) { + memberProfileDocument.setAlreadyExist(false); + } else { + ProfileDocument profileDocument = profileDocumentsFromImdg.iterator().next(); + if (profileDocumentsFromImdg.size() > 1) { + log.warn("Found profileDocument > 1 for documentType {} (companyId {}), update first (id = {})", + memberProfileDocument.getDocumentType(), + company.getMapId(), + profileDocument.getId()); + } + memberProfileDocument.setAlreadyExist(true); + memberProfileDocument.setMapId(profileDocument.getId()); + } + } + + List memberClientList = company.getClientList(); + for (MemberClient memberClient : memberClientList) { + if (memberClient.isInvalidData()) continue; + + Collection clientCodesFromImdg = clientCodeImdg.getCollectionObjectsByFieldValues( + Map.of( + "companyId", company.getMapId(), + "code", memberClient.getClientCode() + ) + ); + if (clientCodesFromImdg.isEmpty()) { + memberClient.setAlreadyExist(false); + } else { + ClientCode clientCode = clientCodesFromImdg.iterator().next(); + if (clientCodesFromImdg.size() > 1) { + log.warn("Found clientCode > 1 for code {} (companyId {}), update first (id = {})", + clientCode.getCode(), + company.getMapId(), + clientCode.getId()); + } + memberClient.setAlreadyExist(true); + memberClient.setMapId(clientCode.getId()); + } + } + } + + } + + List filteredMemberCompany = companyList.stream() + .filter(issuerCompany -> !issuerCompany.isInvalidData()) + .collect(Collectors.toList()); + + // todo check list is empty + + param.setMemberCompanyList(filteredMemberCompany); + + return null; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/PrepareMemberCompanies.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/PrepareMemberCompanies.java index 058bbef7c..e8055ae04 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/PrepareMemberCompanies.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/PrepareMemberCompanies.java @@ -82,28 +82,28 @@ public class PrepareMemberCompanies extends Stage { memberCompany.getCompanyClearingCategoryList().add(companyClearingCategory); } - List profileDocumentList = param.getCompaniesRequest().getProfileDocumentList(); - for (ProfileDocument profileDocument : profileDocumentList) { - UUID profileDocumentUUID = profileDocument.getCompanyId(); + List memberProfileDocumentList = param.getCompaniesRequest().getProfileDocumentList(); + for (MemberProfileDocument memberProfileDocument : memberProfileDocumentList) { + UUID profileDocumentUUID = memberProfileDocument.getCompanyId(); MemberCompany memberCompany = companyForUUID.get(profileDocumentUUID); if (memberCompany == null) { - log.warn("For profileDocument (documentType {}) not found company, skipped", profileDocument.getDocumentType()); - profileDocument.setInvalidData(true); + log.warn("For profileDocument (documentType {}) not found company, skipped", memberProfileDocument.getDocumentType()); + memberProfileDocument.setInvalidData(true); continue; } - memberCompany.getProfileDocumentList().add(profileDocument); + memberCompany.getProfileDocumentList().add(memberProfileDocument); } - List clientList = param.getCompaniesRequest().getClientList(); - for (Client client : clientList) { - UUID clientUUID = client.getCompanyId(); + List memberClientList = param.getCompaniesRequest().getClientList(); + for (MemberClient memberClient : memberClientList) { + UUID clientUUID = memberClient.getCompanyId(); MemberCompany memberCompany = companyForUUID.get(clientUUID); if (memberCompany == null) { - log.warn("For client (clientCode {}) not found company, skipped", client.getClientCode()); - client.setInvalidData(true); + log.warn("For client (clientCode {}) not found company, skipped", memberClient.getClientCode()); + memberClient.setInvalidData(true); continue; } - memberCompany.getClientList().add(client); + memberCompany.getClientList().add(memberClient); } List filteredIssuerCompany = companyList.stream() diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/ValidateMemberCompanies.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/ValidateMemberCompanies.java index d6dc290c3..dfc25014f 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/ValidateMemberCompanies.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/ValidateMemberCompanies.java @@ -5,13 +5,58 @@ 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.MemberCompany; +import ru.spcex.clearing.gatewayapi.request.objects.*; +import ru.spcex.platform.enumeration.*; +import ru.spcex.platform.utils.enumeration.IEnumKey; +import java.util.Arrays; import java.util.List; public class ValidateMemberCompanies extends Stage { private final Logger log = LoggerFactory.getLogger(getClass()); + private final List validCompanySymbols = Arrays.asList( + CompanySymbol.INN, + CompanySymbol.CIO, + CompanySymbol.OGRN, + CompanySymbol.CPP, + CompanySymbol.OCPO, + CompanySymbol.BIC, + CompanySymbol.LICB, + CompanySymbol.LICR, + CompanySymbol.LICD, + CompanySymbol.LICT, + CompanySymbol.LICC, + CompanySymbol.LICF + ); + + private final List validContactTypes = Arrays.asList( + ContactTypes.adrs, + ContactTypes.cont, + ContactTypes.mail, + ContactTypes.gdir, + ContactTypes.trst, + ContactTypes.fax, + ContactTypes.info, + ContactTypes.web + ); + + private final List validDocumentTypes = Arrays.asList( + DocumentTypes.cntr, + DocumentTypes.form, + DocumentTypes.licb, + DocumentTypes.licr, + DocumentTypes.licd, + DocumentTypes.lict, + DocumentTypes.licc, + DocumentTypes.licf, + DocumentTypes.edoc, + DocumentTypes.xcnt + ); + + private final List validWorkflowStatus = List.of(ServiceStatus.values()); + private final List validClearingCategory = List.of(ClearingCategory.values()); + @Override public ProcessResult process(CompaniesRequestParam param) { List memberCompanyList = param.getMemberCompanyList(); @@ -25,7 +70,92 @@ public class ValidateMemberCompanies extends Stage { continue; } - // todo in progress... + for (MemberCompanyClearingCategory companyClearingCategory : company.getCompanyClearingCategoryList()) { + String workflowStatusStr = companyClearingCategory.getWorkflowStatus(); + ServiceStatus workflowStatus = IEnumKey.getEnumByKey(ServiceStatus.class, workflowStatusStr); + if (!validWorkflowStatus.contains(workflowStatus)) { + log.warn("Invalid workflow_status {} for company_clearing_category for company.UUID {}, skipped", workflowStatus, company.getId()); + companyClearingCategory.setInvalidData(true); + } + + String clearingCategoryStr = companyClearingCategory.getCategory(); + ClearingCategory clearingCategory = IEnumKey.getEnumByKey(ClearingCategory.class, clearingCategoryStr); + if (!validClearingCategory.contains(clearingCategory)) { + log.warn("Invalid category {} for company_clearing_category for company.UUID {}, skipped", workflowStatus, company.getId()); + companyClearingCategory.setInvalidData(true); + } + } + + for (MemberCompanySymbols companySymbols : company.getMemberCompanySymbolsList()) { + String companySymbolStr = companySymbols.getCompanySymbol(); + CompanySymbol companySymbol = IEnumKey.getEnumByKey(CompanySymbol.class, companySymbolStr); + if (!validCompanySymbols.contains(companySymbol)) { + log.warn("Invalid companySymbol {} for company.UUID {}, skipped", companySymbolStr, company.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 (MemberContact contact : company.getContactList()) { + + String contactTypeStr = contact.getContactType(); + ContactTypes contactType = IEnumKey.getEnumByKey(ContactTypes.class, contactTypeStr); + if (!validContactTypes.contains(contactType)) { + log.warn("Invalid contact_type {} for company.UUID {}, skipped", contactTypeStr, company.getId()); + contact.setInvalidData(true); + } + + if (StringUtils.isEmpty(contact.getContactValue())) { + log.warn("Empty or null contact_value for contact {}, company.UUID {}", contactTypeStr, company.getId()); + contact.setInvalidData(true); + } + + } + + for (MemberProfileDocument memberProfileDocument : company.getProfileDocumentList()) { + String documentTypeStr = memberProfileDocument.getDocumentType(); + DocumentTypes documentType = IEnumKey.getEnumByKey(DocumentTypes.class, documentTypeStr); + if (!validDocumentTypes.contains(documentType)) { + log.warn("Invalid document_type {} for profile_document for company.UUID {}, skipped", documentTypeStr, company.getId()); + memberProfileDocument.setInvalidData(true); + } + + if (memberProfileDocument.getIssueDate() == null) { + log.warn("issue_date is null for profile_document, company.UUID {}", company.getId()); + memberProfileDocument.setInvalidData(true); + } + + if (StringUtils.isEmpty(memberProfileDocument.getIssuer())) { + log.warn("issuer is null or empty for profile_document, company.UUID {}", company.getId()); + memberProfileDocument.setInvalidData(true); + } + + if (StringUtils.isEmpty(memberProfileDocument.getNumber())) { + log.warn("number is null or empty for profile_document, company.UUID {}", company.getId()); + memberProfileDocument.setInvalidData(true); + } + + if (memberProfileDocument.getValidToDate() == null) { + log.warn("valid_to_date is null for profile_document, company.UUID {}", company.getId()); + memberProfileDocument.setInvalidData(true); + } + } + + for (MemberClient memberClient : company.getClientList()) { + if (StringUtils.isEmpty(memberClient.getClientCode())) { + log.warn("client_code is null or empty for client, company.UUID {}", company.getId()); + memberClient.setInvalidData(true); + } + + if (StringUtils.isEmpty(memberClient.getMoneyAccount()) && StringUtils.isEmpty(memberClient.getDepoAccount())) { + log.warn("money_account and depo_account is null or empty for client, company.UUID {}", company.getId()); + memberClient.setInvalidData(true); + } + } } diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckSecurityExist.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckFondSecurityExist.java similarity index 98% rename from clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckSecurityExist.java rename to clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckFondSecurityExist.java index dd2f086b4..22e7e3945 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckSecurityExist.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckFondSecurityExist.java @@ -22,7 +22,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; -public class CheckSecurityExist extends Stage { +public class CheckFondSecurityExist extends Stage { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg equitySecurityImdg; @@ -31,7 +31,7 @@ public class CheckSecurityExist extends Stage { private final Imdg couponPeriodImdg; private final Imdg fixedIncomeCashFlowImdg; - public CheckSecurityExist(ImdgProvider imdgProvider) { + public CheckFondSecurityExist(ImdgProvider imdgProvider) { equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class); listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckCompanyExist.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckIssuerCompanyExist.java similarity index 94% rename from clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckCompanyExist.java rename to clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckIssuerCompanyExist.java index 5513863ef..d125ff32b 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckCompanyExist.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/CheckIssuerCompanyExist.java @@ -21,14 +21,14 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; -public class CheckCompanyExist extends Stage { +public class CheckIssuerCompanyExist extends Stage { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg companyImdg; private final Imdg companySymbolsImdg; private final Imdg contactImdg; - public CheckCompanyExist(ImdgProvider imdgProvider) { + public CheckIssuerCompanyExist(ImdgProvider imdgProvider) { companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); contactImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, Contact.class); @@ -135,10 +135,11 @@ public class CheckCompanyExist extends Stage { // Проверяем оставшиеся реквизиты на необходимость обновления for (IssuerCompanySymbols companySymbols : companySymbolsList) { - if (companySymbols.isInvalidData() || companySymbols.getMapId() != null) continue; + if (companySymbols.isInvalidData() || companySymbols.getMapId() == null) continue; companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( Map.of( + "companyId", company.getMapId(), "companySymbol", companySymbols.getCompanySymbol(), "companySymbolValue", companySymbols.getCompanySymbolValue() ) @@ -160,13 +161,16 @@ public class CheckCompanyExist extends Stage { } // Проверяем контакты на необходимость обновления - if (company.isAlreadyExist()) { + if (company.isAlreadyExist() && company.getMapId() != null) { List contactList = company.getIssuerContactList(); for (IssuerContact contact : contactList) { if (contact.isInvalidData()) continue; Collection contactsFromImdg = contactImdg.getCollectionObjectsByFieldValues( - Map.of("contactType", contact.getContactType()) + Map.of( + "companyId", company.getMapId(), + "contactType", contact.getContactType() + ) ); if (contactsFromImdg.isEmpty()) { contact.setAlreadyExist(false); diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/ValidateIssuerCompanies.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/ValidateIssuerCompanies.java index a02fa0cc4..f353d899d 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/ValidateIssuerCompanies.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/ValidateIssuerCompanies.java @@ -22,6 +22,7 @@ public class ValidateIssuerCompanies extends Stage { private final List validCompanySymbols = Arrays.asList( CompanySymbol.OCVD, CompanySymbol.INN, + CompanySymbol.CIO, CompanySymbol.CPP, CompanySymbol.OCPO, CompanySymbol.BIC, diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/CompaniesRequest.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/CompaniesRequest.java index 6add93bb6..77f52dce0 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/CompaniesRequest.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/CompaniesRequest.java @@ -29,11 +29,11 @@ public class CompaniesRequest extends BaseRequest { @JsonProperty("profile_document") @ApiModelProperty(value = "Список документов участников") - private List profileDocumentList; + private List memberProfileDocumentList; @JsonProperty("client") @ApiModelProperty(value = "Список клиентов участников") - private List clientList; + private List memberClientList; public List getCompanyList() { @@ -76,19 +76,19 @@ public class CompaniesRequest extends BaseRequest { this.contactList = contactList; } - public List getProfileDocumentList() { - return profileDocumentList; + public List getProfileDocumentList() { + return memberProfileDocumentList; } - public void setProfileDocumentList(List profileDocumentList) { - this.profileDocumentList = profileDocumentList; + public void setProfileDocumentList(List memberProfileDocumentList) { + this.memberProfileDocumentList = memberProfileDocumentList; } - public List getClientList() { - return clientList; + public List getClientList() { + return memberClientList; } - public void setClientList(List clientList) { - this.clientList = clientList; + public void setClientList(List memberClientList) { + this.memberClientList = memberClientList; } } diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/IssuerCompanySymbols.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/IssuerCompanySymbols.java index 178222f28..d955fbf2d 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/IssuerCompanySymbols.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/IssuerCompanySymbols.java @@ -25,6 +25,7 @@ public class IssuerCompanySymbols extends WithMapId { · OCPO · BIC · OGRN + · CIO """, example = "INN" ) @@ -36,6 +37,7 @@ public class IssuerCompanySymbols extends WithMapId { Значения для company_symbol: Для OCVD - Регистрационные данные\\ОКВЭД Для INN - Основные сведения\\ИНН + Для CIO - Основные сведения\\CIO Для CPP - Основные сведения\\КПП Для OCPO - Основные сведения\\ОКПО Для BIC - Основные сведения\\БИК diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Client.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/MemberClient.java similarity index 97% rename from clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Client.java rename to clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/MemberClient.java index 685cd4288..6045eade1 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Client.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/MemberClient.java @@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty; import java.util.UUID; -public class Client extends WithMapId { +public class MemberClient extends WithMapId { @JsonProperty("company_id") @ApiModelProperty( value = "Ссылка на company", diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/MemberCompany.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/MemberCompany.java index d258cfb51..beab0263c 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/MemberCompany.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/MemberCompany.java @@ -75,10 +75,10 @@ public class MemberCompany extends WithMapId { private List contactList = new ArrayList<>(); @JsonIgnore - private List profileDocumentList = new ArrayList<>(); + private List memberProfileDocumentList = new ArrayList<>(); @JsonIgnore - private List clientList = new ArrayList<>(); + private List memberClientList = new ArrayList<>(); public UUID getId() { @@ -169,19 +169,19 @@ public class MemberCompany extends WithMapId { this.contactList = contactList; } - public List getProfileDocumentList() { - return profileDocumentList; + public List getProfileDocumentList() { + return memberProfileDocumentList; } - public void setProfileDocumentList(List profileDocumentList) { - this.profileDocumentList = profileDocumentList; + public void setProfileDocumentList(List memberProfileDocumentList) { + this.memberProfileDocumentList = memberProfileDocumentList; } - public List getClientList() { - return clientList; + public List getClientList() { + return memberClientList; } - public void setClientList(List clientList) { - this.clientList = clientList; + public void setClientList(List memberClientList) { + this.memberClientList = memberClientList; } } diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ProfileDocument.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/MemberProfileDocument.java similarity index 98% rename from clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ProfileDocument.java rename to clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/MemberProfileDocument.java index 31814639d..aadd4ee55 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ProfileDocument.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/MemberProfileDocument.java @@ -8,7 +8,7 @@ import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer; import java.time.LocalDate; import java.util.UUID; -public class ProfileDocument extends WithMapId { +public class MemberProfileDocument extends WithMapId { @JsonProperty("company_id") @ApiModelProperty( value = "Ссылка на company", 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 7dcb75e7f..e89c3179b 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 @@ -13,7 +13,14 @@ public enum CompanySymbol implements IEnumKey { UUID("UUID"), TRDC("TRDC"), CLRC("CLRC"), - RGRC("RGRC"); + RGRC("RGRC"), + LICB("LICB"), + LICR("LICR"), + LICD("LICD"), + LICT("LICT"), + LICC("LICC"), + LICF("LICF"), + ; private final String key; diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/DocumentTypes.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/DocumentTypes.java index 5ece21d39..68bd9d1ce 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/DocumentTypes.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/DocumentTypes.java @@ -19,6 +19,10 @@ public enum DocumentTypes implements IEnumKey { inn("INN"), // ИНН cio("CIO"), // КИО licr("LICR"), // Брокерская лицензия + licd("LICD"), // Номер дилерской лицензии + lict("LICT"), // Номер лицензии по управлению ЦБ + licc("LICC"), // Номер лицензии по брокерской деятельности ПФИ (производных финансовых инструментов) + licf("LICF"), // Номер лицензии форекс-дилера fin("FIN"), // Финансовая отчетность trst("TRST"), // Полномочия должностных лиц pmkr("PMKR"), // Распоряжение на списание МКР