diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountSymbolsValidationConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountSymbolsValidationConfig.java index fd5e281f4..f4afb9a7f 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountSymbolsValidationConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountSymbolsValidationConfig.java @@ -7,11 +7,13 @@ import ru.clearing.classes.statics.data.account.AccountSymbols; import ru.spcex.clearing.account.errors.AccountError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.account.AccountSymbolsNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.account.InformationAccountNewRequest; import ru.spcex.clearing.validation.common.rules.FieldNotBlankRequiredRule; import ru.spcex.clearing.validation.common.rules.IdPresentRule; import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidationRule; @@ -25,8 +27,8 @@ import java.util.function.Function; @Configuration public class AccountSymbolsValidationConfig { - @Bean("accountSymbolsNewRequest") - public Function correspondentAccountNewRequestValidator( + @Bean("accountSymbolsDepoNewRequest") + public Function accountSymbolsDepoNewRequestValidator( Map> imdgForValidation ) { return accountSymbolsNewRequest -> { @@ -41,7 +43,15 @@ public class AccountSymbolsValidationConfig { IMDGDistributedNames.Map_Account, Account.class, AccountError.RequiredFieldEmpty, - AccountError.CompanyNotFound + AccountError.AccountNotFound, + true, + (Account account) -> { + if (AccountType.Depo.equalsByKey(account.getAccountType())) { + return null; + } else { + return AccountError.AccountDepoTypeRequired;//todo data.xml!!! + } + } ), FieldNotBlankRequiredRule.instance("accountSymbolValue", AccountSymbolsNewRequest::getAccountSymbolValue, @@ -57,17 +67,18 @@ public class AccountSymbolsValidationConfig { AccountSymbolsNewRequest validatedObject = context.getValidatedObject(); Imdg accountSymbolsImdg = context.obtainMap(IMDGDistributedNames.Map_AccountSymbols, AccountSymbols.class); - Map> query = new HashMap<>(); - query.put("accountId", validatedObject.getAccountId()); - query.put("accountSymbolValue", validatedObject.getAccountSymbolValue()); - - Collection existAccSymbols = accountSymbolsImdg.getCollectionObjectsByFieldValues(query); + ImdgPredicateBuilder pb = accountSymbolsImdg.predicateBuilder(); + ImdgPredicate query = pb.or( + pb.equals("accountId", validatedObject.getAccountId()), + pb.equals("accountSymbolValue", validatedObject.getAccountSymbolValue()) + ); + Collection existAccSymbols = accountSymbolsImdg.getCollectionObjectsByPredicate(query); if (existAccSymbols.isEmpty()) { return empty(); } else { AccountSymbols existAS = existAccSymbols.iterator().next(); - return of(AccountError.AccountAlreadyExist, existAS.getAccountId()); + return of(AccountError.AccountAlreadyExist, existAS.getAccountId() + "," + existAS.getAccountSymbolValue()); } } } diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/errors/AccountError.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/errors/AccountError.java index 2f340aee3..584a60549 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/errors/AccountError.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/errors/AccountError.java @@ -22,6 +22,7 @@ public enum AccountError implements IErrorEnumId { ClearingCompanySymbolNotFound(5022L), // Для компании %s отсутствует клиринговый код». AccountForTradingClearingRegistryAlreadyUsed(5023L), AccountFieldNotSet(5024L), + AccountDepoTypeRequired(5025L), TradingClearingRegistryNotFound(3022L), ; diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountSymbolsService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountSymbolsService.java index 0f139dc29..25f420b35 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountSymbolsService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountSymbolsService.java @@ -52,7 +52,7 @@ public class AccountSymbolsService extends QueueConsumer implements Initializing UserRoleVerification userRoleVerification, IMessageResolver messageResolver, RequestHelper requestHelper, - @Qualifier("accountSymbolsNewRequest") + @Qualifier("accountSymbolsDepoNewRequest") Function accountSymbolsNewRequestValidator ) { super(kafkaQueue, kafkaProducer); diff --git a/clearing-parent/backend-api/src/main/resources/meta/data.xml b/clearing-parent/backend-api/src/main/resources/meta/data.xml index 97d5d3773..2bb9e9db4 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/data.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/data.xml @@ -1,5 +1,5 @@ - + @@ -428,7 +428,8 @@ - + + diff --git a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql index c2120cbd5..561205619 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql @@ -1,5 +1,5 @@ --- DB version: 3.8.0.62 --- DATA version: 3.5.0.14 +-- DB version: 3.9.0.64 +-- DATA version: 3.9.0.13 /* Dictionaries */ @@ -832,6 +832,8 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5023, 'ACNT', 'Сче INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5024, 'ACNT', 'Не указан номер счета.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5025, 'ACNT', 'Необходимо указать ДЕПО счет.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5200, 'BLNC', 'Общая ошибка модуля balance-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5210, 'BLNC', 'Клиринговая сессия неактивна.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;