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 1bbcb9f78..bc33db303 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 @@ -23,6 +23,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; @@ -92,14 +93,15 @@ public class AccountValidationConfig { AccountError.RequiredFieldEmpty, AccountError.DictionaryNotFound, accountType -> { - if (AccountType.Corr.equalsByKey(accountType.getCode())) return null; + if (IEnumKey.contains(accountType.getCode(), AccountType.Corr, AccountType.Info)) return null; return AccountError.WrongFieldValue; }).withMessageDecorator((causeEmpty, errorCode, fieldName, fieldValue) -> { if (errorCode == AccountError.WrongFieldValue) return DictionaryPresentRule.FIELD_NOT_FOUND_DECORATOR_1.decorator(causeEmpty, errorCode, fieldName, fieldValue); else return DictionaryPresentRule.DICTIONARY_NOT_FOUND_DECORATOR_2.decorator(causeEmpty, errorCode, fieldName, fieldValue); - }), + } + ), new SameAccountValidationRule<>(AccountType.Corr, CorrespondentAccountNewRequest::getAccount) ); }; 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 758557528..974494327 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 @@ -9,6 +9,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.account.ClearingAccount; +import ru.clearing.classes.statics.data.account.DepoAccount; +import ru.clearing.classes.statics.data.account.InformationAccount; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.company.relation.Relation; import ru.spcex.clearing.account.errors.AccountError; @@ -17,22 +20,15 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.account.CorrespondentAccountNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.account.CorrespondentAccountUpdateRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdf01Request; -import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdfRequestPart; import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountTerminationRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.balance.AccountSdfToStatementRequestPart; -import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonIdRequest; -import ru.spcex.clearing.platform.messaging.serialization.LogFormatter; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.platform.messaging.service.Status; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.validation.common.ValidationHelper; -import ru.spcex.platform.enumeration.ClearingCategory; -import ru.spcex.platform.enumeration.ServiceStatus; -import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgTransaction; @@ -44,9 +40,8 @@ import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.validation.IValidator; import java.time.Instant; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; +import java.util.Map; import java.util.function.Function; @Service @@ -54,6 +49,9 @@ public class AccountService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); private final ImdgProvider imdgProvider; private final Imdg accountMap; + private final Imdg informationAccountMap; + private final Imdg depoAccountMap; + private final Imdg clearingAccountMap; private final Imdg clearingMemberCategoryMap; private final Imdg relationMap; private final KafkaSender kafkaSender; @@ -89,6 +87,9 @@ public class AccountService extends QueueConsumer implements InitializingBean { this.relationMap = imdgProvider.getImdg( IMDGDistributedNames.Map_Relation, Relation.class ); + this.informationAccountMap = imdgProvider.getImdg(IMDGDistributedNames.Map_InformationAccount, InformationAccount.class); + this.depoAccountMap = imdgProvider.getImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class); + this.clearingAccountMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class); this.kafkaSender = kafkaSender; this.messageResolver = messageResolver; this.userRoleVerification = userRoleVerification; @@ -147,10 +148,56 @@ public class AccountService extends QueueConsumer implements InitializingBean { if (requestInfoUpdate != null) return requestInfoUpdate; Long newId = accountMap.insert(account); + + if (AccountType.Corr.equalsByKey(account.getAccountType())) { + // default, дополнительные таблицы не требуются + } else if (AccountType.Info.equalsByKey(account.getAccountType())) + makeInfoPart(account); + else if (AccountType.Depo.equalsByKey(account.getAccountType())) + makeDepoPart(account); + else if (AccountType.Clrn.equalsByKey(account.getAccountType())) + makeClrnPart(account); + else { + log.warn("Unexpected AccountType={}. Do not create additional record to other table's", account.getAccountType()); + } + log.debug("successfully processed, new account id {}", newId); return null; } + protected void makeInfoPart(Account account) { + InformationAccount infoAcc = new InformationAccount(); + infoAcc.setAccountId(account.getId()); + Account firstAccountAntl = accountMap.getFirstObjectByFieldValues(Map.of( + "companyId", Sender.One.getId(), + "accountType", AccountType.Anlt.getKey() + )); + if (firstAccountAntl == null) { + log.warn("Can not find 1 ANTL account for fill information ClearingAccountId."); + } else { + infoAcc.setClearingAccountId(firstAccountAntl.getId()); + } + infoAcc.setCompanyId(account.getCompanyId()); + Long infoId = informationAccountMap.insert(infoAcc); + log.debug("For account id={} make InformationAccount id={}", account.getId(), infoId); + } + + protected void makeDepoPart(Account account) { + DepoAccount depoAcc = new DepoAccount(); + depoAcc.setAccountId(account.getId()); + depoAcc.setCompanyId(account.getCompanyId()); + Long infoId = depoAccountMap.insert(depoAcc); + log.debug("For account id={} make DepoAccount id={}", account.getId(), infoId); + } + + protected void makeClrnPart(Account account) { + ClearingAccount clnrAcc = new ClearingAccount(); + clnrAcc.setAccountId(account.getId()); + clnrAcc.setCompanyId(account.getCompanyId()); + Long infoId = clearingAccountMap.insert(clnrAcc); + log.debug("For account id={} make ClearingAccount id={}", account.getId(), infoId); + } + public RequestInfoUpdate correspondentAccountUpdate(BaseRequest userRequest) { log.debug("CorrespondentAccountUpdateRequest received");