Merge branch 'dev' into cls-271
# Conflicts: # platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java
This commit is contained in:
commit
b60f046a8c
37 changed files with 171 additions and 111 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
})
|
||||
);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ import java.util.function.Function;
|
|||
@Configuration
|
||||
public class ClearingAccountValidationConfig {
|
||||
|
||||
// todo add validation for clearingAccountType from dictionary
|
||||
@Bean("clearingAccountNewRequestValidator")
|
||||
public Function<ClearingAccountNewRequest, IValidator> clearingAccountNewRequestValidator(
|
||||
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -186,8 +186,6 @@ public class AccountService extends QueueConsumer implements InitializingBean {
|
|||
public RequestInfoUpdate accountNewSdf01(BaseRequest<AccountSdf01Request> userRequest) {
|
||||
log.debug("AccountSdf01Request received");
|
||||
|
||||
// todo add validation (create task for that?)
|
||||
|
||||
AccountSdf01Request req = userRequest.getRequestPayload();
|
||||
List<AccountSdfToStatementRequestPart> accountToStatement = new ArrayList<>();
|
||||
for (AccountSdfRequestPart accountReq : req.getAccounts()) {
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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()} <br>
|
||||
* Тест проверяет получение запроса по REST API.<br>
|
||||
* Входной запрос /accounting/information-account/ <br>
|
||||
* Входной запрос /accounting/information-accounts/ <br>
|
||||
* Ответ CommonGetAllResponse <br>
|
||||
*/
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@
|
|||
<groupId>ru.spcex.platform</groupId>
|
||||
<artifactId>platform-imdg-api-hazelcast-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-validation</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>classes</artifactId>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
5211=Company not found
|
||||
5213=Currency not found
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
5211=Компания не найдена
|
||||
5213=Валюта не найдена
|
||||
|
|
@ -25,6 +25,10 @@
|
|||
<groupId>ru.spcex.platform</groupId>
|
||||
<artifactId>platform-imdg-api-hazelcast-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-validation</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>classes</artifactId>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<ErrorCodeDictionary> 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());
|
||||
}
|
||||
}
|
||||
|
|
@ -11,6 +11,7 @@ import java.util.function.Function;
|
|||
|
||||
/**
|
||||
* Проверка поля со значением из множества (enum)
|
||||
* Рекомендуется использовать не эту валидацию, а DictionaryPresentRule
|
||||
* @param <R> Класс проверяемого объекта
|
||||
* @param <E> Enum
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -62,6 +62,10 @@
|
|||
<groupId>ru.spcex.platform</groupId>
|
||||
<artifactId>platform-imdg-api-hazelcast-impl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.clearing</groupId>
|
||||
<artifactId>clearing-validation</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ru.spcex.platform</groupId>
|
||||
<artifactId>platform-enum</artifactId>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
|
||||
<Pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n</Pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>./logs/trade-importer.log</file>
|
||||
<encoder>
|
||||
<!-- |%X{ru.nbch.scoring.web.logging.mdc_key}-->
|
||||
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n</Pattern>
|
||||
<charset>utf8</charset>
|
||||
</encoder>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
|
||||
<fileNamePattern>
|
||||
./logs/trade-importer.%i.log
|
||||
</fileNamePattern>
|
||||
<minIndex>1</minIndex>
|
||||
<maxIndex>10</maxIndex>
|
||||
</rollingPolicy>
|
||||
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
|
||||
<maxFileSize>500MB</maxFileSize>
|
||||
</triggeringPolicy>
|
||||
</appender>
|
||||
|
||||
<root level="warn">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="FILE"/>
|
||||
</root>
|
||||
|
||||
<logger name="ru.spcex" level="debug" additivity="false">
|
||||
<appender-ref ref="FILE"/>
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
</logger>
|
||||
</configuration>
|
||||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ public class QueueConsumer implements AutoCloseable {
|
|||
consumer.subscribe(callbacks.keySet());
|
||||
}
|
||||
Object o = null;
|
||||
int lastErrors = 0;
|
||||
while (!closed.get()) {
|
||||
try {
|
||||
ConsumerRecords<String, Object> 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) {
|
||||
|
|
|
|||
1
pom.xml
1
pom.xml
|
|
@ -37,6 +37,7 @@
|
|||
<folder_root_clearing_imdg>${folder_root_clearing}/clearing-parent/imdg</folder_root_clearing_imdg>
|
||||
<folder_root_dbf-exporter>${folder_root_clearing}/clearing-parent/dbf-exporter</folder_root_dbf-exporter>
|
||||
<folder_root_dbf-importer>${folder_root_clearing}/clearing-parent/dbf-importer</folder_root_dbf-importer>
|
||||
<folder_root_trade-importer>${folder_root_clearing}/clearing-parent/trade-importer</folder_root_trade-importer>
|
||||
<folder_root_account-service>${folder_root_clearing}/clearing-parent/account-service</folder_root_account-service>
|
||||
<folder_root_balance-service>${folder_root_clearing}/clearing-parent/balance-service</folder_root_balance-service>
|
||||
<folder_root_company-service>${folder_root_clearing}/clearing-parent/company-service</folder_root_company-service>
|
||||
|
|
|
|||
|
|
@ -191,6 +191,25 @@
|
|||
</fileSets>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-trade-importer-bin</id>
|
||||
<phase>prepare-package</phase>
|
||||
<goals>
|
||||
<goal>copy</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<sourceFile>${folder_root_trade-importer}/target/trade-importer.jar</sourceFile>
|
||||
<destinationFile>${folder.clearing.distr.modules}/trade-importer/trade-importer.jar</destinationFile>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<sourceFile>${folder_root_trade-importer}/src/main/resources/application.properties</sourceFile>
|
||||
<destinationFile>${folder.clearing.distr.modules}/trade-importer/application.properties</destinationFile>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-account-service-bin</id>
|
||||
<phase>prepare-package</phase>
|
||||
|
|
|
|||
|
|
@ -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}')
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
9
z-distr/src/main/resources/distr/bin/trade-importer.sh
Normal file
9
z-distr/src/main/resources/distr/bin/trade-importer.sh
Normal file
|
|
@ -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 &
|
||||
|
||||
Loading…
Add table
Reference in a new issue