From 1c155e48045410debb322ee1ba4001bde8bc4a80 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 16 Jun 2023 14:54:38 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-357 --- .../config/ProcessorConfiguration.java | 14 - .../controller/GatewayController.java | 6 +- .../{companies => }/CompanyProcessor.java | 3 +- .../CompanyRequestAdapter.java | 2 +- .../companies/CompaniesKafkaMessenger.java | 107 ------- .../companies/CompaniesRequestParam.java | 28 -- .../PrepareMemberCompaniesLegacy.java | 123 -------- .../logic/legacy/CheckFondSecurityExist.java | 187 ----------- .../logic/legacy/CheckIssuerCompanyExist.java | 173 ----------- .../logic/legacy/CheckMemberCompanyExist.java | 290 ------------------ .../legacy/CheckMoneyMarketSecurityExist.java | 67 ---- .../legacy/ValidateExchangeInstruments.java | 112 ------- .../legacy/ValidateIncomeSecurities.java | 167 ---------- .../logic/legacy/ValidateIssuerCompanies.java | 103 ------- .../logic/legacy/ValidateMemberCompanies.java | 172 ----------- .../gatewayapi/service/GatewayService.java | 27 ++ .../platform/messaging/domain/Consts.java | 1 + .../cud/clearing/AssetOperationRequest.java | 51 +++ 18 files changed, 83 insertions(+), 1550 deletions(-) rename clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/{companies => }/CompanyProcessor.java (97%) rename clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/{companies => adapter}/CompanyRequestAdapter.java (98%) delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompaniesKafkaMessenger.java delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompaniesRequestParam.java delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/PrepareMemberCompaniesLegacy.java delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckFondSecurityExist.java delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckIssuerCompanyExist.java delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckMemberCompanyExist.java delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckMoneyMarketSecurityExist.java delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateExchangeInstruments.java delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateIncomeSecurities.java delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateIssuerCompanies.java delete mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateMemberCompanies.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/clearing/AssetOperationRequest.java diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/ProcessorConfiguration.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/ProcessorConfiguration.java index e7779169a..a909afe51 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/ProcessorConfiguration.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/ProcessorConfiguration.java @@ -5,9 +5,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.spcex.clearing.gatewayapi.logic.Processor; import ru.spcex.clearing.gatewayapi.logic.Stage; -import ru.spcex.clearing.gatewayapi.logic.companies.CompaniesKafkaMessenger; -import ru.spcex.clearing.gatewayapi.logic.companies.CompaniesRequestParam; -import ru.spcex.clearing.gatewayapi.logic.companies.PrepareMemberCompaniesLegacy; import ru.spcex.clearing.gatewayapi.logic.listings_fond.*; import ru.spcex.clearing.gatewayapi.logic.listings_mm.MMListingsRequestParam; import ru.spcex.clearing.gatewayapi.logic.listings_mm.PrepareExchangeInstruments; @@ -45,15 +42,4 @@ public class ProcessorConfiguration { return processor; } - @Qualifier("companiesRequestProcessor") - @Bean - public Processor companiesRequestProcessor(ImdgProvider imdgProvider, KafkaSender kafkaSender) { - Processor processor = new Processor<>(); - List> pipeline = new ArrayList<>(); - pipeline.add(new PrepareMemberCompaniesLegacy()); - pipeline.add(new CompaniesKafkaMessenger(kafkaSender, imdgProvider)); - processor.setPipeline(pipeline); - return processor; - } - } diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java index 15cf33419..83c979967 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java @@ -11,10 +11,9 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import ru.spcex.clearing.gatewayapi.exception.GatewayException; +import ru.spcex.clearing.gatewayapi.logic.CompanyProcessor; import ru.spcex.clearing.gatewayapi.logic.ProcessResult; import ru.spcex.clearing.gatewayapi.logic.Processor; -import ru.spcex.clearing.gatewayapi.logic.companies.CompaniesRequestParam; -import ru.spcex.clearing.gatewayapi.logic.companies.CompanyProcessor; import ru.spcex.clearing.gatewayapi.logic.listings_fond.FondListingsRequestParam; import ru.spcex.clearing.gatewayapi.logic.listings_mm.MMListingsRequestParam; import ru.spcex.clearing.gatewayapi.request.CommonRequest; @@ -40,7 +39,6 @@ public class GatewayController { private final IMessageResolver messageResolver; private final Processor fondListingsRequestProcessor; private final Processor mmListingsRequestProcessor; - private final Processor companiesRequestProcessor; private final CompanyProcessor companiesProcessor; private final ExecutorService executor; @@ -50,12 +48,10 @@ public class GatewayController { IMessageResolver messageResolver, @Qualifier("fondListingsRequestProcessor") Processor fondListingsRequestProcessor, @Qualifier("mmListingsRequestProcessor") Processor mmListingsRequestProcessor, - @Qualifier("companiesRequestProcessor") Processor companiesRequestProcessor, CompanyProcessor companiesProcessor, @Qualifier("gatewayExecutor") ExecutorService executor) { this.messageResolver = messageResolver; this.fondListingsRequestProcessor = fondListingsRequestProcessor; this.mmListingsRequestProcessor = mmListingsRequestProcessor; - this.companiesRequestProcessor = companiesRequestProcessor; this.companiesProcessor = companiesProcessor; this.executor = executor; } diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompanyProcessor.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/CompanyProcessor.java similarity index 97% rename from clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompanyProcessor.java rename to clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/CompanyProcessor.java index be653b1e7..08767360d 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompanyProcessor.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/CompanyProcessor.java @@ -1,8 +1,9 @@ -package ru.spcex.clearing.gatewayapi.logic.companies; +package ru.spcex.clearing.gatewayapi.logic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import ru.spcex.clearing.gatewayapi.logic.adapter.CompanyRequestAdapter; import ru.spcex.clearing.gatewayapi.request.WithCompanyId; import ru.spcex.clearing.gatewayapi.request.company.*; import ru.spcex.clearing.platform.messaging.domain.Consts; diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompanyRequestAdapter.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/adapter/CompanyRequestAdapter.java similarity index 98% rename from clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompanyRequestAdapter.java rename to clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/adapter/CompanyRequestAdapter.java index 9f97bb883..3504519c4 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompanyRequestAdapter.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/adapter/CompanyRequestAdapter.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.gatewayapi.logic.companies; +package ru.spcex.clearing.gatewayapi.logic.adapter; import org.springframework.stereotype.Service; import ru.spcex.clearing.gatewayapi.request.company.*; diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompaniesKafkaMessenger.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompaniesKafkaMessenger.java deleted file mode 100644 index 6c49f802f..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompaniesKafkaMessenger.java +++ /dev/null @@ -1,107 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.companies; - -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.company.*; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.Consts; -import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.*; -import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; -import ru.spcex.platform.enumeration.CompanySymbol; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.util.List; - -/** - * Отправка сообщения к company-service на создание/обновление company - * todo Пока убрал совсем не рабочую логику с sendToQueueWaitForAnswer - */ -public class CompaniesKafkaMessenger extends Stage { - private final Logger log = LoggerFactory.getLogger(getClass()); - - private final KafkaSender kafkaSender; - private final Imdg companyImdg; - - public CompaniesKafkaMessenger(KafkaSender kafkaSender, ImdgProvider imdgProvider) { - this.kafkaSender = kafkaSender; - this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, ru.clearing.classes.statics.data.company.Company.class); - } - - @Override - public ProcessResult process(CompaniesRequestParam param) { - List companyList = param.getMemberCompanyList(); - for (Company company : companyList) { - if (company.isInvalidData()) continue; - - CompanyGatewayRequest multiCompanyRequest = new CompanyGatewayRequest(); - - CompanyNewRequest companyNewRequest = new CompanyNewRequest(); - companyNewRequest.setShortName(company.getShortName()); - companyNewRequest.setFullName(company.getFullName()); - companyNewRequest.setCompanySymbol(CompanySymbol.UUID.getKey()); - companyNewRequest.setCompanySymbolValue(company.getId().toString()); - companyNewRequest.setTradingCode(company.getTradingCode()); - companyNewRequest.setClearingCode(company.getClearingCode()); - companyNewRequest.setRegistrationCode(company.getRegistrationCode()); - companyNewRequest.setInitiatorCode(company.getInitiatorCode()); - multiCompanyRequest.setCompany(companyNewRequest); - - CompanyInfo companyInfo = company.getCompanyInfo(); - CompanyInfoUpdateRequest companyInfoUpdateRequest = new CompanyInfoUpdateRequest(); - companyInfoUpdateRequest.setCountryCode("RUS"); // todo в текущей версии ТЗ присылается в цифровом обозначении - companyInfoUpdateRequest.setProfessionalSign(companyInfo.getProfessionalSign()); - companyInfoUpdateRequest.setLegalKind(companyInfo.getLegalKind()); - companyInfoUpdateRequest.setOrganizationType(companyInfo.getOrganizationType()); - companyInfoUpdateRequest.setResidence(companyInfo.getResidence()); - multiCompanyRequest.setCompanyInfo(companyInfoUpdateRequest); - - for (CompanySymbols companySymbols : company.getMemberCompanySymbolsList()) { - if (companySymbols.isInvalidData()) continue; - CompanySymbolNewRequest companySymbolNewRequest = new CompanySymbolNewRequest(); - companySymbolNewRequest.setCompanySymbol(companySymbols.getCompanySymbol()); - companySymbolNewRequest.setCompanySymbolValue(companySymbols.getCompanySymbolValue()); - multiCompanyRequest.getCompanySymbols().add(companySymbolNewRequest); - } - - for (Contact contact : company.getContactList()) { - if (contact.isInvalidData()) continue; - ContactNewRequest contactNewRequest = new ContactNewRequest(); - contactNewRequest.setContactType(contact.getContactType()); - contactNewRequest.setContactValue(contact.getContactValue()); - multiCompanyRequest.getContacts().add(contactNewRequest); - } - - for (ProfileDocument profileDocument : company.getProfileDocumentList()) { - if (profileDocument.isInvalidData()) continue; - ProfileDocumentNewRequest profileDocumentNewRequest = new ProfileDocumentNewRequest(); - profileDocumentNewRequest.setDocumentType(profileDocument.getDocumentType()); - profileDocumentNewRequest.setIssueDate(profileDocument.getIssueDate()); - profileDocumentNewRequest.setIssuer(profileDocument.getIssuer()); - profileDocumentNewRequest.setNumber(profileDocument.getNumber()); - profileDocumentNewRequest.setValidToDate(profileDocument.getValidToDate()); - profileDocumentNewRequest.setLink(profileDocument.getLink()); - multiCompanyRequest.getProfileDocuments().add(profileDocumentNewRequest); - } - - for (Client client : company.getClientList()) { - if (client.isInvalidData()) continue; - - if (!company.isAlreadyExist() || !client.isAlreadyExist()) { - ClientCodeNewRequest clientCodeNewRequest = new ClientCodeNewRequest(); - clientCodeNewRequest.setCode(client.getClientCode()); - clientCodeNewRequest.setMoneyAccountId(client.getMoneyAccountId()); - clientCodeNewRequest.setDepoAccountId(client.getDepoAccountId()); - multiCompanyRequest.getClientCodes().add(clientCodeNewRequest); - } - } - - kafkaSender.sendRequestToQueue(Consts.DESTINATION_COMPANY_MULTIREQUEST, multiCompanyRequest); - } - - return null; - } -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompaniesRequestParam.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompaniesRequestParam.java deleted file mode 100644 index 4a8cdd8a5..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/CompaniesRequestParam.java +++ /dev/null @@ -1,28 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.companies; - -import ru.spcex.clearing.gatewayapi.request.company.CompaniesRequest; -import ru.spcex.clearing.gatewayapi.request.company.Company; - -import java.util.ArrayList; -import java.util.List; - -public class CompaniesRequestParam { - private final CompaniesRequest companiesRequest; - private List memberCompanyList = new ArrayList<>(); - - public CompaniesRequestParam(CompaniesRequest companiesRequest) { - this.companiesRequest = companiesRequest; - } - - public CompaniesRequest getCompaniesRequest() { - return companiesRequest; - } - - public List getMemberCompanyList() { - return memberCompanyList; - } - - public void setMemberCompanyList(List memberCompanyList) { - this.memberCompanyList = memberCompanyList; - } -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/PrepareMemberCompaniesLegacy.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/PrepareMemberCompaniesLegacy.java deleted file mode 100644 index 2ece94968..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/companies/PrepareMemberCompaniesLegacy.java +++ /dev/null @@ -1,123 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.companies; - -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.WithCompanyId; -import ru.spcex.clearing.gatewayapi.request.company.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; - -public class PrepareMemberCompaniesLegacy extends Stage { - private final Logger log = LoggerFactory.getLogger(getClass()); - - @Override - public ProcessResult process(CompaniesRequestParam param) { - CompaniesRequest request = param.getCompaniesRequest(); - - List companyList = request.getCompanyList(); - Map companyForUUID = new HashMap<>(); - for (Company memberCompany : companyList) { - if (companyForUUID.containsKey(memberCompany.getId())) { - log.warn("For company.id {} found > 1 element from request, use first", memberCompany.getId()); - memberCompany.setInvalidData(true); - continue; - } - companyForUUID.put(memberCompany.getId(), memberCompany); - } - - List companyInfoList = request.getCompanyInfoList(); - for (CompanyInfo companyInfo : companyInfoList) { - UUID companyInfoUUID = companyInfo.getCompanyId(); - Company company = companyForUUID.get(companyInfoUUID); - if (company == null) { - log.warn("For company_info.company_id {} not found company, company_info skipped", companyInfoUUID); - continue; - } - company.setCompanyInfo(companyInfo); - } - - List memberCompanySymbolsList = param.getCompaniesRequest().getMemberCompanySymbolsList(); - for (CompanySymbols memberCompanySymbols : memberCompanySymbolsList) { - UUID memberCompanySymbolsUUID = memberCompanySymbols.getCompanyId(); - Company memberCompany = companyForUUID.get(memberCompanySymbolsUUID); - if (memberCompany == null) { - log.warn("For company_symbols ({} = {}) not found company, company_symbols skipped", - memberCompanySymbols.getCompanySymbol(), - memberCompanySymbols.getCompanySymbolValue()); - memberCompanySymbols.setInvalidData(true); - continue; - } - memberCompany.getMemberCompanySymbolsList().add(memberCompanySymbols); - } - - List memberContactList = param.getCompaniesRequest().getContactList(); - for (Contact memberContact : memberContactList) { - UUID memberContactUUID = memberContact.getCompanyId(); - Company memberCompany = companyForUUID.get(memberContactUUID); - if (memberCompany == null) { - log.warn("For contact ({} = {}) not found company, skipped", - memberContact.getContactType(), - memberContact.getContactValue()); - memberContact.setInvalidData(true); - continue; - } - memberCompany.getContactList().add(memberContact); - } - - List companyClearingCategoryList = param.getCompaniesRequest().getCompanyClearingCategoryList(); - for (CompanyClearingCategory companyClearingCategory : companyClearingCategoryList) { - UUID companyClearingCategoryUUID = companyClearingCategory.getCompanyId(); - Company memberCompany = companyForUUID.get(companyClearingCategoryUUID); - if (memberCompany == null) { - log.warn("For company_clearing_category ({}) not found company, skipped", companyClearingCategory.getCategory()); - companyClearingCategory.setInvalidData(true); - continue; - } - memberCompany.getCompanyClearingCategoryList().add(companyClearingCategory); - } - - List memberProfileDocumentList = param.getCompaniesRequest().getProfileDocumentList(); - for (ProfileDocument memberProfileDocument : memberProfileDocumentList) { - UUID profileDocumentUUID = memberProfileDocument.getCompanyId(); - Company memberCompany = companyForUUID.get(profileDocumentUUID); - if (memberCompany == null) { - log.warn("For profile_document (document_type {}) not found company, skipped", memberProfileDocument.getDocumentType()); - memberProfileDocument.setInvalidData(true); - continue; - } - memberCompany.getProfileDocumentList().add(memberProfileDocument); - } - - List memberClientList = param.getCompaniesRequest().getClientList(); - for (Client memberClient : memberClientList) { - UUID clientUUID = memberClient.getCompanyId(); - Company memberCompany = companyForUUID.get(clientUUID); - if (memberCompany == null) { - log.warn("For client (client_code {}) not found company, skipped", memberClient.getClientCode()); - memberClient.setInvalidData(true); - continue; - } - memberCompany.getClientList().add(memberClient); - } - - List filteredIssuerCompany = companyList.stream() - .filter(memberCompany -> !memberCompany.isInvalidData()) - .collect(Collectors.toList()); - - // todo check list is empty - - param.setMemberCompanyList(filteredIssuerCompany); - - return null; - } - - private List groupByCompanyId(List listToProcess, UUID companyId) { - return listToProcess.stream().filter(t -> t.getCompanyId().equals(companyId)).collect(Collectors.toList()); - } -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckFondSecurityExist.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckFondSecurityExist.java deleted file mode 100644 index dddbcdb15..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckFondSecurityExist.java +++ /dev/null @@ -1,187 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.legacy; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import ru.clearing.classes.statics.data.instrument.issue.CouponPeriod; -import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; -import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeCashFlow; -import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; -import ru.clearing.classes.statics.data.misc.Listing; -import ru.spcex.clearing.gatewayapi.logic.ProcessResult; -import ru.spcex.clearing.gatewayapi.logic.Stage; -import ru.spcex.clearing.gatewayapi.logic.listings_fond.FondListingsRequestParam; -import ru.spcex.clearing.gatewayapi.request.listing.fond.CouponSchedule; -import ru.spcex.clearing.gatewayapi.request.listing.fond.FondSecurity; -import ru.spcex.clearing.gatewayapi.request.listing.fond.IncomeListing; -import ru.spcex.clearing.gatewayapi.request.listing.fond.Nominal; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.platform.enumeration.InstrumentType; -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; - -public class CheckFondSecurityExist extends Stage { - private final Logger log = LoggerFactory.getLogger(getClass()); - - private final Imdg equitySecurityImdg; - private final Imdg fixedIncomeSecurityImdg; - private final Imdg listingImdg; - private final Imdg couponPeriodImdg; - private final Imdg fixedIncomeCashFlowImdg; - - 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); - couponPeriodImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CouponPeriod, CouponPeriod.class); - fixedIncomeCashFlowImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeCashFlow, FixedIncomeCashFlow.class); - } - - @Override - public ProcessResult process(FondListingsRequestParam param) { - List securities = param.getSecurities(); - - for (FondSecurity fondSecurity : securities) { - String instrumentType = fondSecurity.getInstrumentType(); - String securitySymbol = fondSecurity.getSecuritySymbol(); - if (InstrumentType.BOND.equalsByKey(instrumentType)) { - Collection fixedIncomeSecurities = fixedIncomeSecurityImdg.getCollectionObjectsByFieldValues( - Map.of("securitySymbol", securitySymbol) - ); - if (!fixedIncomeSecurities.isEmpty()) { - FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurities.iterator().next(); - if (fixedIncomeSecurities.size() > 1) { - log.warn("For security_symbol = {} found > 1 fixed_income_security, update first (id = {})", - securitySymbol, - fixedIncomeSecurity.getId()); - } - fondSecurity.setAlreadyExist(true); - fondSecurity.setMapId(fixedIncomeSecurity.getId()); - } else { - fondSecurity.setAlreadyExist(false); - } - } else if (InstrumentType.EQTY.equalsByKey(instrumentType)) { - Collection equitySecurities = equitySecurityImdg.getCollectionObjectsByFieldValues( - Map.of("securitySymbol", securitySymbol) - ); - if (!equitySecurities.isEmpty()) { - EquitySecurity equitySecurity = equitySecurities.iterator().next(); - if (equitySecurities.size() > 1) { - log.warn("For security_symbol = {} found > 1 equity_security, update first (id = {})", - securitySymbol, - equitySecurity.getId()); - } - fondSecurity.setAlreadyExist(true); - fondSecurity.setMapId(equitySecurity.getId()); - } else { - fondSecurity.setAlreadyExist(false); - } - } - - for (IncomeListing listing : fondSecurity.getListingList()) { - if (listing.isInvalidData()) continue; - - if (!fondSecurity.isAlreadyExist()) { - listing.setAlreadyExist(false); - continue; - } - Collection listingsFromImdg = listingImdg.getCollectionObjectsByFieldValues( - Map.of( - "securityId", fondSecurity.getMapId(), - "market", listing.getCode() - ) - ); - if (listingsFromImdg.isEmpty()) { - listing.setAlreadyExist(false); - } else { - Listing listingFromImdg = listingsFromImdg.iterator().next(); - if (listingsFromImdg.size() > 1) { - log.warn("For security_id {} and market {} found > 1 listing, update first (id = {})", - fondSecurity.getMapId(), - listing.getCode(), - listingFromImdg.getId()); - - } - listing.setAlreadyExist(true); - listing.setMapId(listingFromImdg.getId()); - } - } - - for (CouponSchedule couponSchedules : fondSecurity.getCouponScheduleList()) { - if (couponSchedules.isInvalidData()) continue; - - if (!fondSecurity.isAlreadyExist()) { - couponSchedules.setAlreadyExist(false); - continue; - } - Collection couponPeriodListFromImdg = couponPeriodImdg.getCollectionObjectsByFieldValues( - Map.of( - "securityId", fondSecurity.getMapId(), - "periodStartDate", couponSchedules.getPeriodStartDate(), - "periodEndDate", couponSchedules.getPeriodEndDate() - ) - ); - if (couponPeriodListFromImdg.isEmpty()) { - couponSchedules.setAlreadyExist(false); - } else { - CouponPeriod couponPeriod = couponPeriodListFromImdg.iterator().next(); - if (couponPeriodListFromImdg.size() > 1) { - log.warn("For securityId {}, period_start_date {}, period_end_date {} found > 1 coupon_period, " + - "update first (id = {})", - fondSecurity.getMapId(), - couponSchedules.getPeriodStartDate(), - couponSchedules.getPeriodEndDate(), - couponPeriod.getId()); - } - couponSchedules.setAlreadyExist(true); - couponSchedules.setMapId(couponPeriod.getId()); - } - } - - for (Nominal nominal : fondSecurity.getNominalList()) { - if (nominal.isInvalidData()) continue; - - if (fondSecurity.isAlreadyExist()) { - Collection fixedIncomeCashFlowListFromImdg = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues( - Map.of( - "securityId", fondSecurity.getMapId(), - "valueDate", nominal.getDate() - ) - ); - if (fixedIncomeCashFlowListFromImdg.isEmpty()) { - nominal.setAlreadyExist(false); - } else { - FixedIncomeCashFlow fixedIncomeCashFlow = fixedIncomeCashFlowListFromImdg.iterator().next(); - if (fixedIncomeCashFlowListFromImdg.size() > 1) { - log.warn("For security_id {}, value_date {} found > 1 fixed_income_cash_flow, update first (id = {})", - fondSecurity.getMapId(), - nominal.getDate(), - fixedIncomeCashFlow.getId()); - } - nominal.setAlreadyExist(true); - nominal.setMapId(fixedIncomeCashFlow.getId()); - } - } else { - nominal.setAlreadyExist(false); - } - - for (CouponSchedule couponSchedule : fondSecurity.getCouponScheduleList()) { - if (couponSchedule.isInvalidData()) continue; - if (nominal.getDate().isBefore(couponSchedule.getPeriodStartDate()) || nominal.getDate().isAfter(couponSchedule.getPeriodEndDate())) - continue; - nominal.setAccruedCoupon(couponSchedule.getAccruedCoupon()); - nominal.setCouponNumber(couponSchedule.getCouponNumber()); - } - if (nominal.getAccruedCoupon() == null || nominal.getCouponNumber() == null) { - log.warn("Can't find accrued_coupon OR coupon_number for nominal, security.id {}", fondSecurity.getId()); - nominal.setInvalidData(true); - } - } - - } - return null; - } -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckIssuerCompanyExist.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckIssuerCompanyExist.java deleted file mode 100644 index e226e6c17..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckIssuerCompanyExist.java +++ /dev/null @@ -1,173 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.legacy; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -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.spcex.clearing.gatewayapi.logic.ProcessResult; -import ru.spcex.clearing.gatewayapi.logic.Stage; -import ru.spcex.clearing.gatewayapi.logic.listings_fond.FondListingsRequestParam; -import ru.spcex.clearing.gatewayapi.request.listing.fond.IssuerCompany; -import ru.spcex.clearing.gatewayapi.request.listing.fond.IssuerCompanySymbols; -import ru.spcex.clearing.gatewayapi.request.listing.fond.IssuerContact; -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 ru.spcex.platform.utils.enumeration.IEnumKey; - -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -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 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); - } - - @Override - public ProcessResult process(FondListingsRequestParam param) { - List companyList = param.getIssuerCompanyList(); - - for (IssuerCompany company : companyList) { - List companySymbolsList = company.getIssuerCompanySymbolsList(); - - Map companySymbolMap = new HashMap<>(); - for (IssuerCompanySymbols issuerCompanySymbol : companySymbolsList) { - if ( - !issuerCompanySymbol.isInvalidData() && - !CompanySymbol.CIO.equalsByKey(issuerCompanySymbol.getCompanySymbol()) && - !CompanySymbol.INN.equalsByKey(issuerCompanySymbol.getCompanySymbol()) - ) continue; - companySymbolMap.put(IEnumKey.getEnumByKey(CompanySymbol.class, issuerCompanySymbol.getCompanySymbol()), issuerCompanySymbol.getCompanySymbolValue()); - } - Long companyId = getCompanyIdForCompanySymbols(company.getId().toString(), companySymbolMap); - - if (companyId != null) { - company.setAlreadyExist(true); - company.setMapId(companyId); - } else { - company.setAlreadyExist(false); - continue; - } - - // Проверяем реквизиты на необходимость обновления - for (IssuerCompanySymbols companySymbols : companySymbolsList) { - if (companySymbols.isInvalidData()) continue; - - Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companyId", companyId, - "companySymbol", companySymbols.getCompanySymbol() - ) - ); - 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() && company.getMapId() != null) { - List contactList = company.getIssuerContactList(); - for (IssuerContact 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 contact_type {}, update first (id = {})", - contactFromImdg.getContactType(), - contactFromImdg.getId()); - } - contact.setAlreadyExist(true); - contact.setMapId(contactFromImdg.getId()); - } - } - } - - } - - List filteredIssuerCompany = companyList.stream() - .filter(issuerCompany -> !issuerCompany.isInvalidData()) - .collect(Collectors.toList()); - - param.setIssuerCompanyList(filteredIssuerCompany); - - return null; - } - - private Long getCompanyIdForCompanySymbols(String uuid, Map INNorCIO) { - Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", CompanySymbol.UUID.getKey(), - "companySymbolValue", uuid - ) - ); - if (!companySymbolsFromImdg.isEmpty()) { - CompanySymbols companySymbolFromImdg = companySymbolsFromImdg.iterator().next(); - if (companySymbolsFromImdg.size() > 1) { - log.warn("For UUID found > 1 company_symbols, use first (id = {})", companySymbolFromImdg.getId()); - } - return companySymbolFromImdg.getCompanyId(); - } - - for (Map.Entry entry : INNorCIO.entrySet()) { - CompanySymbol companySymbol = entry.getKey(); - String companySymbolValue = entry.getValue(); - - companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", companySymbol.getKey(), - "companySymbolValue", companySymbolValue - ) - ); - if (!companySymbolsFromImdg.isEmpty()) { - if (companySymbolsFromImdg.size() > 1) - log.warn("For {} = {} found > 1 company_symbols, use first", companySymbol.getKey(), companySymbolValue); - - CompanySymbols companySymbolFromImdg = companySymbolsFromImdg.iterator().next(); - Company companyFromImdg = companyImdg.getSingleObjectByID(companySymbolFromImdg.getCompanyId()); - - if (companyFromImdg == null) { - // Случай, когда реквизиты есть, а компании нет (по сути данных ошибка в мапе) - log.error("For own company_symbols (id = {}) company not found (map error)", companySymbolFromImdg.getId()); - } else { - return companyFromImdg.getId(); - } - } - } - - return null; - } - -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckMemberCompanyExist.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckMemberCompanyExist.java deleted file mode 100644 index 6d06c7420..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckMemberCompanyExist.java +++ /dev/null @@ -1,290 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.legacy; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import ru.clearing.classes.statics.data.account.*; -import ru.spcex.clearing.gatewayapi.logic.ProcessResult; -import ru.spcex.clearing.gatewayapi.logic.Stage; -import ru.spcex.clearing.gatewayapi.logic.companies.CompaniesRequestParam; -import ru.spcex.clearing.gatewayapi.request.company.*; -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 ru.spcex.platform.utils.enumeration.IEnumKey; - -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -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; - private final Imdg accountImdg; - private final Imdg clearingAccountImdg; - private final Imdg informationAccountImdg; - private final Imdg depoAccountImdg; - - public CheckMemberCompanyExist(ImdgProvider imdgProvider) { - companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, ru.clearing.classes.statics.data.company.Company.class); - companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, ru.clearing.classes.statics.data.company.CompanySymbols.class); - contactImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, ru.clearing.classes.statics.data.profile.Contact.class); - profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ru.clearing.classes.statics.data.profile.ProfileDocument.class); - clientCodeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClientCode, ClientCode.class); - accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); - clearingAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class); - informationAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_InformationAccount, InformationAccount.class); - depoAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccount, DepoAccount.class); - } - - - @Override - public ProcessResult process(CompaniesRequestParam param) { - List companyList = param.getMemberCompanyList(); - - for (Company company : companyList) { - List companySymbolsList = company.getMemberCompanySymbolsList(); - - Map companySymbolMap = new HashMap<>(); - for (CompanySymbols memberCompanySymbol : companySymbolsList) { - if ( - !memberCompanySymbol.isInvalidData() && - !CompanySymbol.CIO.equalsByKey(memberCompanySymbol.getCompanySymbol()) && - !CompanySymbol.INN.equalsByKey(memberCompanySymbol.getCompanySymbol()) - ) continue; - companySymbolMap.put(IEnumKey.getEnumByKey(CompanySymbol.class, memberCompanySymbol.getCompanySymbol()), memberCompanySymbol.getCompanySymbolValue()); - } - Long companyId = getCompanyIdForCompanySymbols(company.getId().toString(), companySymbolMap); - - if (companyId != null) { - company.setAlreadyExist(true); - company.setMapId(companyId); - } else { - company.setAlreadyExist(false); - continue; - } - - // Проверяем реквизиты на необходимость обновления - for (CompanySymbols companySymbols : companySymbolsList) { - if (companySymbols.isInvalidData()) continue; - - Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companyId", companyId, - "companySymbol", companySymbols.getCompanySymbol() - ) - ); - if (companySymbolsFromImdg.isEmpty()) { - companySymbols.setAlreadyExist(false); - } else { - ru.clearing.classes.statics.data.company.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 (Contact contact : contactList) { - if (contact.isInvalidData()) continue; - - Collection contactsFromImdg = contactImdg.getCollectionObjectsByFieldValues( - Map.of( - "companyId", companyId, - "contactType", contact.getContactType() - ) - ); - if (contactsFromImdg.isEmpty()) { - contact.setAlreadyExist(false); - } else { - ru.clearing.classes.statics.data.profile.Contact contactFromImdg = contactsFromImdg.iterator().next(); - if (contactsFromImdg.size() > 1) { - log.warn("Found contact > 1 for contact_type {}, update first (id = {})", - contactFromImdg.getContactType(), - contactFromImdg.getId()); - } - contact.setAlreadyExist(true); - contact.setMapId(contactFromImdg.getId()); - } - } - - List memberProfileDocumentList = company.getProfileDocumentList(); - for (ProfileDocument memberProfileDocument : memberProfileDocumentList) { - if (memberProfileDocument.isInvalidData()) continue; - - Collection profileDocumentsFromImdg = profileDocumentImdg.getCollectionObjectsByFieldValues( - Map.of( - "companyId", companyId, - "documentType", memberProfileDocument.getDocumentType() - ) - ); - if (profileDocumentsFromImdg.isEmpty()) { - memberProfileDocument.setAlreadyExist(false); - } else { - ru.clearing.classes.statics.data.profile.ProfileDocument profileDocument = profileDocumentsFromImdg.iterator().next(); - if (profileDocumentsFromImdg.size() > 1) { - log.warn("Found profile_document > 1 for document_type {} (company.id {}), update first (id = {})", - memberProfileDocument.getDocumentType(), - companyId, - profileDocument.getId()); - } - memberProfileDocument.setAlreadyExist(true); - memberProfileDocument.setMapId(profileDocument.getId()); - } - } - - List memberClientList = company.getClientList(); - for (Client memberClient : memberClientList) { - if (memberClient.isInvalidData()) continue; - - Collection clientCodesFromImdg = clientCodeImdg.getCollectionObjectsByFieldValues( - Map.of( - "companyId", companyId, - "code", memberClient.getClientCode() - ) - ); - if (clientCodesFromImdg.isEmpty()) { - memberClient.setAlreadyExist(false); - } else { - ClientCode clientCode = clientCodesFromImdg.iterator().next(); - if (clientCodesFromImdg.size() > 1) { - log.warn("Found client_code > 1 for code {} (company.id {}), update first (id = {})", - clientCode.getCode(), - companyId, - clientCode.getId()); - } - memberClient.setAlreadyExist(true); - memberClient.setMapId(clientCode.getId()); - } - - // Определяем соответствующие moneyAccount id из clearingAccount/informationAccount - fillMemberClientMoneyOrDepoAccountId(company, memberClient); - } - } - - } - - List filteredMemberCompany = companyList.stream() - .filter(memberCompany -> !memberCompany.isInvalidData()) - .collect(Collectors.toList()); - - param.setMemberCompanyList(filteredMemberCompany); - - return null; - } - - private void fillMemberClientMoneyOrDepoAccountId(Company company, Client client) { - String moneyAccount = client.getMoneyAccount(); - Collection accountFromImdg = accountImdg.getCollectionObjectsByFieldValues( - Map.of("account", moneyAccount) - ); - if (!accountFromImdg.isEmpty()) { - Account account = accountFromImdg.iterator().next(); - if (accountFromImdg.size() > 1) { - log.warn("for client (company.id {}) for money_account {} found accounts > 1, use first (id = {})", - company.getId(), - moneyAccount, - account.getId()); - } - Long moneyAccountId = null; - InformationAccount informationAccount = informationAccountImdg.getSingleObjectByFieldValues( - Map.of("accountId", account.getId()) - ); - if (informationAccount == null) { - ClearingAccount clearingAccount = clearingAccountImdg.getSingleObjectByFieldValues( - Map.of("accountId", account.getId()) - ); - if (clearingAccount != null) { - moneyAccountId = clearingAccount.getId(); - } - } else { - moneyAccountId = informationAccount.getId(); - } - client.setMoneyAccountId(moneyAccountId); - return; - } - - String depoAccountValue = client.getDepoAccount(); - accountFromImdg = accountImdg.getCollectionObjectsByFieldValues( - Map.of("account", depoAccountValue) - ); - if (!accountFromImdg.isEmpty()) { - Account account = accountFromImdg.iterator().next(); - if (!accountFromImdg.isEmpty()) { - if (accountFromImdg.size() > 1) { - log.warn("for client (company.id {}) for depo_account {} found accounts > 1, use first (id = {})", - company.getId(), - depoAccountValue, - account.getId()); - } - DepoAccount depoAccount = depoAccountImdg.getSingleObjectByFieldValues( - Map.of("accountId", account.getId()) - ); - if (depoAccount != null) { - client.setDepoAccountId(depoAccount.getId()); - } - } - } - } - - - private Long getCompanyIdForCompanySymbols(String uuid, Map INNorCIO) { - Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", CompanySymbol.UUID.getKey(), - "companySymbolValue", uuid - ) - ); - if (!companySymbolsFromImdg.isEmpty()) { - ru.clearing.classes.statics.data.company.CompanySymbols companySymbolFromImdg = companySymbolsFromImdg.iterator().next(); - if (companySymbolsFromImdg.size() > 1) { - log.warn("For UUID found > 1 company_symbols, use first (id = {})", companySymbolFromImdg.getId()); - } - return companySymbolFromImdg.getCompanyId(); - } - - for (Map.Entry entry : INNorCIO.entrySet()) { - CompanySymbol companySymbol = entry.getKey(); - String companySymbolValue = entry.getValue(); - - companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", companySymbol.getKey(), - "companySymbolValue", companySymbolValue - ) - ); - if (!companySymbolsFromImdg.isEmpty()) { - if (companySymbolsFromImdg.size() > 1) - log.warn("For {} = {} found > 1 company_symbols, use first", companySymbol.getKey(), companySymbolValue); - - ru.clearing.classes.statics.data.company.CompanySymbols companySymbolFromImdg = companySymbolsFromImdg.iterator().next(); - ru.clearing.classes.statics.data.company.Company companyFromImdg = companyImdg.getSingleObjectByID(companySymbolFromImdg.getCompanyId()); - - if (companyFromImdg == null) { - // Случай, когда реквизиты есть, а компании нет (по сути данных ошибка в мапе) - log.error("For own company_symbols (id = {}) company not found (map error)", companySymbolFromImdg.getId()); - } else { - return companyFromImdg.getId(); - } - } - } - - return null; - } - -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckMoneyMarketSecurityExist.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckMoneyMarketSecurityExist.java deleted file mode 100644 index 4a37f6bc3..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/CheckMoneyMarketSecurityExist.java +++ /dev/null @@ -1,67 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.legacy; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; -import ru.spcex.clearing.gatewayapi.logic.ProcessResult; -import ru.spcex.clearing.gatewayapi.logic.Stage; -import ru.spcex.clearing.gatewayapi.logic.listings_mm.MMListingsRequestParam; -import ru.spcex.clearing.gatewayapi.request.listing.mkr.ExchangeInstrument; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.platform.enumeration.InstrumentType; -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; - -public class CheckMoneyMarketSecurityExist extends Stage { - private final Logger log = LoggerFactory.getLogger(getClass()); - - private final Imdg moneyMarketSecurityImdg; - - public CheckMoneyMarketSecurityExist(ImdgProvider imdgProvider) { - moneyMarketSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class); - } - - @Override - public ProcessResult process(MMListingsRequestParam param) { - List exchangeInstrumentList = param.getExchangeInstrumentsList(); - - for (ExchangeInstrument exchangeInstrument : exchangeInstrumentList) { - if (exchangeInstrument.isInvalidData()) continue; - - String securitySymbol = extractSecuritySymbol(exchangeInstrument.getCode()); - exchangeInstrument.setSecuritySymbol(securitySymbol); - - Collection securitiesFromImdg = moneyMarketSecurityImdg.getCollectionObjectsByFieldValues( - Map.of( - "securitySymbol", securitySymbol, - "instrumentType", InstrumentType.RATE.getKey() - ) - ); - if (securitiesFromImdg.isEmpty()) { - exchangeInstrument.setAlreadyExist(false); - } else { - MoneyMarketSecurity security = securitiesFromImdg.iterator().next(); - if (securitiesFromImdg.size() > 1) { - log.warn("For securitySymbol = {} and instrumentType = {} found > 1 moneyMarketSecurity, update first (id = {})", - securitySymbol, - InstrumentType.RATE.getKey(), - security.getId()); - } - exchangeInstrument.setAlreadyExist(true); - exchangeInstrument.setMapId(security.getId()); - } - } - - return null; - } - - private String extractSecuritySymbol(String code) { - int firstX = code.indexOf('X'); - if (firstX == -1) return code; - return code.substring(0, firstX); - } -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateExchangeInstruments.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateExchangeInstruments.java deleted file mode 100644 index e6fede8e5..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateExchangeInstruments.java +++ /dev/null @@ -1,112 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.legacy; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.spcex.clearing.gatewayapi.logic.ProcessResult; -import ru.spcex.clearing.gatewayapi.logic.Stage; -import ru.spcex.clearing.gatewayapi.logic.listings_mm.MMListingsRequestParam; -import ru.spcex.clearing.gatewayapi.request.listing.mkr.ExchangeInstrument; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.platform.enumeration.CompanySymbol; -import ru.spcex.platform.enumeration.TermType; -import ru.spcex.platform.enumeration.WorkflowStatus; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.utils.enumeration.IEnumKey; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -public class ValidateExchangeInstruments extends Stage { - private final Logger log = LoggerFactory.getLogger(getClass()); - - private final Imdg companyImdg; - private final Imdg companySymbolsImdg; - - public ValidateExchangeInstruments(ImdgProvider imdgProvider) { - companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - } - - @Override - public ProcessResult process(MMListingsRequestParam param) { - List exchangeInstrumentList = param.getExchangeInstrumentsList(); - for (ExchangeInstrument exchangeInstrument : exchangeInstrumentList) { - - Collection companySymbols = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", CompanySymbol.UUID.getKey(), - "companySymbolValue", exchangeInstrument.getInitiatorId() - ) - ); - if (companySymbols.isEmpty()) { - log.warn("Invalid exchange_instrument.initiator_id: companySymbol.UUID = {} not found, skipped", - exchangeInstrument.getInitiatorId()); - exchangeInstrument.setInvalidData(true); - } else { - CompanySymbols companySymbol = companySymbols.iterator().next(); - if (companySymbols.size() > 1) { - log.warn("companySymbol.UUID = {} > 1, use first (id = {}, companyId = {})", - companySymbol.getCompanySymbolValue(), - companySymbol.getId(), - companySymbol.getCompanyId()); - } - exchangeInstrument.setIssuerId(companySymbol.getCompanyId()); - } - - if (StringUtils.isEmpty(exchangeInstrument.getCode())) { - log.warn("Invalid exchange_instrument (id = {}), code is empty or null, skipped", exchangeInstrument.getId()); - exchangeInstrument.setInvalidData(true); - } - - if (StringUtils.isEmpty(exchangeInstrument.getName())) { - log.warn("Empty or null name for exchange_instrument (id = {})", exchangeInstrument.getId()); - exchangeInstrument.setInvalidData(true); - } - - if (exchangeInstrument.getInitiatorId() == null) { - log.warn("initiator_id empty for exchange_instrument (id = {})", exchangeInstrument.getId()); - exchangeInstrument.setInvalidData(true); - } - - if (StringUtils.isEmpty(exchangeInstrument.getSettlementCurrencyLetterCode())) { - log.warn("settlement_currency_letter_code empty or null for exchange_instrument (id = {})", exchangeInstrument.getId()); - exchangeInstrument.setInvalidData(true); - } - - if (exchangeInstrument.getLot() == null) { - log.warn("lot null for exchange_instrument (id = {})", exchangeInstrument.getId()); - exchangeInstrument.setInvalidData(true); - } - - String workflowStatusStr = exchangeInstrument.getWorkflowStatus(); - WorkflowStatus workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr); - if (workflowStatus == null) { - log.warn("Invalid workflow_status {} for exchange_instrument (id = {})", workflowStatusStr, exchangeInstrument.getId()); - exchangeInstrument.setInvalidData(true); - } - - String bankDepositAgreementTypeStr = exchangeInstrument.getBankDepositAgreementType(); - TermType termType = IEnumKey.getEnumByKey(TermType.class, bankDepositAgreementTypeStr); - if (termType == null) { - log.warn("Invalid bank_deposit_agreement_type {} for exchange_instrument (id = {})", bankDepositAgreementTypeStr, exchangeInstrument.getId()); - exchangeInstrument.setInvalidData(true); - } - - } - - List filteredExchangeInstrument = exchangeInstrumentList.stream() - .filter(exchangeInstrument -> !exchangeInstrument.isInvalidData()) - .collect(Collectors.toList()); - - // todo check list is empty - - param.setExchangeInstrumentsList(filteredExchangeInstrument); - return null; - } -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateIncomeSecurities.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateIncomeSecurities.java deleted file mode 100644 index 65c004c4c..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateIncomeSecurities.java +++ /dev/null @@ -1,167 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.legacy; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import ru.spcex.clearing.gatewayapi.errors.GatewayError; -import ru.spcex.clearing.gatewayapi.logic.ProcessResult; -import ru.spcex.clearing.gatewayapi.logic.Stage; -import ru.spcex.clearing.gatewayapi.logic.listings_fond.FondListingsRequestParam; -import ru.spcex.clearing.gatewayapi.request.listing.fond.CouponSchedule; -import ru.spcex.clearing.gatewayapi.request.listing.fond.FondSecurity; -import ru.spcex.clearing.gatewayapi.request.listing.fond.IncomeListing; -import ru.spcex.clearing.gatewayapi.request.listing.fond.Nominal; -import ru.spcex.platform.enumeration.BondType; -import ru.spcex.platform.enumeration.InstrumentType; -import ru.spcex.platform.enumeration.ShareType; -import ru.spcex.platform.enumeration.WorkflowStatus; -import ru.spcex.platform.utils.enumeration.IEnumKey; - -import java.util.List; -import java.util.stream.Collectors; - -public class ValidateIncomeSecurities extends Stage { - private final Logger log = LoggerFactory.getLogger(getClass()); - - @Override - public ProcessResult process(FondListingsRequestParam param) { - List securities = param.getSecurities(); - - for (FondSecurity fondSecurity : securities) { - if (fondSecurity.isInvalidData()) continue; - - String instrumentTypeStr = fondSecurity.getInstrumentType(); - InstrumentType instrumentType = IEnumKey.getEnumByKey(InstrumentType.class, instrumentTypeStr); - if (instrumentType != InstrumentType.BOND && instrumentType != InstrumentType.EQTY) { - log.warn("Invalid instrument_type {} for security.id {}, skipped", instrumentTypeStr, fondSecurity.getId()); - fondSecurity.setInvalidData(true); - continue; - } - - String workflowStatusStr = fondSecurity.getWorkflowStatus(); - WorkflowStatus workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr); - if (workflowStatus == null) { - log.warn("Invalid workflow_status {} for security.id {}, skipped", workflowStatusStr, fondSecurity.getId()); - fondSecurity.setInvalidData(true); - continue; - } - - String shareTypeStr = fondSecurity.getShareType(); - ShareType shareType = IEnumKey.getEnumByKey(ShareType.class, shareTypeStr); - if (instrumentType == InstrumentType.EQTY && shareType == null) { - log.warn("Invalid share_type {} for security.id {}, skipped", shareTypeStr, fondSecurity.getId()); - fondSecurity.setInvalidData(true); - continue; - } - - String bondTypeStr = fondSecurity.getBondType(); - BondType bondType = IEnumKey.getEnumByKey(BondType.class, bondTypeStr); - if (bondType == null) { - log.warn("Invalid bondType {} for security.id {}, skipped", bondTypeStr, fondSecurity.getId()); - fondSecurity.setInvalidData(true); - continue; - } - - if (StringUtils.isEmpty(fondSecurity.getSecuritySymbol())) { - log.warn("Empty or null security_symbol for security.id {}, skipped", fondSecurity.getId()); - fondSecurity.setInvalidData(true); - continue; - } - - if (StringUtils.isEmpty(fondSecurity.getShortName())) { - log.warn("Empty or null short_name for security.id {}, skipped", fondSecurity.getShortName()); - fondSecurity.setInvalidData(true); - continue; - } - - List listingList = fondSecurity.getListingList(); - - for (IncomeListing listing : listingList) { - - if (StringUtils.isEmpty(listing.getCode())) { - log.warn("Empty or null code for listing from security.id {}", fondSecurity.getId()); - listing.setInvalidData(true); - } - - if (listing.getLotSize() == null) { - log.warn("lot_size is null for listing from security.id {}", fondSecurity.getId()); - listing.setInvalidData(true); - } - - if (StringUtils.isEmpty(listing.getTradingCurrency())) { - log.warn("Empty or null trading_currency for listing from security.id {}", fondSecurity.getId()); - listing.setInvalidData(true); - } - - workflowStatusStr = listing.getWorkflowStatus(); - workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr); - if (workflowStatus == null) { - log.warn("Invalid workflow_status {} for listing from security.id {}", workflowStatusStr, fondSecurity.getId()); - listing.setInvalidData(true); - } - - } - - fondSecurity.setListingList( - listingList.stream() - .filter(incomeListing -> !incomeListing.isInvalidData()) - .collect(Collectors.toList()) - ); - - - for (CouponSchedule couponSchedule : fondSecurity.getCouponScheduleList()) { - if ( - couponSchedule.getPeriodStartDate() == null || - couponSchedule.getPeriodEndDate() == null || - couponSchedule.getPeriodEndDate().isBefore(couponSchedule.getPeriodStartDate()) - ) { - log.warn("Invalid period_start_date {} or period_end_date {} for coupon_schedule, security.id {}, skipped", - couponSchedule.getPeriodStartDate(), - couponSchedule.getPeriodEndDate(), - fondSecurity.getId()); - couponSchedule.setInvalidData(true); - } - - if (couponSchedule.getCouponNumber() == null) { - log.warn("coupon_number is null for coupon_schedule, security.id {}, skipped", fondSecurity.getId()); - couponSchedule.setInvalidData(true); - } - - if (couponSchedule.getCouponRate() == null) { - log.warn("coupon_rate is null for coupon_schedule, security.id {}, skipped", fondSecurity.getId()); - couponSchedule.setInvalidData(true); - } - - if (couponSchedule.getAccruedCoupon() == null) { - log.warn("accrued_coupon is null for coupon_schedule, security.id {}, skipped", fondSecurity.getId()); - couponSchedule.setInvalidData(true); - } - } - - for (Nominal nominal : fondSecurity.getNominalList()) { - if (nominal.getNominal() == null) { - log.warn("nominal (value) is null for nominal, security.id {}, skipped", fondSecurity.getId()); - nominal.setInvalidData(true); - } - - if (nominal.getDate() == null) { - log.warn("date is null for nominal, security.id {}, skipped", fondSecurity.getId()); - nominal.setInvalidData(true); - } - } - - } - - List filteredIncomeSecurities = securities.stream() - .filter(incomeSecurity -> !incomeSecurity.isInvalidData()) - .collect(Collectors.toList()); - - if (filteredIncomeSecurities.isEmpty()) { - return new ProcessResult(GatewayError.SecurityNotFound, securities.stream().map(fondSecurity -> fondSecurity.getId().toString()).collect(Collectors.joining(", "))); - } - - param.setSecurities(filteredIncomeSecurities); - - return null; - } -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateIssuerCompanies.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateIssuerCompanies.java deleted file mode 100644 index 66a4e4080..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateIssuerCompanies.java +++ /dev/null @@ -1,103 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.legacy; - -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.logic.listings_fond.FondListingsRequestParam; -import ru.spcex.clearing.gatewayapi.request.listing.fond.IssuerCompany; -import ru.spcex.clearing.gatewayapi.request.listing.fond.IssuerCompanySymbols; -import ru.spcex.clearing.gatewayapi.request.listing.fond.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.CIO, - 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(FondListingsRequestParam param) { - List companyList = param.getIssuerCompanyList(); - - for (IssuerCompany issuerCompany : companyList) { - if (issuerCompany.isInvalidData()) continue; - - if (StringUtils.isEmpty(issuerCompany.getShortName())) { - log.warn("Empty or null short_name for company (id = {}), skipped", issuerCompany.getId()); - issuerCompany.setInvalidData(true); - continue; - } - - String workflowStatusStr = issuerCompany.getWorkflowStatus(); - WorkflowStatus workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr); - if (workflowStatus == null) { - log.warn("Invalid workflow_status {} for company (id = {}), 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 company_symbol {} for company.id {}, skipped", companySymbolStr, issuerCompany.getId()); - companySymbols.setInvalidData(true); - } - - if (StringUtils.isEmpty(companySymbols.getCompanySymbolValue())) { - log.warn("Empty or null company_symbol_value for company.id {}, 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 contact_type {} for company.id {}, skipped", contactTypeStr, issuerCompany.getId()); - contact.setInvalidData(true); - } - - if (StringUtils.isEmpty(contact.getContactValue())) { - log.warn("Empty or null contact_value for contact {}, company.id {}", contactTypeStr, issuerCompany.getId()); - contact.setInvalidData(true); - } - - } - - - } - - return null; - } -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateMemberCompanies.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateMemberCompanies.java deleted file mode 100644 index 9ee1eacb3..000000000 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/legacy/ValidateMemberCompanies.java +++ /dev/null @@ -1,172 +0,0 @@ -package ru.spcex.clearing.gatewayapi.logic.legacy; - -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.logic.companies.CompaniesRequestParam; -import ru.spcex.clearing.gatewayapi.request.company.*; -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 = Arrays.asList( - ServiceStatus.Active, - ServiceStatus.Appl, - ServiceStatus.Suspended, - ServiceStatus.Reopened, - ServiceStatus.Blocked, - ServiceStatus.Closed - ); - private final List validClearingCategory = List.of(ClearingCategory.values()); - - @Override - public ProcessResult process(CompaniesRequestParam param) { - List memberCompanyList = param.getMemberCompanyList(); - - for (Company company : memberCompanyList) { - if (company.isInvalidData()) continue; - - if (StringUtils.isEmpty(company.getShortName())) { - log.warn("Empty or null short_name for company (id = {}), skipped", company.getId()); - company.setInvalidData(true); - continue; - } - - for (CompanyClearingCategory 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.id {}, 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.id {}, skipped", workflowStatus, company.getId()); - companyClearingCategory.setInvalidData(true); - } - } - - for (CompanySymbols companySymbols : company.getMemberCompanySymbolsList()) { - String companySymbolStr = companySymbols.getCompanySymbol(); - CompanySymbol companySymbol = IEnumKey.getEnumByKey(CompanySymbol.class, companySymbolStr); - if (!validCompanySymbols.contains(companySymbol)) { - log.warn("Invalid company_symbol {} for company.id {}, skipped", companySymbolStr, company.getId()); - companySymbols.setInvalidData(true); - } - - if (StringUtils.isEmpty(companySymbols.getCompanySymbolValue())) { - log.warn("Empty or null company_symbol_value for company.id {}, skipped", companySymbols.getCompanySymbolValue()); - companySymbols.setInvalidData(true); - } - } - - for (Contact 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.id {}, skipped", contactTypeStr, company.getId()); - contact.setInvalidData(true); - } - - if (StringUtils.isEmpty(contact.getContactValue())) { - log.warn("Empty or null contact_value for contact {}, company.id {}", contactTypeStr, company.getId()); - contact.setInvalidData(true); - } - - } - - for (ProfileDocument 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.id {}, skipped", documentTypeStr, company.getId()); - memberProfileDocument.setInvalidData(true); - } - - if (memberProfileDocument.getIssueDate() == null) { - log.warn("issue_date is null for profile_document, company.id {}", company.getId()); - memberProfileDocument.setInvalidData(true); - } - - if (StringUtils.isEmpty(memberProfileDocument.getIssuer())) { - log.warn("issuer is null or empty for profile_document, company.id {}", company.getId()); - memberProfileDocument.setInvalidData(true); - } - - if (StringUtils.isEmpty(memberProfileDocument.getNumber())) { - log.warn("number is null or empty for profile_document, company.id {}", company.getId()); - memberProfileDocument.setInvalidData(true); - } - - if (memberProfileDocument.getValidToDate() == null) { - log.warn("valid_to_date is null for profile_document, company.id {}", company.getId()); - memberProfileDocument.setInvalidData(true); - } - } - - for (Client memberClient : company.getClientList()) { - if (StringUtils.isEmpty(memberClient.getClientCode())) { - log.warn("client_code is null or empty for client, company.id {}", 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.id {}", company.getId()); - memberClient.setInvalidData(true); - } - } - - } - - return null; - } -} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java index c01bf4bd1..000cbf094 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java @@ -14,6 +14,7 @@ import ru.spcex.clearing.gatewayapi.config.InboundServerSettings; import ru.spcex.clearing.gatewayapi.request.InboundRequest; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest; import ru.spcex.clearing.platform.messaging.domain.cud.gateway.GatewayTaskRequest; import ru.spcex.clearing.platform.messaging.domain.cud.utilities.LimExportedRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; @@ -58,6 +59,9 @@ public class GatewayService extends QueueConsumer implements InitializingBean { callback(LimExportedRequest.class) .setConsumer(this::requestOnLimit) .forDestination(Consts.LIM_EXPORTED, callbacks::put); + callback(AssetOperationRequest.class) + .setConsumer(this::requestOnAsset) + .forDestination(Consts.ASSET_OPERATION, callbacks::put); init(); } @@ -142,6 +146,29 @@ public class GatewayService extends QueueConsumer implements InitializingBean { log.debug("LOSC task 2/2 complete (MKR section), response: {}", bodyResponse); } + public void requestOnAsset(BaseRequest request) { + log.debug("LOCM task received"); + +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); +// if (requestInfoUpdate != null) return; +// +// logUnknownProperties(userRequest); +// +// String url = formingInboundUrl(inboundServerSettings.getPathLOCM()); +// HttpHeaders httpHeaders = new HttpHeaders(); +// httpHeaders.setContentType(MediaType.APPLICATION_JSON); +// httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); +// InboundRequest inboundRequest = new InboundRequest(); +// inboundRequest.setId(UUID.randomUUID()); +// inboundRequest.setType("MEMBER_ON_DEMAND"); +// inboundRequest.setDatetime(Instant.now()); +// HttpEntity request = new HttpEntity<>(inboundRequest, httpHeaders); +// +// ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, request, Map.class); +// Map bodyResponse = response.getBody(); +// log.debug("LOCM task complete, response: {}", bodyResponse); + } + private String formingInboundUrl(String path) { return "%s://%s:%s/%s".formatted( inboundServerSettings.getEnableSsl() ? "https" : "http", diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index 312c3a9cb..b0ed0dfe2 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -140,6 +140,7 @@ public interface Consts { String EXPORT_COMPLETED = "export_completed"; String S_TRADES_IMPORTED = "s_trades-imported"; String LIM_EXPORTED = "lim_exported"; + String ASSET_OPERATION = "asset_operation"; String JOURNAL_SERVICE = "journal-service-exported"; String ACCOUNT_TERMINATION = "account-termination"; String ACCOUNT_TERMINATION_STEP2 = "account-termination-step2"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/clearing/AssetOperationRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/clearing/AssetOperationRequest.java new file mode 100644 index 000000000..f661327fc --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/clearing/AssetOperationRequest.java @@ -0,0 +1,51 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.clearing; + +import java.math.BigDecimal; + +public class AssetOperationRequest { + private BigDecimal amount; + private BigDecimal quantity; + private String asset; + private String code; + private String firmId; + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public BigDecimal getQuantity() { + return quantity; + } + + public void setQuantity(BigDecimal quantity) { + this.quantity = quantity; + } + + public String getAsset() { + return asset; + } + + public void setAsset(String asset) { + this.asset = asset; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getFirmId() { + return firmId; + } + + public void setFirmId(String firmId) { + this.firmId = firmId; + } +}