correspondent account validation
currency exists check
This commit is contained in:
parent
dc4a252400
commit
5a158cec1d
13 changed files with 120 additions and 44 deletions
|
|
@ -1,5 +1,10 @@
|
||||||
package ru.spcex.clearing.account.config.validation;
|
package ru.spcex.clearing.account.config.validation;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.function.Function;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
|
|
@ -22,17 +27,12 @@ import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
|
import ru.spcex.platform.imdg.validation.rule.CurrencyCodeValidationRule;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class AccountValidationConfig {
|
public class AccountValidationConfig {
|
||||||
|
|
||||||
|
|
@ -49,6 +49,7 @@ public class AccountValidationConfig {
|
||||||
addImdg.accept(IMDGDistributedNames.Map_ServiceStatusDictionary);
|
addImdg.accept(IMDGDistributedNames.Map_ServiceStatusDictionary);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_AccountTypeDictionary);
|
addImdg.accept(IMDGDistributedNames.Map_AccountTypeDictionary);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_CurrencyCodeDictionary);
|
addImdg.accept(IMDGDistributedNames.Map_CurrencyCodeDictionary);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_Currency);
|
||||||
return new ValidatorImpl<>(context,
|
return new ValidatorImpl<>(context,
|
||||||
IdPresentRule.instance("companyId",
|
IdPresentRule.instance("companyId",
|
||||||
CorrespondentAccountNewRequest::getCompanyId,
|
CorrespondentAccountNewRequest::getCompanyId,
|
||||||
|
|
@ -116,6 +117,7 @@ public class AccountValidationConfig {
|
||||||
AccountError.DictionaryNotFound,
|
AccountError.DictionaryNotFound,
|
||||||
false
|
false
|
||||||
),
|
),
|
||||||
|
CurrencyCodeValidationRule.get(AccountError.CurrencyNotFound),
|
||||||
new SameAccountValidationRule<>(AccountType.Corr, CorrespondentAccountNewRequest::getAccount)
|
new SameAccountValidationRule<>(AccountType.Corr, CorrespondentAccountNewRequest::getAccount)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ public enum AccountError implements IErrorEnumId {
|
||||||
AccountDepoTypeRequired(5025L),
|
AccountDepoTypeRequired(5025L),
|
||||||
AccountIsNotACurrency(5026L), // Счет %S не валютный
|
AccountIsNotACurrency(5026L), // Счет %S не валютный
|
||||||
TradingClearingRegistryNotFound(3022L),
|
TradingClearingRegistryNotFound(3022L),
|
||||||
|
CurrencyNotFound(1016L),
|
||||||
;
|
;
|
||||||
|
|
||||||
private final Long id;
|
private final Long id;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
package ru.spcex.clearing.account.service;
|
package ru.spcex.clearing.account.service;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
import org.apache.kafka.clients.consumer.Consumer;
|
import org.apache.kafka.clients.consumer.Consumer;
|
||||||
import org.apache.kafka.clients.producer.Producer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
@ -29,22 +33,19 @@ import ru.spcex.clearing.platform.messaging.service.Status;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||||
import ru.spcex.clearing.validation.common.ValidationHelper;
|
import ru.spcex.clearing.validation.common.ValidationHelper;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
|
import ru.spcex.platform.enumeration.DepoAccountType;
|
||||||
|
import ru.spcex.platform.enumeration.Sender;
|
||||||
|
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||||
|
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.api.ImdgTransaction;
|
import ru.spcex.platform.imdg.api.ImdgTransaction;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
import ru.spcex.platform.imdg.validation.Stored;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class AccountService extends QueueConsumer implements InitializingBean {
|
public class AccountService extends QueueConsumer implements InitializingBean {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
@ -130,29 +131,26 @@ public class AccountService extends QueueConsumer implements InitializingBean {
|
||||||
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
||||||
if (requestInfoUpdate != null) return requestInfoUpdate;
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
|
||||||
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, accountNewRequestValidator);
|
IValidator validator = accountNewRequestValidator.apply(userRequest.getRequestPayload());
|
||||||
|
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, (r) -> validator);
|
||||||
if (requestInfoUpdate != null) return requestInfoUpdate;
|
if (requestInfoUpdate != null) return requestInfoUpdate;
|
||||||
|
|
||||||
CorrespondentAccountNewRequest req = userRequest.getRequestPayload();
|
CorrespondentAccountNewRequest req = userRequest.getRequestPayload();
|
||||||
String currency = req.getCurrency() == null ? CurrencyCode.RUB.getKey() : req.getCurrency();
|
Currency currency = validator.getStored(Stored.currency);
|
||||||
Currency currencyByCode = currencyMap.getFirstObjectByPredicate(
|
|
||||||
currencyMap.predicateBuilder().equals("currencyCode", currency)
|
|
||||||
);
|
|
||||||
Long currencyCodeId = CurrencyCode.RUB.getKey().equals(currency) ? 810 : currencyByCode.getId();
|
|
||||||
|
|
||||||
Instant now = Instant.now();
|
Instant now = Instant.now();
|
||||||
Account account = new Account();
|
Account account = new Account();
|
||||||
account.setCompanyId(req.getCompanyId());
|
account.setCompanyId(req.getCompanyId());
|
||||||
account.setAccount(req.getAccount());
|
account.setAccount(req.getAccount());
|
||||||
if (AccountType.Info.equalsByKey(req.getAccountType())) {
|
if (AccountType.Info.equalsByKey(req.getAccountType())) {
|
||||||
Long infoSequenceId = informationAccountService.accountNextId(currency, currencyCodeId);
|
Long infoSequenceId = informationAccountService.accountNextId(currency.getCurrencyCode(), currency.getId());
|
||||||
|
|
||||||
String accountValue = informationAccountService.generateInfoAccount(currencyCodeId, infoSequenceId);
|
String accountValue = informationAccountService.generateInfoAccount(currency.getId(), infoSequenceId);
|
||||||
log.trace("New info-account SequenceId={} account={}", infoSequenceId, accountValue);
|
log.trace("New info-account SequenceId={} account={}", infoSequenceId, accountValue);
|
||||||
account.setAccount(accountValue);
|
account.setAccount(accountValue);
|
||||||
}
|
}
|
||||||
account.setAccountType(req.getAccountType());
|
account.setAccountType(req.getAccountType());
|
||||||
account.setCurrency(currency);
|
account.setCurrency(currency.getCurrencyCode());
|
||||||
if (req.getStatus() == null) {
|
if (req.getStatus() == null) {
|
||||||
account.setStatus(WorkflowStatus.Active.getKey());
|
account.setStatus(WorkflowStatus.Active.getKey());
|
||||||
log.trace("Status not set in request. Use default: {}", account.getStatus());
|
log.trace("Status not set in request. Use default: {}", account.getStatus());
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@ package ru.clearing.classes.statics.data.sdf;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import ru.clearing.classes.ConstSerializable;
|
import ru.clearing.classes.ConstSerializable;
|
||||||
import ru.clearing.classes.statics.data.api.WithCurrency;
|
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.WithCurrency;
|
||||||
import ru.spcex.platform.classes.base.interfaces.WithFileName;
|
import ru.spcex.platform.classes.base.interfaces.WithFileName;
|
||||||
import ru.spcex.platform.classes.base.interfaces.WithMarket;
|
import ru.spcex.platform.classes.base.interfaces.WithMarket;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ package ru.clearing.classes.statics.data.sdf;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import ru.clearing.classes.ConstSerializable;
|
import ru.clearing.classes.ConstSerializable;
|
||||||
import ru.clearing.classes.statics.data.api.WithCurrency;
|
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.WithCurrency;
|
||||||
import ru.spcex.platform.classes.base.interfaces.WithFileName;
|
import ru.spcex.platform.classes.base.interfaces.WithFileName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ package ru.clearing.classes.statics.data.sdf;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import ru.clearing.classes.ConstSerializable;
|
import ru.clearing.classes.ConstSerializable;
|
||||||
import ru.clearing.classes.statics.data.api.WithCurrency;
|
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.WithCurrency;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ДФ-57 Список транзакций о списании/зачислении за период по всем счетам (ТБС и КС)
|
* ДФ-57 Список транзакций о списании/зачислении за период по всем счетам (ТБС и КС)
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,6 @@ import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistrySplitDep
|
||||||
import ru.spcex.clearing.service.validation.AnltAccLoad;
|
import ru.spcex.clearing.service.validation.AnltAccLoad;
|
||||||
import ru.spcex.clearing.service.validation.ClrngValidationStored;
|
import ru.spcex.clearing.service.validation.ClrngValidationStored;
|
||||||
import ru.spcex.clearing.service.validation.CompanyByTradingCodeValidationRule;
|
import ru.spcex.clearing.service.validation.CompanyByTradingCodeValidationRule;
|
||||||
import ru.spcex.clearing.service.validation.CurrencyCodeValidationRule;
|
|
||||||
import ru.spcex.clearing.service.validation.ExecutionDepositValidationRule;
|
import ru.spcex.clearing.service.validation.ExecutionDepositValidationRule;
|
||||||
import ru.spcex.clearing.service.validation.IdentificationFundsValidationRule;
|
import ru.spcex.clearing.service.validation.IdentificationFundsValidationRule;
|
||||||
import ru.spcex.clearing.service.validation.MarketIsUValidationRule;
|
import ru.spcex.clearing.service.validation.MarketIsUValidationRule;
|
||||||
|
|
@ -80,6 +79,7 @@ import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
import ru.spcex.platform.imdg.validation.LogPrefixId;
|
import ru.spcex.platform.imdg.validation.LogPrefixId;
|
||||||
|
import ru.spcex.platform.imdg.validation.rule.CurrencyCodeValidationRule;
|
||||||
import ru.spcex.platform.imdg.validation.rule.PresentById;
|
import ru.spcex.platform.imdg.validation.rule.PresentById;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
@ -279,7 +279,7 @@ public class ValidationConfig {
|
||||||
Sdf57ValidationRule.CompanyDebOrCredPresent,
|
Sdf57ValidationRule.CompanyDebOrCredPresent,
|
||||||
Sdf57ValidationRule.AccountDebOrCredPresent,
|
Sdf57ValidationRule.AccountDebOrCredPresent,
|
||||||
Sdf57ValidationRule.AccountAndCompanyMatch,
|
Sdf57ValidationRule.AccountAndCompanyMatch,
|
||||||
CurrencyCodeValidationRule.INSTANCE
|
CurrencyCodeValidationRule.get(ClearingError.CompanyDebitCheck)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -321,7 +321,7 @@ public class ValidationConfig {
|
||||||
Sdf01NewValidationRule.CompanyPresent,
|
Sdf01NewValidationRule.CompanyPresent,
|
||||||
Sdf01NewValidationRule.AccountType,
|
Sdf01NewValidationRule.AccountType,
|
||||||
Sdf01NewValidationRule.AccountPresent,
|
Sdf01NewValidationRule.AccountPresent,
|
||||||
CurrencyCodeValidationRule.INSTANCE,
|
CurrencyCodeValidationRule.get(ClearingError.CompanyDebitCheck),
|
||||||
Sdf01NewValidationRule.DatIsCurrentDt
|
Sdf01NewValidationRule.DatIsCurrentDt
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
@ -365,9 +365,7 @@ public class ValidationConfig {
|
||||||
Sdf06NewValidationRule.Session,
|
Sdf06NewValidationRule.Session,
|
||||||
Sdf06NewValidationRule.Balance,
|
Sdf06NewValidationRule.Balance,
|
||||||
Sdf06NewValidationRule.TcrPresent,
|
Sdf06NewValidationRule.TcrPresent,
|
||||||
CurrencyCodeValidationRule.INSTANCE
|
CurrencyCodeValidationRule.get(ClearingError.CompanyDebitCheck)
|
||||||
|
|
||||||
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -506,6 +504,7 @@ public class ValidationConfig {
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
|
ctx.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_Account, imdgAccount);
|
ctx.addImdg(IMDGDistributedNames.Map_Account, imdgAccount);
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry);
|
ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry);
|
||||||
|
ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistryList, imdgTradingClearingRegistryList);
|
||||||
return new ValidatorImpl<>(ctx,
|
return new ValidatorImpl<>(ctx,
|
||||||
PaymentOutboundValidationRule.RequiredFields,
|
PaymentOutboundValidationRule.RequiredFields,
|
||||||
IdPresentRule.instance("senderId",
|
IdPresentRule.instance("senderId",
|
||||||
|
|
|
||||||
|
|
@ -55,8 +55,12 @@ public class Sdf54Creator {
|
||||||
public SDf54 create(PaymentInstruction paymentInstruction) {
|
public SDf54 create(PaymentInstruction paymentInstruction) {
|
||||||
Instant now = Instant.now();
|
Instant now = Instant.now();
|
||||||
String c_acc_cred = null;
|
String c_acc_cred = null;
|
||||||
Account anltAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s'"
|
Account anltAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and currency = '%s'"
|
||||||
.formatted(AccountType.Anlt.getKey(), Status.Active.getKey()));
|
.formatted(
|
||||||
|
AccountType.Anlt.getKey(),
|
||||||
|
Status.Active.getKey(),
|
||||||
|
paymentInstruction.getCreditLeg_currencyCode()
|
||||||
|
));
|
||||||
// c_acc_deb = c_acc_deb == null ? paymentInstruction.getCreditLeg_account() : c_acc_deb;
|
// c_acc_deb = c_acc_deb == null ? paymentInstruction.getCreditLeg_account() : c_acc_deb;
|
||||||
c_acc_cred = c_acc_cred == null ? paymentInstruction.getDebitLeg_account() : c_acc_cred;
|
c_acc_cred = c_acc_cred == null ? paymentInstruction.getDebitLeg_account() : c_acc_cred;
|
||||||
|
|
||||||
|
|
@ -125,8 +129,13 @@ public class Sdf54Creator {
|
||||||
sDf54.setAcc_kr_1(paymentInstruction.getDebitLeg_account());
|
sDf54.setAcc_kr_1(paymentInstruction.getDebitLeg_account());
|
||||||
|
|
||||||
{
|
{
|
||||||
Account prcCorrAcc = accountImdg.getFirstObjectBySQL("companyId=%d and accountType = '%s' and status = '%s'"
|
Account prcCorrAcc = accountImdg.getFirstObjectBySQL("companyId=%d and accountType = '%s' and status = '%s' and currency = '%s'"
|
||||||
.formatted(Sender.Prc.getId(), AccountType.Bank.getKey(), Status.Active.getKey()));
|
.formatted(
|
||||||
|
Sender.Prc.getId(),
|
||||||
|
AccountType.Bank.getKey(),
|
||||||
|
Status.Active.getKey(),
|
||||||
|
paymentInstruction.getCreditLeg_currencyCode()
|
||||||
|
));
|
||||||
if (prcCorrAcc == null) {
|
if (prcCorrAcc == null) {
|
||||||
log.warn("Account for PRC CORR not found");
|
log.warn("Account for PRC CORR not found");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ import ru.spcex.platform.imdg.api.ImdgId;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
|
import ru.spcex.platform.imdg.validation.Stored;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||||
|
|
@ -162,7 +163,7 @@ public class Sdf06Executor {
|
||||||
}
|
}
|
||||||
Company company = validator.getStored(ValidationStored.Sdf06Company);
|
Company company = validator.getStored(ValidationStored.Sdf06Company);
|
||||||
TradingClearingRegistry tcr = validator.getStored(ValidationStored.Sdf06Tcr);
|
TradingClearingRegistry tcr = validator.getStored(ValidationStored.Sdf06Tcr);
|
||||||
Currency currency = validator.getStored(ValidationStored.currency);
|
Currency currency = validator.getStored(Stored.currency);
|
||||||
//проверка существует ли statement пока убрал
|
//проверка существует ли statement пока убрал
|
||||||
Statement stmt = createStatementBySdf06(sDf06,
|
Statement stmt = createStatementBySdf06(sDf06,
|
||||||
company.getId(),
|
company.getId(),
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,19 @@
|
||||||
package ru.spcex.clearing.service.validation;
|
package ru.spcex.clearing.service.validation;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList;
|
||||||
import ru.spcex.clearing.error.ClearingError;
|
import ru.spcex.clearing.error.ClearingError;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.payment.PIClearingOutbondActionNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.payment.PIClearingOutbondActionNewRequest;
|
||||||
|
import ru.spcex.clearing.service.AnltSearcher;
|
||||||
|
import ru.spcex.clearing.service.TcrSearcher;
|
||||||
import ru.spcex.platform.enumeration.AccountType;
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
|
@ -15,9 +21,6 @@ import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.validation.IValidationRule;
|
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public enum PaymentOutboundValidationRule implements IValidationRule<ImdgValidationContext<PIClearingOutbondActionNewRequest>> {
|
public enum PaymentOutboundValidationRule implements IValidationRule<ImdgValidationContext<PIClearingOutbondActionNewRequest>> {
|
||||||
RequiredFields() {
|
RequiredFields() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -101,8 +104,20 @@ public enum PaymentOutboundValidationRule implements IValidationRule<ImdgValidat
|
||||||
Account accCred = context.getStoredObject(ValidationStored.PIOutboundAccountCred);
|
Account accCred = context.getStoredObject(ValidationStored.PIOutboundAccountCred);
|
||||||
Company addressee = context.getStoredObject(ValidationStored.PIOOutboundAddressee);
|
Company addressee = context.getStoredObject(ValidationStored.PIOOutboundAddressee);
|
||||||
Imdg<TradingClearingRegistry> tcrImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
Imdg<TradingClearingRegistry> tcrImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||||
TradingClearingRegistry tcr = tcrImdg.getFirstObjectBySQL("moneyAccountId = '%d' and companyId = %d"
|
Imdg<TradingClearingRegistryList> tcrListImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class);
|
||||||
.formatted(accCred.getId(), addressee.getId()));
|
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
|
Imdg<Account> accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class);
|
||||||
|
TcrSearcher tcrSearcher = new TcrSearcher(tcrImdg, tcrListImdg, companyImdg, accountImdg);
|
||||||
|
AnltSearcher.AnltSearch srchRes = tcrSearcher.searchByAccountId(accCred.getId(), accCred.getCurrency());
|
||||||
|
if (!srchRes.isFound()) {
|
||||||
|
return Optional.of(srchRes.getError());
|
||||||
|
}
|
||||||
|
if (srchRes.getCompany() != null) {
|
||||||
|
if (!Objects.equals(srchRes.getCompany().getId(), addressee.getId())) {
|
||||||
|
return of(ClearingError.AccountIsNotMatchedWithCompany, accCred.getId(), addressee.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TradingClearingRegistry tcr = srchRes.getTcr();
|
||||||
if (tcr == null) {
|
if (tcr == null) {
|
||||||
return of(ClearingError.RecordNotFound, "TCR");
|
return of(ClearingError.RecordNotFound, "TCR");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
package ru.spcex.platform.classes.base.interfaces;
|
||||||
|
|
||||||
|
public interface WithCurrency {
|
||||||
|
String currency();
|
||||||
|
}
|
||||||
|
|
@ -9,5 +9,7 @@ public enum Stored {
|
||||||
*/
|
*/
|
||||||
PresentById,
|
PresentById,
|
||||||
|
|
||||||
AnltAccount
|
AnltAccount,
|
||||||
|
|
||||||
|
currency
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
package ru.spcex.platform.imdg.validation.rule;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.WithCurrency;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
|
import ru.spcex.platform.imdg.validation.Stored;
|
||||||
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IErrorEnumId;
|
||||||
|
import ru.spcex.platform.utils.text.TextUtil;
|
||||||
|
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
|
|
||||||
|
public class CurrencyCodeValidationRule implements IValidationRule<ImdgValidationContext<WithCurrency>> {
|
||||||
|
public static CurrencyCodeValidationRule get(IErrorEnumId err) {
|
||||||
|
return new CurrencyCodeValidationRule(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final IErrorEnumId errEnum;
|
||||||
|
|
||||||
|
public CurrencyCodeValidationRule(IErrorEnumId errEnum) {
|
||||||
|
this.errEnum = errEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<WithCurrency> context) {
|
||||||
|
WithCurrency obj = context.getValidatedObject();
|
||||||
|
if (TextUtil.isEmpty(obj.currency())) {
|
||||||
|
return of(errEnum, "null");
|
||||||
|
}
|
||||||
|
Imdg<SpcexObjectBase> curImdg = context.obtainMap(IMDGDistributedNames.Map_Currency, SpcexObjectBase.class);
|
||||||
|
ImdgPredicateBuilder pb = curImdg.predicateBuilder();
|
||||||
|
SpcexObjectBase currency = curImdg.getFirstObjectByPredicate(
|
||||||
|
pb.equals("currencyCode", obj.currency())
|
||||||
|
);
|
||||||
|
if (currency == null) {
|
||||||
|
return of(errEnum, obj.currency());
|
||||||
|
}
|
||||||
|
context.storeObject(Stored.currency, currency);
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue