From 1982731a0e43b28a01b414ac8ea22dbaf3edc4a8 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 26 May 2026 16:25:45 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-1023 --- .../ClientCodeValidationConfig.java | 4 +- .../listeners/ClientCodeMessageListener.java | 37 ------------ .../validation/ClientCodeStoreObjects.java | 1 + .../GatewayEksClientCodeValidationRule.java | 58 +++++++++++++++++-- .../service/adapter/TkrAdapter.java | 1 + .../cud/gateway/MoneyAccountMsgRequest.java | 8 +++ 6 files changed, 66 insertions(+), 43 deletions(-) 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 335377771..8b807f073 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 @@ -152,13 +152,13 @@ public class ClientCodeValidationConfig { addImdg.accept(IMDGDistributedNames.Map_DepoAccount); return new ValidatorImpl<>(context, FieldRequiredRule.instance("client_code", TkrAccount::getClientCode, AccountError.RequiredFieldEmpty), + GatewayEksClientCodeValidationRule.RequiredAndCorrectsFields, GatewayEksClientCodeValidationRule.RubAccountPresent, GatewayEksClientCodeValidationRule.CompanyPresent, GatewayEksClientCodeValidationRule.DepoAccountsPresent, GatewayEksClientCodeValidationRule.ClsAccountsPresent, + GatewayEksClientCodeValidationRule.AnltAccountPresent, GatewayEksClientCodeValidationRule.TcrIsNotPresent -// GatewayClientCodeValidationRule.TcrIsNotPresent, -// GatewayClientCodeValidationRule.TcrListIsNotPresent ); }; } diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/v2/listeners/ClientCodeMessageListener.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/v2/listeners/ClientCodeMessageListener.java index 3a57fbdbd..6591a865d 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/v2/listeners/ClientCodeMessageListener.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/v2/listeners/ClientCodeMessageListener.java @@ -136,43 +136,6 @@ public class ClientCodeMessageListener extends QueueConsumer implements Initiali return null; } - private void processAccount(Map accountsAfterValidation, TkrAccountsGatewayRequest gatewayRequest) { - SendTkrRequest sendTkrRequest = new SendTkrRequest(); - sendTkrRequest.setRequestId(gatewayRequest.getRequestId()); - - for (Map.Entry entry : accountsAfterValidation.entrySet()) { - ClientCodeNewRequest clientCodeNewRequest = new ClientCodeNewRequest(); - TkrAccount tkrAccount = entry.getKey(); - ValidationResult validationResult = entry.getValue(); - log.debug("Creating new clientCode by tkr account: {}", tkrAccount.getClientCode()); - - IValidator validator = validationResult.validator(); - Company company = validator.getStored(ClientCodeStoreObjects.COMPANY); - Optional depoAccount = validator.getStored(ClientCodeStoreObjects.DEPO_ACCOUNT); - Long depoAccountId = depoAccount.map(Account::getId).orElse(null); - Map accountByCurrency = validator.getStored(ClientCodeStoreObjects.MAPPED_TO_CURRENCY_ACCOUNTS); - - clientCodeNewRequest.setCompanyId(company.getId()); - clientCodeNewRequest.setCode(tkrAccount.getClientCode()); - clientCodeNewRequest.setDepoAccountId(depoAccountId); - Account moneyAccount = accountByCurrency.get(CurrencyCode.RUB.getKey()); - clientCodeNewRequest.setMoneyAccountId(moneyAccount.getId()); - - List foreignCurrencyList = accountByCurrency.entrySet() - .stream() - .filter(currencyCodeAccountEntry -> !CurrencyCode.RUB.equalsByKey(currencyCodeAccountEntry.getKey())) - .map(currencyCodeAccountEntry -> currencyCodeAccountEntry.getValue().getId()) - .toList(); - clientCodeNewRequest.setCurrencyAccountList(foreignCurrencyList); - clientCodeFacade.createClientCodeWithTkr(clientCodeNewRequest, validator, true); - - TradingClearingRegistry tradingClearingRegistry = selectTradingClearingRegistry(company.getId(), - moneyAccount.getId(), depoAccountId); - sendTkrRequest.getTkrs().add(gatewayRequestCreator.createTkrGatewayReq(tradingClearingRegistry)); - log.debug("Success created new clientCode by tkr account: {}", tkrAccount.getClientCode()); - } - } - private void processEksAccount(Map accountsAfterValidation, TkrAccountsGatewayRequest gatewayRequest) { SendTkrRequest sendTkrRequest = new SendTkrRequest(); sendTkrRequest.setRequestId(gatewayRequest.getRequestId()); diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/ClientCodeStoreObjects.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/ClientCodeStoreObjects.java index 5a048c642..02d68d153 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/ClientCodeStoreObjects.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/ClientCodeStoreObjects.java @@ -5,6 +5,7 @@ public enum ClientCodeStoreObjects { MONEY_ACCOUNT, DEPO_ACCOUNT, CLRN_ACCS, + ANLT_ACCS, MAPPED_TO_CURRENCY_ACCOUNTS, TRADING_CLEARING_REGISTRY } diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/GatewayEksClientCodeValidationRule.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/GatewayEksClientCodeValidationRule.java index 06768c456..2f6c1fd36 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/GatewayEksClientCodeValidationRule.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/validation/GatewayEksClientCodeValidationRule.java @@ -28,6 +28,29 @@ import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidationRule; public enum GatewayEksClientCodeValidationRule implements IValidationRule> { + + RequiredAndCorrectsFields() { + @Override + public Optional validate(ImdgValidationContext context) { + TkrAccount validatedObject = context.getValidatedObject(); + + Collection msgs = validatedObject.getMoneyAccounts().stream() + .filter(acc -> !StringUtils.hasText(acc.getAccount()) && StringUtils.hasText(acc.getEks_account())) + .toList(); + for (MoneyAccountMsgRequest msg : validatedObject.getMoneyAccounts()) { + if (!StringUtils.hasText(msg.getAccount()) && StringUtils.hasText(msg.getEks_account())) { + return of(AccountError.RequiredFieldEmpty, "account+eks_account"); + } + if (!msg.getStatus().equals("NEW")) { + return of(AccountError.WrongFieldValue, "status"); + } + } + if (!msgs.isEmpty()) { + return of(AccountError.RequiredFieldEmpty, "account+eks_account"); + } + return empty(); + } + }, CompanyPresent() { @Override public Optional validate(ImdgValidationContext context) { @@ -121,6 +144,28 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule validate(ImdgValidationContext context) { + TkrAccount validatedObject = context.getValidatedObject(); + List moneyAccounts = validatedObject.getMoneyAccounts().stream() + .filter(account -> StringUtils.hasText(account.getEks_account())) + .toList(); + Imdg accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class); + for (MoneyAccountMsgRequest moneyAccount : moneyAccounts) { + ImdgPredicateBuilder predicateBuilder = accountImdg.predicateBuilder(); + Account anltAcc = accountImdg.getFirstObjectByPredicate( + predicateBuilder.and( + predicateBuilder.equals("accountType", AccountType.Anlt.getKey()), + predicateBuilder.equals("currency", moneyAccount.getCurrCode()) + )); + if (anltAcc == null) { + return of(AccountError.AccountNotFound, moneyAccount.getAccount()); + } + } + return Optional.empty(); + } + }, TcrIsNotPresent() { @Override @@ -131,7 +176,7 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule CurrencyCode.RUB.equalsByKey(ruAcc.getCurrency())) .findFirst(); - if (ruClrnAcc.isEmpty()) { + if (ruClrnAcc.isEmpty() && depoAccountOpt.isEmpty()) { return empty(); } Imdg imdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry, @@ -140,9 +185,13 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule tcr = imdg.getCollectionObjectsByPredicate(query); @@ -151,7 +200,8 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule