diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ClientCodeValidationConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ClientCodeValidationConfig.java index 8f2c1770e..9a7dd0630 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ClientCodeValidationConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ClientCodeValidationConfig.java @@ -176,7 +176,8 @@ public class ClientCodeValidationConfig { GatewayClientCodeValidationRule.CompanyPresent, GatewayClientCodeValidationRule.AllAccountsPresent, GatewayClientCodeValidationRule.DepoAccountsPresent, - GatewayClientCodeValidationRule.TcrIsNotPresent + GatewayClientCodeValidationRule.TcrIsNotPresent, + GatewayClientCodeValidationRule.TcrListIsNotPresent ); }; } diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/GatewayClientCodeValidationRule.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/GatewayClientCodeValidationRule.java index 040bb5893..5cb8e943f 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/GatewayClientCodeValidationRule.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/GatewayClientCodeValidationRule.java @@ -1,5 +1,6 @@ package ru.spcex.clearing.account.validation; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -8,6 +9,7 @@ import org.springframework.util.StringUtils; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList; import ru.spcex.clearing.account.errors.AccountError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount; @@ -126,5 +128,30 @@ public enum GatewayClientCodeValidationRule implements IValidationRule validate(ImdgValidationContext context) { + Map accountByCurrency = context.getStoredObject(ClientCodeStoreObjects.MAPPED_TO_CURRENCY_ACCOUNTS); + List currencyAccounts = accountByCurrency.entrySet().stream() + .filter(stringAccountEntry -> !stringAccountEntry.getKey().equals(CurrencyCode.RUB.getKey())) + .map(Map.Entry::getValue).toList(); + if (currencyAccounts.isEmpty()) { + return empty(); + } + List currencies = currencyAccounts.stream().map(Account::getCurrency).toList(); + Imdg imdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, + TradingClearingRegistryList.class); + ImdgPredicateBuilder predicateBuilder = imdg.predicateBuilder(); + Collection tcrList = imdg.getCollectionObjectsByPredicate( + predicateBuilder.and( + predicateBuilder.in("currency", currencies.toArray(new String[0])), + predicateBuilder.equals("status", Status.Active.getKey()) + )); + if (!tcrList.isEmpty()) { + return of(AccountError.TCR_ALREADY_EXIST_GTW, tcrList.iterator().next().getCurrency(), "currency"); + } + return Optional.empty(); + } } }