diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/BeanConfiguration.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/BeanConfiguration.java index 9a7793082..c219ed4c1 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/BeanConfiguration.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/BeanConfiguration.java @@ -9,13 +9,13 @@ import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.platform.enumeration.UserRole; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; +import ru.spcex.clearing.util.services.IMDGMessageResolver; @Configuration public class BeanConfiguration { @Bean - public IMessageResolver messageResolver() { - return new SimpleMessageResolver(); + public IMessageResolver messageResolver(ImdgProvider imdgProvider) { + return new IMDGMessageResolver(imdgProvider); } @Bean diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountValidationConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountValidationConfig.java index e1f279b10..cb654bc0e 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountValidationConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountValidationConfig.java @@ -77,11 +77,6 @@ public class AccountValidationConfig { if (statusValue == null || AccountStatus.ACTIVE.equalsByKey(statusValue)) return null; return AccountError.WrongFieldValue; }), - EnumPresentRule.instance("accountType", - CorrespondentAccountNewRequest::getAccountType, - AccountType.values(), - AccountError.WrongFieldValue, - AccountError.RequiredFieldEmpty), DictionaryPresentRule.instance("accountType", CorrespondentAccountNewRequest::getAccountType, IMDGDistributedNames.Map_AccountTypeDictionary, @@ -89,7 +84,7 @@ public class AccountValidationConfig { AccountError.RequiredFieldEmpty, AccountError.WrongFieldValue, accountType -> { - if (accountType.getCode().equalsIgnoreCase(AccountType.Corr.getKey())) return null; + if (AccountType.Corr.equalsByKey(accountType.getCode())) return null; return AccountError.WrongFieldValue; }) ); @@ -138,11 +133,6 @@ public class AccountValidationConfig { false, AccountError.WrongFieldValue, AccountError.RequiredFieldEmpty), - EnumPresentRule.instance("accountType", - CorrespondentAccountUpdateRequest::getAccountType, - AccountType.values(), - AccountError.WrongFieldValue, - AccountError.RequiredFieldEmpty), DictionaryPresentRule.instance("accountType", CorrespondentAccountUpdateRequest::getAccountType, IMDGDistributedNames.Map_AccountTypeDictionary, @@ -150,7 +140,7 @@ public class AccountValidationConfig { AccountError.RequiredFieldEmpty, AccountError.WrongFieldValue, accountType -> { - if (accountType.getCode().equalsIgnoreCase(AccountType.Corr.getKey())) return null; + if (AccountType.Corr.equalsByKey(accountType.getCode())) return null; return AccountError.WrongFieldValue; }) ); @@ -172,7 +162,11 @@ public class AccountValidationConfig { IMDGDistributedNames.Map_Account, Account.class, AccountError.RequiredFieldEmpty, - AccountError.AccountNotFound) + AccountError.AccountNotFound, + account -> { + if (AccountStatus.ACTIVE.equalsByKey(account.getStatus())) return null; + return AccountError.AccountNotActive; + }) ); }; } diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/BankAccountValidationConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/BankAccountValidationConfig.java index 55b02c206..1c2ca6ab6 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/BankAccountValidationConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/BankAccountValidationConfig.java @@ -12,13 +12,11 @@ import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountNewReq import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountUpdateRequest; 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.EnumPresentRule; 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.AccountStatus; import ru.spcex.platform.enumeration.AccountType; -import ru.spcex.platform.enumeration.CurrencyCode; import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; @@ -73,11 +71,6 @@ public class BankAccountValidationConfig { if (accounts.isEmpty()) return null; return AccountError.AccountAlreadyExist; }), - EnumPresentRule.instance("currency", - BankAccountNewRequest::getCurrency, - CurrencyCode.values(), - AccountError.WrongFieldValue, - AccountError.RequiredFieldEmpty), DictionaryPresentRule.instance("currency", BankAccountNewRequest::getCurrency, IMDGDistributedNames.Map_CurrencyCodeDictionary, @@ -126,12 +119,6 @@ public class BankAccountValidationConfig { if (!AccountStatus.ACTIVE.equalsByKey(account.getStatus())) return AccountError.AccountNotActive; return null; }), - EnumPresentRule.instance("currency", - BankAccountUpdateRequest::getCurrency, - CurrencyCode.values(), - false, - AccountError.WrongFieldValue, - AccountError.RequiredFieldEmpty), DictionaryPresentRule.instance("currency", BankAccountUpdateRequest::getCurrency, IMDGDistributedNames.Map_CurrencyCodeDictionary, diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ClearingAccountValidationConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ClearingAccountValidationConfig.java index 1c8c88154..cb3c2368e 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ClearingAccountValidationConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ClearingAccountValidationConfig.java @@ -31,7 +31,6 @@ import java.util.function.Function; @Configuration public class ClearingAccountValidationConfig { - // todo add validation for clearingAccountType from dictionary @Bean("clearingAccountNewRequestValidator") public Function clearingAccountNewRequestValidator( Map> imdgForValidation diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ValidationConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ValidationConfig.java index e9d50af15..43cbba292 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ValidationConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/ValidationConfig.java @@ -9,6 +9,7 @@ import ru.clearing.classes.statics.data.account.ClearingAccount; import ru.clearing.classes.statics.data.account.InformationAccount; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.platform.dictionary.AccountTypeDictionary; import ru.clearing.platform.dictionary.ClearingAccountTypeDictionary; import ru.clearing.platform.dictionary.CurrencyCodeDictionary; import ru.clearing.platform.dictionary.WorkflowStatusDictionary; @@ -36,7 +37,7 @@ public class ValidationConfig { addImdg.accept(IMDGDistributedNames.Map_ClearingAccountTypeDictionary, ClearingAccountTypeDictionary.class); addImdg.accept(IMDGDistributedNames.Map_Account, Account.class); addImdg.accept(IMDGDistributedNames.Map_InformationAccount, InformationAccount.class); - addImdg.accept(IMDGDistributedNames.Map_AccountTypeDictionary, Account.class); + addImdg.accept(IMDGDistributedNames.Map_AccountTypeDictionary, AccountTypeDictionary.class); addImdg.accept(IMDGDistributedNames.Map_BankAccount, BankAccount.class); addImdg.accept(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class); addImdg.accept(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class); diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java index 59ff63df1..81df09673 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java @@ -186,8 +186,6 @@ public class AccountService extends QueueConsumer implements InitializingBean { public RequestInfoUpdate accountNewSdf01(BaseRequest userRequest) { log.debug("AccountSdf01Request received"); - // todo add validation (create task for that?) - AccountSdf01Request req = userRequest.getRequestPayload(); List accountToStatement = new ArrayList<>(); for (AccountSdfRequestPart accountReq : req.getAccounts()) { diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java index 7b42723c9..1940cc5a9 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java @@ -136,7 +136,6 @@ public class BankAccountService extends QueueConsumer implements InitializingBea imdgTransaction.commitTransaction(); log.debug("successfully processed, new bank account id {}, account id {}", bankAccountId, accountId); } else { - // todo выяснить, что возвращать из метода в этой ситуации log.debug("failed insert, new bank account id {}, new account id {} (if id = -1 then insert is failed)", bankAccountId, accountId); @@ -185,7 +184,6 @@ public class BankAccountService extends QueueConsumer implements InitializingBea bankAccount.getId(), account.getId()); } else { - // todo выяснить, что возвращать из метода в этой ситуации log.debug("failed update, bank account id {}, new account id {}", bankAccount.getId(), account.getId()); diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java index 0a059b28e..2c74b2086 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java @@ -85,7 +85,6 @@ public class InformationAccountService extends QueueConsumer implements Initiali Long newId = informationAccountImdg.nextIDSequenceFor(); String accountValue = generateInfoAccount(newId); - // todo уточнить у репортера ImdgPredicateBuilder accountPredicateBuilder = accountImdg.predicateBuilder(); ImdgPredicate companyIdPredicate = accountPredicateBuilder.equals("companyId", 1); ImdgPredicate accountTypePredicate = accountPredicateBuilder.equals("accountType", AccountType.Anlt.getKey()); diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/account/InformationAccountController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/account/InformationAccountController.java index a9d221ad3..5c2943cd2 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/account/InformationAccountController.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/account/InformationAccountController.java @@ -17,7 +17,7 @@ import java.util.Collection; import java.util.Map; @Controller -@RequestMapping("/accounting/information-account") +@RequestMapping("/accounting/information-accounts") public class InformationAccountController { private final IStateLoader stateLoader; diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/account/InformationAccountControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/account/InformationAccountControllerTest.java index 4131c8f96..d352d259b 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/account/InformationAccountControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/account/InformationAccountControllerTest.java @@ -7,12 +7,12 @@ import ru.spcex.clearing.backendapi.controller.queue.account.InformationAccountC import ru.spcex.clearing.imdg.IMDGDistributedNames; class InformationAccountControllerTest extends AbstractControllerTest { - public static final String REST_URL = "/accounting/information-account/"; + public static final String REST_URL = "/accounting/information-accounts/"; /** * {@link InformationAccountController#getAll()}
* Тест проверяет получение запроса по REST API.
- * Входной запрос /accounting/information-account/
+ * Входной запрос /accounting/information-accounts/
* Ответ CommonGetAllResponse
*/ @Test diff --git a/clearing-parent/balance-service/pom.xml b/clearing-parent/balance-service/pom.xml index f4d1145bb..9f1706733 100644 --- a/clearing-parent/balance-service/pom.xml +++ b/clearing-parent/balance-service/pom.xml @@ -24,6 +24,10 @@ ru.spcex.platform platform-imdg-api-hazelcast-impl + + ru.spcex.clearing + clearing-validation + ru.spcex.clearing classes diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/MessagesConfig.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/MessagesConfig.java index 1b8fea101..19cefe06e 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/MessagesConfig.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/MessagesConfig.java @@ -1,30 +1,16 @@ package ru.spcex.clearing.balance.config; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.ResourceBundleMessageSource; +import ru.spcex.clearing.util.services.IMDGMessageResolver; +import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.enumeration.SpringPropertiesMessageResolver; - -import java.util.Locale; @Configuration public class MessagesConfig { - @Bean("validation-error-messages") - public ResourceBundleMessageSource messages() { - ResourceBundleMessageSource source = new ResourceBundleMessageSource(); - source.setBasenames("messages/error"); - source.setUseCodeAsDefaultMessage(true); - source.setDefaultEncoding("utf8"); - source.setDefaultLocale(Locale.ROOT); - return source; - } @Bean - public IMessageResolver errorResolver(@Qualifier("validation-error-messages") ResourceBundleMessageSource messageBundle) { - SpringPropertiesMessageResolver resolver = new SpringPropertiesMessageResolver(messageBundle); - resolver.setLocale("ru"); - return resolver; + public IMessageResolver errorResolver(ImdgProvider imdgProvider) { + return new IMDGMessageResolver(imdgProvider); } } diff --git a/clearing-parent/balance-service/src/main/resources/messages/error.properties b/clearing-parent/balance-service/src/main/resources/messages/error.properties deleted file mode 100644 index 3f2dc2393..000000000 --- a/clearing-parent/balance-service/src/main/resources/messages/error.properties +++ /dev/null @@ -1,2 +0,0 @@ -5211=Company not found -5213=Currency not found diff --git a/clearing-parent/balance-service/src/main/resources/messages/error_ru.properties b/clearing-parent/balance-service/src/main/resources/messages/error_ru.properties deleted file mode 100644 index 1820f1d6e..000000000 --- a/clearing-parent/balance-service/src/main/resources/messages/error_ru.properties +++ /dev/null @@ -1,2 +0,0 @@ -5211=Компания не найдена -5213=Валюта не найдена \ No newline at end of file diff --git a/clearing-parent/clearing-service/pom.xml b/clearing-parent/clearing-service/pom.xml index 5728c07ef..fe421bfb5 100644 --- a/clearing-parent/clearing-service/pom.xml +++ b/clearing-parent/clearing-service/pom.xml @@ -25,6 +25,10 @@ ru.spcex.platform platform-imdg-api-hazelcast-impl + + ru.spcex.clearing + clearing-validation + ru.spcex.clearing classes diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MessageResolverConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MessageResolverConfig.java index 6ef39cec8..cf3d8356a 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MessageResolverConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MessageResolverConfig.java @@ -3,12 +3,13 @@ package ru.spcex.clearing.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; +import ru.spcex.clearing.util.services.IMDGMessageResolver; +import ru.spcex.platform.imdg.api.ImdgProvider; @Configuration public class MessageResolverConfig { @Bean - public IMessageResolver messageResolver() { - return new SimpleMessageResolver(); + public IMessageResolver messageResolver(ImdgProvider imdgProvider) { + return new IMDGMessageResolver(imdgProvider); } } diff --git a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/util/services/IMDGMessageResolver.java b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/util/services/IMDGMessageResolver.java new file mode 100644 index 000000000..97dfbf8cf --- /dev/null +++ b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/util/services/IMDGMessageResolver.java @@ -0,0 +1,37 @@ +package ru.spcex.clearing.util.services; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.clearing.platform.dictionary.ErrorCodeDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.enumeration.IMessageResolver; + +import java.util.Arrays; + +/** + * Использует ErrorCodeDictionary для расшифровки текста кодов ошибок. + */ +public class IMDGMessageResolver implements IMessageResolver { + protected final Logger log = LoggerFactory.getLogger(getClass()); + protected final Imdg errorCodeDictionaryIMDG; + + public IMDGMessageResolver(ImdgProvider imdgProvider) { + this.errorCodeDictionaryIMDG = imdgProvider.getImdg(IMDGDistributedNames.Map_ErrorCodeDictionary, ErrorCodeDictionary.class); + } + + @Override + public String resolve(EnumMessage errorMessage) { + if (errorMessage == null) return "null"; + + ErrorCodeDictionary errorDictionary = errorCodeDictionaryIMDG.getSingleObjectByID(errorMessage.getSubject().getId()); + if (errorDictionary == null) { + log.warn("ERROR_CODE_DICTIONARY not found fo id={}", errorMessage.getSubject().getId()); + return String.format("(%d) args %s", errorMessage.getSubject().getId(), Arrays.toString(errorMessage.getArgs())); + } + String textTemplate = errorDictionary.getName(); + return String.format(textTemplate, errorMessage.getArgs()); + } +} diff --git a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/EnumPresentRule.java b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/EnumPresentRule.java index 5b503aedf..06df4e777 100644 --- a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/EnumPresentRule.java +++ b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/EnumPresentRule.java @@ -11,6 +11,7 @@ import java.util.function.Function; /** * Проверка поля со значением из множества (enum) + * Рекомендуется использовать не эту валидацию, а DictionaryPresentRule * @param Класс проверяемого объекта * @param Enum */ diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/BeanConfiguration.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/BeanConfiguration.java index d0189af7a..d6248d708 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/BeanConfiguration.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/BeanConfiguration.java @@ -10,13 +10,13 @@ import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.platform.enumeration.UserRole; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; +import ru.spcex.clearing.util.services.IMDGMessageResolver; @Configuration public class BeanConfiguration { @Bean - public IMessageResolver messageResolver() { - return new SimpleMessageResolver(); + public IMessageResolver messageResolver(ImdgProvider imdgProvider) { + return new IMDGMessageResolver(imdgProvider); } @Bean diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ClearingMemberCategoryValidationConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ClearingMemberCategoryValidationConfig.java index 573a2793c..23270a5d8 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ClearingMemberCategoryValidationConfig.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ClearingMemberCategoryValidationConfig.java @@ -81,12 +81,6 @@ public class ClearingMemberCategoryValidationConfig { return CompanyErrors.CompanyDisabled; return null; }), - EnumPresentRule.instance("clearingMemberCategory", - ClearingMemberCategoryUpdateRequest::getClearingMemberCategory, - ClearingCategory.values(), - false, - CompanyErrors.WrongFieldValue, - CompanyErrors.RequiredFieldEmpty), DictionaryPresentRule.instance("clearingMemberCategory", ClearingMemberCategoryUpdateRequest::getClearingMemberCategory, IMDGDistributedNames.Map_ClearingCategoryDictionary, diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/CompanyValidationConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/CompanyValidationConfig.java index b31127875..5a890d5b1 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/CompanyValidationConfig.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/CompanyValidationConfig.java @@ -49,11 +49,6 @@ public class CompanyValidationConfig { WorkflowStatusDictionary.class, CompanyErrors.RequiredFieldEmpty, CompanyErrors.WrongFieldValue), - EnumPresentRule.instance("companySymbol", - CompanyNewRequest::getCompanySymbol, - CompanySymbol.values(), - CompanyErrors.WrongFieldValue, - CompanyErrors.RequiredFieldEmpty), DictionaryPresentRule.instance("companySymbol", CompanyNewRequest::getCompanySymbol, IMDGDistributedNames.Map_CompanySymbolDictionary, diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ContactValidationConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ContactValidationConfig.java index 3cb98b376..f92635d78 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ContactValidationConfig.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ContactValidationConfig.java @@ -44,11 +44,6 @@ public class ContactValidationConfig { Company.class, CompanyErrors.RequiredFieldEmpty, CompanyErrors.CompanyNotFound), - EnumPresentRule.instance("contactType", - ContactNewRequest::getContactType, - ContactTypes.values(), - CompanyErrors.WrongFieldValue, - CompanyErrors.RequiredFieldEmpty), DictionaryPresentRule.instance("contactType", ContactNewRequest::getContactType, IMDGDistributedNames.Map_ContactTypeDictionary, @@ -86,12 +81,6 @@ public class ContactValidationConfig { } return null; }), - EnumPresentRule.instance("contactType", - ContactUpdateRequest::getContactType, - ContactTypes.values(), - false, - CompanyErrors.WrongFieldValue, - CompanyErrors.RequiredFieldEmpty), DictionaryPresentRule.instance("contactType", ContactUpdateRequest::getContactType, IMDGDistributedNames.Map_ContactTypeDictionary, diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ProfileDocumentValidationConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ProfileDocumentValidationConfig.java index 098c6a550..9fe82a927 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ProfileDocumentValidationConfig.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ProfileDocumentValidationConfig.java @@ -45,11 +45,6 @@ public class ProfileDocumentValidationConfig { CompanyErrors.RequiredFieldEmpty, CompanyErrors.CompanyNotFound, company -> WorkflowStatus.Active.getKey().equals(company.getWorkflowStatus()) ? null : CompanyErrors.CompanyDisabled), - EnumPresentRule.instance("documentType", - ProfileDocumentNewRequest::getDocumentType, - DocumentTypes.values(), - CompanyErrors.WrongFieldValue, - CompanyErrors.RequiredFieldEmpty), DictionaryPresentRule.instance("documentType", ProfileDocumentNewRequest::getDocumentType, IMDGDistributedNames.Map_DocumentTypeDictionary, @@ -109,12 +104,6 @@ public class ProfileDocumentValidationConfig { CompanyErrors.CompanyNotFound, false, company -> WorkflowStatus.Active.getKey().equals(company.getWorkflowStatus()) ? null : CompanyErrors.CompanyDisabled), - EnumPresentRule.instance("documentType", - ProfileDocumentUpdateRequest::getDocumentType, - DocumentTypes.values(), - false, - CompanyErrors.WrongFieldValue, - CompanyErrors.RequiredFieldEmpty), DictionaryPresentRule.instance("documentType", ProfileDocumentUpdateRequest::getDocumentType, IMDGDistributedNames.Map_DocumentTypeDictionary, diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/ErrorResolverConfig.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/ErrorResolverConfig.java index c64e7c10e..f9de0dbfb 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/ErrorResolverConfig.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/ErrorResolverConfig.java @@ -3,12 +3,13 @@ package ru.spcex.clearing.scheduler.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; +import ru.spcex.clearing.util.services.IMDGMessageResolver; +import ru.spcex.platform.imdg.api.ImdgProvider; @Configuration public class ErrorResolverConfig { @Bean - public IMessageResolver messageResolver() { - return new SimpleMessageResolver(); + public IMessageResolver messageResolver(ImdgProvider imdgProvider) { + return new IMDGMessageResolver(imdgProvider); } } diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ErrorResolverConfig.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ErrorResolverConfig.java index 38d1bdd66..327fe9182 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ErrorResolverConfig.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ErrorResolverConfig.java @@ -3,12 +3,13 @@ package ru.spcex.clearing.securities.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; +import ru.spcex.clearing.util.services.IMDGMessageResolver; +import ru.spcex.platform.imdg.api.ImdgProvider; @Configuration public class ErrorResolverConfig { @Bean - public IMessageResolver messageResolver() { - return new SimpleMessageResolver(); + public IMessageResolver messageResolver(ImdgProvider imdgProvider) { + return new IMDGMessageResolver(imdgProvider); } } diff --git a/clearing-parent/security-util/src/main/java/ru/spcex/clearing/util/security/UserRoleVerification.java b/clearing-parent/security-util/src/main/java/ru/spcex/clearing/util/security/UserRoleVerification.java index 565d10bc0..857550147 100644 --- a/clearing-parent/security-util/src/main/java/ru/spcex/clearing/util/security/UserRoleVerification.java +++ b/clearing-parent/security-util/src/main/java/ru/spcex/clearing/util/security/UserRoleVerification.java @@ -90,8 +90,8 @@ public class UserRoleVerification { Objects.requireNonNull(roleForVerification); Long requesterId = req.getUserId(); if (requesterId != null && !userHasRole(requesterId, roleForVerification)) { - log.debug("User {} has no role to allow this action", requesterId); String errMsg = messageResolver.resolve(new EnumMessage(roleVerificationError, requesterId)); + log.info("User {} has no role: {}", requesterId, errMsg); return new RequestInfoUpdate() .setId(req.getId()) .setStatus(ru.spcex.clearing.platform.messaging.service.Status.Error) diff --git a/clearing-parent/trade-importer/pom.xml b/clearing-parent/trade-importer/pom.xml index 7ea41af25..fec21cae1 100644 --- a/clearing-parent/trade-importer/pom.xml +++ b/clearing-parent/trade-importer/pom.xml @@ -62,6 +62,10 @@ ru.spcex.platform platform-imdg-api-hazelcast-impl + + ru.spcex.clearing + clearing-validation + ru.spcex.platform platform-enum diff --git a/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/config/ErrorResolverConfig.java b/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/config/ErrorResolverConfig.java index 8c838d4ed..12ed6d5dc 100644 --- a/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/config/ErrorResolverConfig.java +++ b/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/config/ErrorResolverConfig.java @@ -3,12 +3,13 @@ package ru.spcex.clearing.trade.importer.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; +import ru.spcex.clearing.util.services.IMDGMessageResolver; +import ru.spcex.platform.imdg.api.ImdgProvider; @Configuration public class ErrorResolverConfig { @Bean - public IMessageResolver messageResolver() { - return new SimpleMessageResolver(); + public IMessageResolver messageResolver(ImdgProvider imdgProvider) { + return new IMDGMessageResolver(imdgProvider); } } diff --git a/clearing-parent/trade-importer/src/main/resources/application.properties b/clearing-parent/trade-importer/src/main/resources/application.properties index dc8f7ba47..e2cfdbd94 100644 --- a/clearing-parent/trade-importer/src/main/resources/application.properties +++ b/clearing-parent/trade-importer/src/main/resources/application.properties @@ -13,7 +13,7 @@ trade-importer.hazelcast.login=dev trade-importer.hazelcast.password=dev-pass trade-importer.kafka-consumer.bootstrap-servers=localhost:9092 -trade-importer.kafka-consumer.group-id=dev-group- trade-importer +trade-importer.kafka-consumer.group-id=dev-group-trade-importer trade-importer.kafka-consumer.enable-auto-commit=false trade-importer.kafka-consumer.session-timeout-ms=30000 trade-importer.kafka-consumer.auto-offset-reset=latest diff --git a/clearing-parent/trade-importer/src/main/resources/logback.xml b/clearing-parent/trade-importer/src/main/resources/logback.xml new file mode 100644 index 000000000..c49a8bbd0 --- /dev/null +++ b/clearing-parent/trade-importer/src/main/resources/logback.xml @@ -0,0 +1,38 @@ + + + + + + %date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n + utf-8 + + + + ./logs/trade-importer.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n + utf8 + + + + ./logs/trade-importer.%i.log + + 1 + 10 + + + 500MB + + + + + + + + + + + + + diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index 4a9861ffd..c250e2a6e 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -98,6 +98,7 @@ public interface Consts { String SDF03_PROCESS = "sdf03-process"; String SDF11_PROCESS = "sdf11-process"; String EXPORT_PROCESS = "export-process"; + String S_TRADES_IMPORTED = "s_trades-imported"; String ACCOUNT_TERMINATION = "account-termination"; String BALANCE_ACCOUNT_NEW = "balance-account-new"; String BALANCE_ACCOUNT_UPDATE = "balance-account-update"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/service/QueueConsumer.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/service/QueueConsumer.java index 83a2d7ca5..0b26d5c03 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/service/QueueConsumer.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/service/QueueConsumer.java @@ -80,6 +80,7 @@ public class QueueConsumer implements AutoCloseable { consumer.subscribe(callbacks.keySet()); } Object o = null; + int lastErrors = 0; while (!closed.get()) { try { ConsumerRecords records = consumer.poll(Duration.of(10, ChronoUnit.SECONDS)); @@ -95,11 +96,21 @@ public class QueueConsumer implements AutoCloseable { } } } + lastErrors = 0; } catch (Throwable e) { log.error(ExceptionUtils.getStackTrace(e)); if (producer != null && o != null) { sendErrorResponse((BaseRequest) o); } + if (lastErrors++ > 20) { + log.warn("Too many error at row, {}. Sleep.", lastErrors); + try { + Thread.sleep(1000L); + } catch (InterruptedException ie) { + log.info("Thread interrupted. {}", ExceptionUtils.getStackTrace(ie)); + break; + } + } } } } catch (WakeupException e) { diff --git a/pom.xml b/pom.xml index e21bc656f..ce3a0c7c7 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,7 @@ ${folder_root_clearing}/clearing-parent/imdg ${folder_root_clearing}/clearing-parent/dbf-exporter ${folder_root_clearing}/clearing-parent/dbf-importer + ${folder_root_clearing}/clearing-parent/trade-importer ${folder_root_clearing}/clearing-parent/account-service ${folder_root_clearing}/clearing-parent/balance-service ${folder_root_clearing}/clearing-parent/company-service diff --git a/z-distr/pom.xml b/z-distr/pom.xml index 2414ad7fb..819183670 100644 --- a/z-distr/pom.xml +++ b/z-distr/pom.xml @@ -191,6 +191,25 @@ + + copy-trade-importer-bin + prepare-package + + copy + + + + + ${folder_root_trade-importer}/target/trade-importer.jar + ${folder.clearing.distr.modules}/trade-importer/trade-importer.jar + + + ${folder_root_trade-importer}/src/main/resources/application.properties + ${folder.clearing.distr.modules}/trade-importer/application.properties + + + + copy-account-service-bin prepare-package diff --git a/z-distr/src/main/resources/distr/bin/kill_all.sh b/z-distr/src/main/resources/distr/bin/kill_all.sh index 4e9010ebd..f4da3e400 100644 --- a/z-distr/src/main/resources/distr/bin/kill_all.sh +++ b/z-distr/src/main/resources/distr/bin/kill_all.sh @@ -7,6 +7,7 @@ kill -9 $(ps -ef | grep java | grep company-service.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep clearing-service.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep dbf-exporter.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep dbf-importer.jar | awk '{print $2}') +kill -9 $(ps -ef | grep java | grep trade-importer.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep imdg.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep securities-service.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep utility-service.jar | awk '{print $2}') diff --git a/z-distr/src/main/resources/distr/bin/launch_all.sh b/z-distr/src/main/resources/distr/bin/launch_all.sh index 6e5336f8c..18e90c4b0 100644 --- a/z-distr/src/main/resources/distr/bin/launch_all.sh +++ b/z-distr/src/main/resources/distr/bin/launch_all.sh @@ -8,6 +8,7 @@ cd /opt/mfd/clearing/bin /opt/mfd/clearing/bin/clearing-service.sh /opt/mfd/clearing/bin/dbf-exporter.sh /opt/mfd/clearing/bin/dbf-importer.sh +/opt/mfd/clearing/bin/trade-importer.sh /opt/mfd/clearing/bin/securities-service.sh /opt/mfd/clearing/bin/utility-service.sh /opt/mfd/clearing/bin/scheduler-service.sh diff --git a/z-distr/src/main/resources/distr/bin/trade-importer.sh b/z-distr/src/main/resources/distr/bin/trade-importer.sh new file mode 100644 index 000000000..3e4a60f8c --- /dev/null +++ b/z-distr/src/main/resources/distr/bin/trade-importer.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +CLEARING_HOME=/opt/mfd/clearing/ +cd $CLEARING_HOME/bin + +CMD="java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7100 -jar trade-importer.jar --spring.config.location=$CLEARING_HOME/settings/trade-importer/" + +$CMD >/dev/null 2>&1 & +