From 0ef3aca8b04507b1adfc591c21d968e03ec8d41b Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 7 Jun 2024 10:52:45 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-684 // http://jira.mfd.msk:8088/browse/CLS-685 --- .../ClientCodeValidationConfig.java | 151 +++++++++++++++--- .../clearing/account/errors/AccountError.java | 4 + .../account/service/ClientCodeService.java | 65 +++++++- .../TradingClearingRegistryService.java | 8 +- .../validation/common/ValidationHelper.java | 10 +- .../db-scripts/src/main/resources/db/DATA.sql | 6 + .../messaging/domain/cud/gateway/Tkr.java | 10 ++ .../messaging/service/RequestInfoUpdate.java | 12 ++ 8 files changed, 231 insertions(+), 35 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 61e03aeb8..4c8db44a6 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 @@ -1,33 +1,40 @@ package ru.spcex.clearing.account.config.validation; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import ru.clearing.classes.statics.data.account.Account; -import ru.clearing.classes.statics.data.account.ClientCode; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.platform.dictionary.ServiceStatusDictionary; -import ru.spcex.clearing.account.errors.AccountError; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeUpdateRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; -import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule; -import ru.spcex.clearing.validation.common.rules.FieldRequiredRule; -import ru.spcex.clearing.validation.common.rules.IdPresentRule; -import ru.spcex.platform.classes.base.SpcexObjectBase; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.validation.ImdgValidationContext; -import ru.spcex.platform.utils.enumeration.EnumMessage; -import ru.spcex.platform.utils.validation.IValidationRule; -import ru.spcex.platform.utils.validation.IValidator; -import ru.spcex.platform.utils.validation.ValidatorImpl; - import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.StringUtils; +import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.account.ClientCode; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.clearing.platform.dictionary.ServiceStatusDictionary; +import ru.spcex.clearing.account.errors.AccountError; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeUpdateRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.gateway.MoneyAccountMsgRequest; +import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule; +import ru.spcex.clearing.validation.common.rules.FieldRequiredRule; +import ru.spcex.clearing.validation.common.rules.IdPresentRule; +import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.enumeration.CompanySymbol; +import ru.spcex.platform.enumeration.CurrencyCode; +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; +import ru.spcex.platform.utils.validation.IValidator; +import ru.spcex.platform.utils.validation.ValidatorImpl; @Configuration public class ClientCodeValidationConfig { @@ -121,6 +128,86 @@ public class ClientCodeValidationConfig { } } + public static class ExistCompanyByUuid implements IValidationRule> { + String fieldName; + Function symbolCodeGetter; + + public ExistCompanyByUuid(String fieldName, Function symbolCodeGetter) { + this.fieldName = fieldName; + this.symbolCodeGetter = symbolCodeGetter; + } + + @Override + public Optional validate(ImdgValidationContext context) { + R validatedObject = context.getValidatedObject(); + String symbolCodeValue = symbolCodeGetter.apply(validatedObject); + if (!StringUtils.hasText(symbolCodeValue)) { + return of(AccountError.RequiredFieldEmpty, fieldName); + } + Imdg imdg = context.obtainMap(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + CompanySymbols companySymbols = imdg.getFirstObjectByFieldValues( + Map.of( + "companySymbol", CompanySymbol.UUID.getKey(), + "companySymbolValue", symbolCodeValue + ) + ); + if (companySymbols == null) { // null значения в массиве не ожидаются + return of(AccountError.COMPANY_NOT_FOUND_GTW, fieldName); + } + return Optional.empty(); + } + + @Override + public String ruleName() { + return getClass().getSimpleName() + "{" + fieldName + "}"; + } + } + + public static class ExistAccountByValue implements IValidationRule> { + String fieldName; + Function> accountsListValueGetter; + + public ExistAccountByValue(String fieldName, Function> accountsListValueGetter) { + this.fieldName = fieldName; + this.accountsListValueGetter = accountsListValueGetter; + } + + @Override + public Optional validate(ImdgValidationContext context) { + R validatedObject = context.getValidatedObject(); + List accountList = accountsListValueGetter.apply(validatedObject); + if (accountList == null || accountList.isEmpty()) { + return of(AccountError.RequiredFieldEmpty, fieldName); + } + Imdg imdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class); + for (MoneyAccountMsgRequest moneyAccountMsg : accountList) { + ImdgPredicateBuilder predicateBuilder = imdg.predicateBuilder(); + ImdgPredicate currencyPredicate; + ImdgPredicate accountPredicate = predicateBuilder.equals("account", moneyAccountMsg.getAccount()); + if (moneyAccountMsg.getCurrCode().equals(CurrencyCode.RUB.getKey())) { + currencyPredicate = predicateBuilder.or( + predicateBuilder.equals("currency", CurrencyCode.RUB.getKey()), + predicateBuilder.isNull("currency") + ); + } else { + currencyPredicate = predicateBuilder.equals("currency", moneyAccountMsg.getCurrCode()); + } + Account account = imdg.getFirstObjectByPredicate( + predicateBuilder.and(accountPredicate, currencyPredicate) + ); + if (account == null) { + return of(AccountError.ACCOUNT_NOT_FOUND_GTW, moneyAccountMsg.getAccount(), fieldName); + } + } + return Optional.empty(); + } + + @Override + public String ruleName() { + return getClass().getSimpleName() + "{" + fieldName + "}"; + } + } + @Bean("clientCodeUpdateRequestValidator") public Function clientCodeUpdateRequestValidator(Map> imdgForValidation) { return clientCodeUpdateRequest -> { @@ -155,7 +242,7 @@ public class ClientCodeValidationConfig { Account.class, AccountError.RequiredFieldEmpty, AccountError.AccountNotFound, - false, + true, acc -> Objects.equals(context.getValidatedObject().getCompanyId(), acc.getCompanyId()) ? null : AccountError.AccountNotFound ), @@ -202,4 +289,22 @@ public class ClientCodeValidationConfig { ); }; } + + @Bean("tkrAccountsGatewayValidator") + public Function tkrAccountsGatewayValidator(Map> imdgForValidation) { + return tkrGatewayRequest -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(tkrGatewayRequest); + Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); + addImdg.accept(IMDGDistributedNames.Map_CompanySymbols); + addImdg.accept(IMDGDistributedNames.Map_Account); + addImdg.accept(IMDGDistributedNames.Map_TradingClearingRegistry); + return new ValidatorImpl<>(context, + new ExistCompanyByUuid<>("companySymbolValue", + TkrAccount::getCompanyId), + new ExistAccountByValue<>("account", + TkrAccount::getMoneyAccounts) + ); + }; + } } 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 7290cb93a..61169108c 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 @@ -25,6 +25,10 @@ public enum AccountError implements IErrorEnumId { AccountDepoTypeRequired(5025L), AccountIsNotACurrency(5026L), // Счет %S не валютный CompanyHasNotClearingMemberCategory(5027L), + //ошибки для трансляции в модуль gateway + TCR_NOT_FOUND_GTW(5028L), + ACCOUNT_NOT_FOUND_GTW(5029L), + COMPANY_NOT_FOUND_GTW(5030L), TradingClearingRegistryNotFound(3022L), CurrencyNotFound(1016L), ; diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClientCodeService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClientCodeService.java index aa940b7a5..d0c00120d 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClientCodeService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClientCodeService.java @@ -5,9 +5,11 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.function.Function; +import java.util.stream.Collectors; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.ProducerRecord; @@ -35,6 +37,9 @@ import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount; import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccountsGatewayRequest; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.gateway.MoneyAccountMsgRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.gateway.MoneyAccountMsgResponse; +import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SendTkrRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.gateway.Tkr; import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListUpdateRequest; import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryNewRequest; @@ -43,6 +48,7 @@ import ru.spcex.clearing.platform.messaging.serialization.LogFormatter; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.platform.messaging.service.Status; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.validation.common.ValidationHelper; @@ -74,6 +80,7 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean private final Function clientCodeNewRequestValidator; private final Function clientCodeUpdateRequestValidator; private final Function clientCodeDeleteRequestValidator; + private final Function tkrAccountsGatewayValidator; private final ValidationHelper validationHelper; private final UserRoleVerification userRoleVerification; private final IMessageResolver messageResolver; @@ -81,11 +88,13 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean protected TradingClearingRegistryService tradingClearingRegistryService; protected ConfigurableApplicationContext context; + private final KafkaSender kafkaSender; //protected TradingClearingRegistryListService tradingClearingRegistryListService; @Autowired public ClientCodeService(Consumer kafkaQueue, Producer kafkaProducer, + KafkaSender kafkaSender, ImdgProvider imdgProvider, ValidationHelper validationHelper, IMessageResolver messageResolver, @@ -95,9 +104,11 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean UserRoleVerification userRoleVerification, @Qualifier("clientCodeNewRequestValidator") Function clientCodeNewRequestValidator, @Qualifier("clientCodeUpdateRequestValidator") Function clientCodeUpdateRequestValidator, - @Qualifier("clientCodeDeleteRequestValidator") Function clientCodeDeleteRequestValidator) { + @Qualifier("clientCodeDeleteRequestValidator") Function clientCodeDeleteRequestValidator, + @Qualifier("tkrAccountsGatewayValidator") Function tkrAccountsGatewayValidator) { super(kafkaQueue, kafkaProducer); this.kafkaProducer = kafkaProducer; + this.kafkaSender = kafkaSender; this.imdgProvider = imdgProvider; this.idGenerator = imdgProvider.getImdgIdGenerator(); this.clientCodeMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ClientCode, ClientCode.class); @@ -107,6 +118,7 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean this.clientCodeNewRequestValidator = clientCodeNewRequestValidator; this.clientCodeUpdateRequestValidator = clientCodeUpdateRequestValidator; this.clientCodeDeleteRequestValidator = clientCodeDeleteRequestValidator; + this.tkrAccountsGatewayValidator = tkrAccountsGatewayValidator; this.validationHelper = validationHelper; this.requestHelper = requestHelper; this.messageResolver = messageResolver; @@ -174,6 +186,38 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean protected RequestInfoUpdate clientCodeNewFromGateway(BaseRequest tkrRequest) { TkrAccountsGatewayRequest tkr = tkrRequest.getRequestPayload(); + RequestInfoUpdate requestInfoUpdate = null; + Tkr errorTkr = null; + List successTkr = new ArrayList<>(); + //Сначала нужно проверить на валидности все присланные счета на добавление + for (TkrAccount tkrAccount : tkr.getAccounts()) { + BaseRequest requestForValidation = new BaseRequest(); + requestForValidation.setRequestPayload(tkrAccount); + requestInfoUpdate = validationHelper.validateTillFirstError(requestForValidation, + tkrAccountsGatewayValidator); + if (requestInfoUpdate != null) { + errorTkr = crateErrorTkrToGateway(tkrAccount, Optional.of(requestInfoUpdate.getMessage())); + errorTkr.setMoneyAccounts(tkrAccount.getMoneyAccounts().stream() + .map(this::convertAccountToResponse) + .collect(Collectors.toList())); + break; + } + Tkr tkrToGateway = crateErrorTkrToGateway(tkrAccount, Optional.empty()); + tkrToGateway.setMoneyAccounts(tkrAccount.getMoneyAccounts().stream() + .map(this::convertAccountToResponse) + .collect(Collectors.toList())); + } + + //Если хоть в одном была ошибка, берем ее отправляем + if (errorTkr != null) { + log.debug("Send request to gateway with error tkr cause: {}", requestInfoUpdate.getMessage()); + SendTkrRequest sendTkrRequest = new SendTkrRequest(); + sendTkrRequest.getTkrs().add(errorTkr); + sendTkrRequest.getTkrs().addAll(successTkr); + kafkaSender.sendRequestToQueue(Consts.ACCOUNTS_TO_GATEWAY, sendTkrRequest); + return null; + } + for (TkrAccount tkrAccount : tkr.getAccounts()) { ClientCodeNewRequest clientCodeNewRequest = new ClientCodeNewRequest(); clientCodeNewRequest.setCode(tkrAccount.getClientCode()); @@ -231,7 +275,7 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean } BaseRequest request = new BaseRequest<>(); request.setRequestPayload(clientCodeNewRequest); - RequestInfoUpdate requestInfoUpdate = clientCodeNew0(request, false); + requestInfoUpdate = clientCodeNew0(request, false); if (requestInfoUpdate != null) { log.debug("processing result is: {}", requestInfoUpdate.getMessage()); } @@ -614,4 +658,21 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean clientCode.setUpdated(Instant.now()); } + + private Tkr crateErrorTkrToGateway(TkrAccount tkrAccount, Optional errorMsg) { + Tkr tkr = new Tkr(); + tkr.setTkrCode(tkrAccount.getTkrCode()); + tkr.setClientCode(tkrAccount.getClientCode()); + tkr.setCompanyId(tkrAccount.getCompanyId()); + tkr.setDepoAccount(tkrAccount.getDepoAccount()); + errorMsg.ifPresent(tkr::setErrorMessage); + return tkr; + } + + private MoneyAccountMsgResponse convertAccountToResponse(MoneyAccountMsgRequest moneyAccountMsgRequest) { + MoneyAccountMsgResponse msgResponse = new MoneyAccountMsgResponse(); + msgResponse.setAccount(moneyAccountMsgRequest.getAccount()); + msgResponse.setCurrCode(moneyAccountMsgRequest.getCurrCode()); + return msgResponse; + } } diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryService.java index f89374ba9..675c3d7bb 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryService.java @@ -549,7 +549,7 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini "companyId", company.getId() ) ); - if (companySymbols == null){ + if (companySymbols == null) { log.warn("CompanySymbols is null, searched by company.id: {}, skip this tkr", company.getId()); return Optional.empty(); } @@ -575,11 +575,9 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini } tkr.setAccountTypeName(accountType); if (tradingClearingRegistry.getDepoAccountId() != null) { - DepoAccount depoAccount = depoAccountImdg.getSingleObjectByID(tradingClearingRegistry.getDepoAccountId()); - Account account = null; + Account depoAccount = accountImdg.getSingleObjectByID(tradingClearingRegistry.getDepoAccountId()); if (depoAccount != null) { - account = accountImdg.getSingleObjectByID(depoAccount.getAccountId()); - tkr.setDepoAccount(account.getAccount()); + tkr.setDepoAccount(depoAccount.getAccount()); } } { diff --git a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/ValidationHelper.java b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/ValidationHelper.java index e9bf4e4e9..40c1c7e1b 100644 --- a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/ValidationHelper.java +++ b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/ValidationHelper.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.validation.common; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Function; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; @@ -10,10 +13,6 @@ import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.error.ValidationException; import ru.spcex.platform.utils.validation.IValidator; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Function; - public class ValidationHelper { private final static Logger log = LoggerFactory.getLogger(ValidationHelper.class); @@ -42,7 +41,8 @@ public class ValidationHelper { return new RequestInfoUpdate() .setId(userRequest.getId()) .setStatus(Status.Error) - .setMessage(errorMsg); + .setMessage(errorMsg) + .setEnumMessage(validationError.get()); } } return null; 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 d750a9ae0..4714b4df9 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql @@ -884,6 +884,12 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5026, 'ACNT', 'Сче INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5027, 'ACNT', 'У компании %s отсутствует категория.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5028, 'ACNT', 'Указанный ТКР не найден в клиринговой системе.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5029, 'ACNT', 'Счет %s не найден в клиринговой системе.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5030, 'ACNT', 'Компания %s не найдена в клиринговой системе.') 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; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/Tkr.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/Tkr.java index 4a8478e1f..5f64c256a 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/Tkr.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/Tkr.java @@ -21,6 +21,8 @@ public class Tkr { private String depoAccount; @JsonProperty("is_active") private Boolean isActive; + @JsonProperty("error_message") + private String errorMessage; @JsonProperty("money_account") private List moneyAccounts = new ArrayList<>(); @@ -95,4 +97,12 @@ public class Tkr { public void setActive(Boolean active) { isActive = active; } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } } diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/service/RequestInfoUpdate.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/service/RequestInfoUpdate.java index 77444032c..993c16154 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/service/RequestInfoUpdate.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/service/RequestInfoUpdate.java @@ -1,9 +1,12 @@ package ru.spcex.clearing.platform.messaging.service; +import ru.spcex.platform.utils.enumeration.EnumMessage; + public class RequestInfoUpdate { private Long id; private Status status; private String message; + private EnumMessage enumMessage; public RequestInfoUpdate() {} @@ -40,6 +43,15 @@ public class RequestInfoUpdate { return this; } + public EnumMessage getEnumMessage() { + return enumMessage; + } + + public RequestInfoUpdate setEnumMessage(EnumMessage enumMessage) { + this.enumMessage = enumMessage; + return this; + } + @Override public String toString() { return "RequestInfoUpdate{" +