From 9518c7130ad1711db8c2f4a028ad80e337c45fb9 Mon Sep 17 00:00:00 2001 From: aalehin Date: Wed, 26 Jul 2023 18:22:30 +0300 Subject: [PATCH] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-280=20---?= =?UTF-8?q?=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../registry/config/ValidationConfig.java | 26 ++++++++++++++++++ .../AdmittedLiabilitiesRegisterService.java | 27 +++++++++++++------ .../CoveredLiabilitiesRegisterService.java | 19 ++++++++----- .../service/DepoBalanceRegisterService.java | 16 ++++++----- ...DepoPaymentInstructionRegisterService.java | 23 +++++++++------- .../ExcludeLiabilitiesRegisterService.java | 14 ++++++---- .../registry/service/ICheckDuplicate.java | 6 ++++- .../service/LiabilitiesRegisterService.java | 14 ++++++---- .../service/MoneyBalanceRegisterService.java | 24 +++++++++-------- ...oneyPaymentInstructionRegisterService.java | 18 ++++++++----- .../registry/util/FieldValuesValidator.java | 6 ++--- .../registry/validation/RegistryError.java | 18 +++++++++++++ .../validation/ValuesOfMapNonNullRule.java | 26 ++++++++++++++++++ 13 files changed, 176 insertions(+), 61 deletions(-) create mode 100644 clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/config/ValidationConfig.java create mode 100644 clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/validation/RegistryError.java create mode 100644 clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/validation/ValuesOfMapNonNullRule.java diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/config/ValidationConfig.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/config/ValidationConfig.java new file mode 100644 index 000000000..7bbaca4fc --- /dev/null +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/config/ValidationConfig.java @@ -0,0 +1,26 @@ +package ru.spcex.clearing.registry.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.registry.validation.ValuesOfMapNonNullRule; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.validation.IValidator; +import ru.spcex.platform.utils.validation.ValidatorImpl; + +import java.util.Map; +import java.util.function.Function; + +@Configuration +public class ValidationConfig { + + @Bean("fieldValuesValidator") + public Function, IValidator> fieldValuesValidator() { + return map -> { + ImdgValidationContext> context = new ImdgValidationContext<>(); + context.setValidatedObject(map); + return new ValidatorImpl<>(context, + new ValuesOfMapNonNullRule() + ); + }; + } +} diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/AdmittedLiabilitiesRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/AdmittedLiabilitiesRegisterService.java index 6f749af1d..6123066c1 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/AdmittedLiabilitiesRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/AdmittedLiabilitiesRegisterService.java @@ -17,35 +17,41 @@ import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.registry.AdmittedLiabilitiesRegisterNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.platform.enumeration.*; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryInstrumentType; +import ru.spcex.platform.enumeration.RegistryStatus; +import ru.spcex.platform.enumeration.RegistryUnit; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.validation.IValidator; import java.time.Instant; import java.util.Collection; import java.util.Map; +import java.util.Optional; +import java.util.function.Function; -import static ru.spcex.clearing.registry.util.FieldValuesValidator.getFieldValuesOrThrowException; import static ru.spcex.platform.enumeration.Task.createRegistry_ADLR; @Service -public class AdmittedLiabilitiesRegisterService extends QueueConsumer implements InitializingBean { +public class AdmittedLiabilitiesRegisterService extends QueueConsumer implements InitializingBean, ICheckDuplicate { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg admittedLiabilitiesRegisterMap; private final Imdg registryMap; private final Imdg companyMap; private final Imdg securityMap; - + private final Function, IValidator> fieldValuesValidator; @Autowired public AdmittedLiabilitiesRegisterService(Consumer kafkaQueue, Producer kafkaProducer, - ImdgProvider imdgProvider) { + ImdgProvider imdgProvider, Function, IValidator> fieldValuesValidator) { super(kafkaQueue, kafkaProducer); this.admittedLiabilitiesRegisterMap = imdgProvider.getImdg(IMDGDistributedNames.Map_AdmittedLiabilitiesRegister, AdmittedLiabilitiesRegister.class); this.registryMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.securityMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Security, Security.class); + this.fieldValuesValidator = fieldValuesValidator; } @Override @@ -68,9 +74,7 @@ public class AdmittedLiabilitiesRegisterService extends QueueConsumer implements return; } registries.forEach((registry -> { - Map> fieldValues = getFieldValuesOrThrowException(Map.of("companyId", registry.getCompanyId(), "sessionId", registry.getSessionId())); - Collection admittedLiabilitiesRegistersBySessionIdAndCompanyId = admittedLiabilitiesRegisterMap.getCollectionObjectsByFieldValues(fieldValues); - if (admittedLiabilitiesRegistersBySessionIdAndCompanyId == null || admittedLiabilitiesRegistersBySessionIdAndCompanyId.isEmpty()) { + if (isDuplicateInMap(registry).isEmpty()) { insertAdmittedLiabilitiesRegister(registry); } } @@ -118,4 +122,11 @@ public class AdmittedLiabilitiesRegisterService extends QueueConsumer implements RegistryStatus.FAIL.getKey() ); } + + @Override + public Optional isDuplicateInMap(Registry entity) { + Map> fieldValues = Map.of("companyId", entity.getCompanyId(), "sessionId", entity.getSessionId()); + return Optional.ofNullable(admittedLiabilitiesRegisterMap.getFirstObjectByFieldValues(fieldValues)); + + } } diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/CoveredLiabilitiesRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/CoveredLiabilitiesRegisterService.java index d22c9ae8f..579f0fe33 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/CoveredLiabilitiesRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/CoveredLiabilitiesRegisterService.java @@ -17,19 +17,22 @@ import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.registry.CoveredLiabilitiesRegisterNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.platform.enumeration.*; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryInstrumentType; +import ru.spcex.platform.enumeration.RegistryStatus; +import ru.spcex.platform.enumeration.RegistryUnit; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import java.time.Instant; import java.util.Collection; import java.util.Map; +import java.util.Optional; -import static ru.spcex.clearing.registry.util.FieldValuesValidator.getFieldValuesOrThrowException; import static ru.spcex.platform.enumeration.Task.createRegistry_CDLR; @Service -public class CoveredLiabilitiesRegisterService extends QueueConsumer implements InitializingBean { +public class CoveredLiabilitiesRegisterService extends QueueConsumer implements InitializingBean, ICheckDuplicate { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg coveredLiabilitiesRegisterMap; @@ -69,9 +72,7 @@ public class CoveredLiabilitiesRegisterService extends QueueConsumer implements return; } registries.forEach((registry -> { - Map> fieldValues = getFieldValuesOrThrowException(Map.of("companyId", registry.getCompanyId(), "sessionId", registry.getSessionId())); - Collection coveredLiabilitiesRegisterBySessionIdAndCompanyId = coveredLiabilitiesRegisterMap.getCollectionObjectsByFieldValues(fieldValues); - if (coveredLiabilitiesRegisterBySessionIdAndCompanyId == null || coveredLiabilitiesRegisterBySessionIdAndCompanyId.isEmpty()) { + if (isDuplicateInMap(registry).isEmpty()) { insertCoveredLiabilitiesRegister(registry); } } @@ -113,4 +114,10 @@ public class CoveredLiabilitiesRegisterService extends QueueConsumer implements RegistryUnit.T.getKey(), RegistryStatus.OK.getKey()); } + + @Override + public Optional isDuplicateInMap(Registry entity) { + Map> fieldValues = Map.of("companyId", entity.getCompanyId(), "sessionId", entity.getSessionId()); + return Optional.ofNullable(coveredLiabilitiesRegisterMap.getFirstObjectByFieldValues(fieldValues)); + } } diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoBalanceRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoBalanceRegisterService.java index 89bdcfd83..962525c12 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoBalanceRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoBalanceRegisterService.java @@ -23,12 +23,12 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import java.time.Instant; import java.util.Collection; import java.util.Map; +import java.util.Optional; -import static ru.spcex.clearing.registry.util.FieldValuesValidator.getFieldValuesOrThrowException; import static ru.spcex.platform.enumeration.Task.createRegistry_GRRT; @Service -public class DepoBalanceRegisterService extends QueueConsumer implements InitializingBean { +public class DepoBalanceRegisterService extends QueueConsumer implements InitializingBean, ICheckDuplicate { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg depoBalanceRegisterMap; @@ -53,7 +53,7 @@ public class DepoBalanceRegisterService extends QueueConsumer implements Initial public void depoBalanceRegisterNew(BaseRequest userRequest) { log.debug("LauncherCommandRequest received from {}", createRegistry_GRRT.topic()); - if (userRequest.getRequestPayload().getCompanyId() == null ){ + if (userRequest.getRequestPayload().getCompanyId() == null) { log.debug("No companyId in LauncherCommandRequest.id={}", userRequest.getId()); return; } @@ -65,9 +65,7 @@ public class DepoBalanceRegisterService extends QueueConsumer implements Initial return; } registries.forEach((registry -> { - Map> fieldValues = getFieldValuesOrThrowException(Map.of("companyId", registry.getCompanyId(), "sessionId", registry.getSessionId())); - Collection depoBalanceRegisterBySessionIdAndCompanyId = depoBalanceRegisterMap.getCollectionObjectsByFieldValues(fieldValues); - if (depoBalanceRegisterBySessionIdAndCompanyId == null || depoBalanceRegisterBySessionIdAndCompanyId.isEmpty()) { + if (isDuplicateInMap(registry).isEmpty()) { insertDepoBalanceRegister(registry); } } @@ -99,4 +97,10 @@ public class DepoBalanceRegisterService extends QueueConsumer implements Initial pb.sql(codeSql.build()) ); } + + @Override + public Optional isDuplicateInMap(Registry entity) { + Map> fieldValues = Map.of("companyId", entity.getCompanyId(), "sessionId", entity.getSessionId()); + return Optional.ofNullable(depoBalanceRegisterMap.getFirstObjectByFieldValues(fieldValues)); + } } \ No newline at end of file diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java index aaba02aff..ecc16fe9a 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java @@ -22,13 +22,13 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import java.time.Instant; import java.util.Collection; import java.util.Map; +import java.util.Optional; -import static ru.spcex.clearing.registry.util.FieldValuesValidator.getFieldValuesOrThrowException; import static ru.spcex.platform.enumeration.Task.createRegistry_GORD; import static ru.spcex.platform.enumeration.Task.createRegistry_GORR; @Service -public class DepoPaymentInstructionRegisterService extends QueueConsumer implements InitializingBean { +public class DepoPaymentInstructionRegisterService extends QueueConsumer implements InitializingBean, ICheckDuplicate { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg depoPaymentInstructionRegisterMap; @@ -36,6 +36,7 @@ public class DepoPaymentInstructionRegisterService extends QueueConsumer impleme private final Imdg sessionMap; private final Imdg tradingClearingRegistryMap; private final Imdg InOutDirectionDictionaryMap; + @Autowired public DepoPaymentInstructionRegisterService(Consumer kafkaQueue, Producer kafkaProducer, @@ -65,15 +66,11 @@ public class DepoPaymentInstructionRegisterService extends QueueConsumer impleme return; } for (Session session : actualSessions) { - Map> fieldValues = getFieldValuesOrThrowException(Map.of("sessionId", session.getId())); + Map> fieldValues = Map.of("sessionId", session.getId()); Collection paymentInstructionBySessionId = paymentInstructionMap.getCollectionObjectsByFieldValues(fieldValues); for (PaymentInstruction paymentInstruction : paymentInstructionBySessionId) { - DepoPaymentInstructionRegister depoPaymentInstructionRegister = depoPaymentInstructionRegisterMap.getFirstObjectByFieldValues(Map.of( - "companyId", paymentInstruction.getSenderId(), - "sessionId", paymentInstruction.getSessionId()) - ); - if (depoPaymentInstructionRegister == null){ + if (isDuplicateInMap(paymentInstruction).isEmpty()) { insertDepoPaymentInstructionRegister(paymentInstruction); } } @@ -90,7 +87,7 @@ public class DepoPaymentInstructionRegisterService extends QueueConsumer impleme depoPaymentInstructionRegister.setCreated(Instant.now()); depoPaymentInstructionRegister.setUpdated(Instant.now()); depoPaymentInstructionRegister.setCompanyId(paymentInstruction.getSenderId()); - depoPaymentInstructionRegister.setTradingClearingRegistryType(tradingClearingRegistry.getTradingClearingRegistryType() ); + depoPaymentInstructionRegister.setTradingClearingRegistryType(tradingClearingRegistry.getTradingClearingRegistryType()); depoPaymentInstructionRegister.setTradingClearingRegistry(tradingClearingRegistry.getCode()); depoPaymentInstructionRegister.setCbCode("RNCB-BE-01"); depoPaymentInstructionRegister.setQuantity(paymentInstruction.getCreditLeg_amount()); @@ -101,4 +98,12 @@ public class DepoPaymentInstructionRegisterService extends QueueConsumer impleme depoPaymentInstructionRegisterMap.insert(depoPaymentInstructionRegister); log.debug("inserted successfully DepoBalanceRegister entity with id: {}", depoPaymentInstructionRegister.getId()); } + + @Override + public Optional isDuplicateInMap(PaymentInstruction entity) { + return Optional.ofNullable(depoPaymentInstructionRegisterMap.getFirstObjectByFieldValues(Map.of( + "companyId", entity.getSenderId(), + "sessionId", entity.getSessionId()) + )); + } } diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExcludeLiabilitiesRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExcludeLiabilitiesRegisterService.java index 2390578c5..59079372d 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExcludeLiabilitiesRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExcludeLiabilitiesRegisterService.java @@ -26,12 +26,12 @@ import java.time.Instant; import java.time.LocalDate; import java.util.Collection; import java.util.Map; +import java.util.Optional; -import static ru.spcex.clearing.registry.util.FieldValuesValidator.getFieldValuesOrThrowException; import static ru.spcex.platform.enumeration.Task.createRegistry_EXLR; @Service -public class ExcludeLiabilitiesRegisterService extends QueueConsumer implements InitializingBean { +public class ExcludeLiabilitiesRegisterService extends QueueConsumer implements InitializingBean, ICheckDuplicate { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg excludeLiabilitiesRegisterMap; @@ -73,9 +73,7 @@ public class ExcludeLiabilitiesRegisterService extends QueueConsumer implements return; } registries.forEach((registry -> { - Map> fieldValues = getFieldValuesOrThrowException(Map.of("companyId", registry.getCompanyId(), "sessionId", registry.getSessionId())); - Collection excludeLiabilitiesRegisterBySessionIdAndCompanyId = excludeLiabilitiesRegisterMap.getCollectionObjectsByFieldValues(fieldValues); - if (excludeLiabilitiesRegisterBySessionIdAndCompanyId == null || excludeLiabilitiesRegisterBySessionIdAndCompanyId.isEmpty()) { + if (isDuplicateInMap(registry).isEmpty()) { insertExcludeLiabilitiesRegister(registry); } } @@ -122,4 +120,10 @@ public class ExcludeLiabilitiesRegisterService extends QueueConsumer implements RegistryUnit.T.getKey(), RegistryStatus.FAIL.getKey()); } + + @Override + public Optional isDuplicateInMap(Registry entity) { + Map> fieldValues = Map.of("companyId", entity.getCompanyId(), "sessionId", entity.getSessionId()); + return Optional.ofNullable(excludeLiabilitiesRegisterMap.getFirstObjectByFieldValues(fieldValues)); + } } diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ICheckDuplicate.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ICheckDuplicate.java index d8f45e389..9f56227d0 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ICheckDuplicate.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ICheckDuplicate.java @@ -2,9 +2,13 @@ package ru.spcex.clearing.registry.service; import java.util.Optional; +/** + * @param - тип объекта по которому мы будем проверять наличие дубликата + * @param - тип объекта (реестра) который мы нашли как дубликат + * */ public interface ICheckDuplicate { /** - * @return возвращает optinal с дубликатом + * @return возвращает optional с дубликатом * */ Optional isDuplicateInMap(T entity); } diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/LiabilitiesRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/LiabilitiesRegisterService.java index 24f45b754..c0c1110c6 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/LiabilitiesRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/LiabilitiesRegisterService.java @@ -28,12 +28,12 @@ import ru.spcex.platform.utils.time.TimeUtil; import java.time.Instant; import java.util.Collection; import java.util.Map; +import java.util.Optional; -import static ru.spcex.clearing.registry.util.FieldValuesValidator.getFieldValuesOrThrowException; import static ru.spcex.platform.enumeration.Task.createRegistry_LBSR; @Service -public class LiabilitiesRegisterService extends QueueConsumer implements InitializingBean { +public class LiabilitiesRegisterService extends QueueConsumer implements InitializingBean, ICheckDuplicate { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg liabilitiesRegisterMap; @@ -72,9 +72,7 @@ public class LiabilitiesRegisterService extends QueueConsumer implements Initial Collection registries = registryMap.getCollectionObjectsBySQL(sqlConditionForRegistry); //checking for duplicates registries.forEach((registry -> { - Map> fieldValues = getFieldValuesOrThrowException(Map.of("companyId", registry.getCompanyId(), "sessionId", registry.getSessionId())); - Collection liabilitiesRegisterBySessionIdAndCompanyId = liabilitiesRegisterMap.getCollectionObjectsByFieldValues(fieldValues); - if (liabilitiesRegisterBySessionIdAndCompanyId == null || liabilitiesRegisterBySessionIdAndCompanyId.isEmpty()) { + if (isDuplicateInMap(registry).isEmpty()) { insertLiabilitiesRegister(registry); } } @@ -142,4 +140,10 @@ public class LiabilitiesRegisterService extends QueueConsumer implements Initial RegistryInstrumentType.M.getKey(), RegistryUnit.T.getKey()); } + + @Override + public Optional isDuplicateInMap(Registry entity) { + Map> fieldValues = Map.of("companyId", entity.getCompanyId(), "sessionId", entity.getSessionId()); + return Optional.ofNullable(liabilitiesRegisterMap.getFirstObjectByFieldValues(fieldValues)); + } } diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyBalanceRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyBalanceRegisterService.java index ecea573fb..e5830768b 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyBalanceRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyBalanceRegisterService.java @@ -26,12 +26,12 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import java.time.Instant; import java.util.Collection; import java.util.Map; +import java.util.Optional; -import static ru.spcex.clearing.registry.util.FieldValuesValidator.getFieldValuesOrThrowException; import static ru.spcex.platform.enumeration.Task.createRegistry_GBRR; @Service -public class MoneyBalanceRegisterService extends QueueConsumer implements InitializingBean { +public class MoneyBalanceRegisterService extends QueueConsumer implements InitializingBean, ICheckDuplicate { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg moneyBalanceRegisterMap; @@ -73,15 +73,7 @@ public class MoneyBalanceRegisterService extends QueueConsumer implements Initia return; } registries.forEach((registry -> { - Map> fieldValues = getFieldValuesOrThrowException(Map.of( - "companyId", - registry.getCompanyId(), - "sessionId", - registry.getSessionId() - ) - ); - Collection moneyBalanceRegisterBySessionIdAndCompanyId = moneyBalanceRegisterMap.getCollectionObjectsByFieldValues(fieldValues); - if (moneyBalanceRegisterBySessionIdAndCompanyId == null || moneyBalanceRegisterBySessionIdAndCompanyId.isEmpty()) { + if (isDuplicateInMap(registry).isEmpty()) { insertMoneyBalanceRegister(registry); } } @@ -170,4 +162,14 @@ public class MoneyBalanceRegisterService extends QueueConsumer implements Initia return prdct; } + @Override + public Optional isDuplicateInMap(Registry entity) { + Map> fieldValues = Map.of( + "companyId", + entity.getCompanyId(), + "sessionId", + entity.getSessionId() + ); + return Optional.ofNullable(moneyBalanceRegisterMap.getFirstObjectByFieldValues(fieldValues)); + } } diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyPaymentInstructionRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyPaymentInstructionRegisterService.java index 653def69d..50cb714d9 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyPaymentInstructionRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyPaymentInstructionRegisterService.java @@ -20,12 +20,12 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import java.time.Instant; import java.util.Collection; import java.util.Map; +import java.util.Optional; -import static ru.spcex.clearing.registry.util.FieldValuesValidator.getFieldValuesOrThrowException; import static ru.spcex.platform.enumeration.Task.createRegistry_GORR; @Service -public class MoneyPaymentInstructionRegisterService extends QueueConsumer implements InitializingBean { +public class MoneyPaymentInstructionRegisterService extends QueueConsumer implements InitializingBean, ICheckDuplicate { private final static String TOPIC_NAME = createRegistry_GORR.topic(); private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg moneyPaymentInstructionRegisterMap; @@ -52,16 +52,14 @@ public class MoneyPaymentInstructionRegisterService extends QueueConsumer implem public void moneyPaymentInstructionRegisterNew(BaseRequest userRequest) { log.debug("LauncherCommandRequest received from {}", TOPIC_NAME); - Map> fieldValuesSectionMkr = getFieldValuesOrThrowException(Map.of("section", "MKR")); + Map> fieldValuesSectionMkr = Map.of("section", "MKR"); Collection actualSessions = sessionMap.getCollectionObjectsByFieldValues(fieldValuesSectionMkr); actualSessions.forEach(session -> { - Map> fieldValuesSessionId = getFieldValuesOrThrowException(Map.of("sessionId", session.getId())); + Map> fieldValuesSessionId = Map.of("sessionId", session.getId()); Collection paymentInstructionBySessionId = paymentInstructionMap.getCollectionObjectsByFieldValues(fieldValuesSessionId); for (PaymentInstruction paymentInstruction : paymentInstructionBySessionId) { - Map> fieldValuesCompanyIdSessionId = getFieldValuesOrThrowException(Map.of("senderId", paymentInstruction.getSenderId(), "date", paymentInstruction.getClearingDate())); - MoneyPaymentInstructionRegister moneyPaymentInstructionRegister = moneyPaymentInstructionRegisterMap.getFirstObjectByFieldValues(fieldValuesCompanyIdSessionId); - if (moneyPaymentInstructionRegister == null) { + if (isDuplicateInMap(paymentInstruction).isEmpty()) { insertMoneyPaymentInstructionRegister(paymentInstruction); } } @@ -84,4 +82,10 @@ public class MoneyPaymentInstructionRegisterService extends QueueConsumer implem moneyPaymentInstructionRegisterMap.insert(moneyPaymentInstructionRegister); log.debug("inserted successfully PaymentInstruction entity with id: {}", paymentInstruction.getId()); } + + @Override + public Optional isDuplicateInMap(PaymentInstruction entity) { + Map> fieldValuesCompanyIdSessionId = Map.of("senderId", entity.getSenderId(), "date", entity.getClearingDate()); + return Optional.ofNullable(moneyPaymentInstructionRegisterMap.getFirstObjectByFieldValues(fieldValuesCompanyIdSessionId)); + } } diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/util/FieldValuesValidator.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/util/FieldValuesValidator.java index 26e166102..4ae5f8a3f 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/util/FieldValuesValidator.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/util/FieldValuesValidator.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.Optional; public class FieldValuesValidator { - public static List validateFieldValues(Map map) { + public static List delete2(Map map) { List errors = new ArrayList<>(); map.forEach((key, value) -> { if (key == null) { @@ -21,8 +21,8 @@ public class FieldValuesValidator { return errors; } - public static Map> getFieldValuesOrThrowException(Map> fieldValues) { - List errors = validateFieldValues(fieldValues); + public static Map> delete(Map> fieldValues) { + List errors = delete2(fieldValues); if (!errors.isEmpty()) { Optional error = errors.stream().findFirst(); throw new IllegalStateException("Illegal state of field and values :" + error.orElse(null)); diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/validation/RegistryError.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/validation/RegistryError.java new file mode 100644 index 000000000..12ed310d2 --- /dev/null +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/validation/RegistryError.java @@ -0,0 +1,18 @@ +package ru.spcex.clearing.registry.validation; + +import ru.spcex.platform.utils.enumeration.IErrorEnumId; + +public enum RegistryError implements IErrorEnumId { + ValidationOfFieldValuesMapError(19000L); + + private final Long id; + + RegistryError(Long id) { + this.id = id; + } + + @Override + public Long getId() { + return id; + } +} diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/validation/ValuesOfMapNonNullRule.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/validation/ValuesOfMapNonNullRule.java new file mode 100644 index 000000000..03746ec36 --- /dev/null +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/validation/ValuesOfMapNonNullRule.java @@ -0,0 +1,26 @@ +package ru.spcex.clearing.registry.validation; + +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; + +import java.util.Map; +import java.util.Optional; + +/** + * Проверка наличия компании с переданными в запросе companySymbol и companySymbolCode (реквизиты) + */ +public class ValuesOfMapNonNullRule implements IValidationRule>> { + @Override + public Optional validate(ImdgValidationContext> context) { + Map map = context.getValidatedObject(); + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + if (value == null) { + return of(RegistryError.ValidationOfFieldValuesMapError, key); + } + } + return empty(); + } +}