From e8fda5a8f8c6d452541dd46fb4c6a24129065b9d Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 22 Apr 2024 17:10:41 +0300 Subject: [PATCH] ANLT & TCR search --- .../clearing/config/ValidationConfig.java | 5 + .../spcex/clearing/service/AnltSearcher.java | 95 +++++++++++++++--- .../spcex/clearing/service/TcrSearcher.java | 99 +++++++++++++++++++ .../service/builder/RegistryBuilder.java | 43 +++++--- .../service/executors/Sdf01Executor.java | 1 + .../service/executors/Sdf06Executor.java | 5 +- .../service/executors/Sdf57Executor.java | 3 +- .../validation/Sdf06NewValidationRule.java | 69 +++++++------ 8 files changed, 252 insertions(+), 68 deletions(-) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/TcrSearcher.java diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java index 00ba5eb00..bd8bdcc9f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java @@ -21,6 +21,7 @@ import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList; import ru.clearing.classes.statics.data.sdf.SDf01; import ru.clearing.classes.statics.data.sdf.SDf06; import ru.clearing.classes.statics.data.sdf.SDf08; @@ -103,6 +104,7 @@ public class ValidationConfig { Imdg imdgSecurity; Imdg imdgMoneyMarketSecurity; Imdg imdgTradingClearingRegistry; + Imdg imdgTradingClearingRegistryList; Imdg imdgSession; Imdg imdgSectionDictionary; Imdg imdgStatement; @@ -124,6 +126,8 @@ public class ValidationConfig { this.imdgAccountBalance = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class); this.imdgSecurity = imdgProvider.getImdg(IMDGDistributedNames.Map_Security, Security.class); this.imdgTradingClearingRegistry = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + this.imdgTradingClearingRegistryList + = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class); this.imdgSession = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.imdgSectionDictionary = imdgProvider.getImdg(IMDGDistributedNames.Map_SectionDictionary, SectionDictionary.class); this.imdgMoneyMarketSecurity = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class); @@ -350,6 +354,7 @@ public class ValidationConfig { context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry); context.addImdg(IMDGDistributedNames.Map_Session, imdgSession); context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry); + context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistryList, imdgTradingClearingRegistryList); context.addImdg(IMDGDistributedNames.Map_Currency, imdgCurrency); context.setLogPrefix(LogPrefixId.INSTANCE); return new ValidatorImpl<>(context, diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/AnltSearcher.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/AnltSearcher.java index a23a7e0cf..011595d90 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/AnltSearcher.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/AnltSearcher.java @@ -1,5 +1,7 @@ package ru.spcex.clearing.service; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -7,9 +9,11 @@ import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; 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.imdg.IMDGDistributedNames; import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.CurrencyCode; import ru.spcex.platform.enumeration.ServiceStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -19,25 +23,25 @@ import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IEnumId; import ru.spcex.platform.utils.text.TextUtil; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - @Component public class AnltSearcher { private Logger log = LoggerFactory.getLogger(getClass()); private final Imdg tradingClearingRegistryImdg; private final Imdg companyImdg; private final Imdg accountImdg; + private Imdg tcrListImdg; @Autowired public AnltSearcher(ImdgProvider imdgProvider) { this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); + this.tcrListImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class); } - public AnltSearcher(Imdg tcrImdg, Imdg companyImdg, Imdg accountImdg) { + public AnltSearcher(Imdg tcrImdg, Imdg tcrListImdg, Imdg companyImdg, Imdg accountImdg) { this.tradingClearingRegistryImdg = tcrImdg; + this.tcrListImdg = tcrListImdg; this.companyImdg = companyImdg; this.accountImdg = accountImdg; } @@ -47,33 +51,58 @@ public class AnltSearcher { void log(IEnumId subject, Object... args); } + public AnltSearch loadByAnlt(String comment) { + return loadByAnlt(comment, CurrencyCode.RUB.getKey()); + } + + public AnltSearch loadByAnlt(String comment, String currencyCode) { String commentTcrStripped = getTkrCodeFromComment(comment); // AnltLogger localLogger = (subject, args) -> log.debug("stmt.id={} comment='{}' error: {}", statementId, commentTcrStripped, messageResolver.resolve(new EnumMessage(subject, args))); if (commentTcrStripped == null) { return new AnltSearch(ClearingError.AccountNotFound, "comment not contain TCR"); } ImdgPredicateBuilder pb = tradingClearingRegistryImdg.predicateBuilder(); - ImdgPredicate tcrPredicate = pb.and( - pb.equals("code", commentTcrStripped), - pb.or( - pb.equals("status", ServiceStatus.Active.getKey()), - pb.equals("status", ServiceStatus.Reopened.getKey()) - ) + ImdgPredicate statusPrdct = pb.or( + pb.equals("status", ServiceStatus.Active.getKey()), + pb.equals("status", ServiceStatus.Reopened.getKey()) ); - + ImdgPredicate tcrPredicate = pb.and( + pb.equals("code", commentTcrStripped), + statusPrdct + ); + TradingClearingRegistryList tcrList = null; TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByPredicate(tcrPredicate); if (tcr == null) { return new AnltSearch(ClearingError.TCRegistryNotFound, commentTcrStripped); } - if (tcr.getMoneyAccountId() == null) { - return new AnltSearch(ClearingError.WrongField, "moneyAccountId"); + Account infoAcc = null; + if (CurrencyCode.isRub(currencyCode)) { + if (tcr.getMoneyAccountId() == null) { + return new AnltSearch(ClearingError.WrongField, "moneyAccountId"); + } + infoAcc = accountImdg.getSingleObjectByID(tcr.getMoneyAccountId()); + } else { + tcrList = tcrListImdg.getSingleObjectByPredicate( + pb.and( + pb.equals("currency", currencyCode), + pb.equals("tradingClearingRegistryId", tcr.getId()), + statusPrdct + ) + ); + if (tcrList == null) { + return new AnltSearch(ClearingError.TCRegistryNotFound, "" + .formatted(comment, currencyCode)); + } + infoAcc = accountImdg.getSingleObjectByID(tcrList.getAccountId()); } - Account infoAcc = accountImdg.getSingleObjectByID(tcr.getMoneyAccountId()); if (infoAcc == null) { - return new AnltSearch(ClearingError.AccountNotFound, "moneyAccountId"); + return new AnltSearch(ClearingError.AccountNotFoundB, + " currency %s".formatted( + tcr.getId(), tcr.getMoneyAccountId(), currencyCode + )); } if (!infoAcc.getAccountType().equals(AccountType.Info.getKey())) { @@ -84,7 +113,7 @@ public class AnltSearcher { if (company == null) { return new AnltSearch(ClearingError.CompanyNotFoundB, tcr.getCompanyId()); } - return new AnltSearch(infoAcc, company, tcr); + return new AnltSearch(infoAcc, company, tcr, tcrList, currencyCode); } private static final Pattern tcrPattern = Pattern.compile("ТКР.*?([0-9A-Z-]{12})"); @@ -107,15 +136,33 @@ public class AnltSearcher { private Account account; private Company company; private TradingClearingRegistry tcr; + private TradingClearingRegistryList tcrList; + private String currency; public AnltSearch(IEnumId errSubject, Object... args) { this.error = new EnumMessage(errSubject, args); } + public AnltSearch() { + } + public AnltSearch(Account account, Company company, TradingClearingRegistry tcr) { this.account = account; this.company = company; this.tcr = tcr; + this.currency = CurrencyCode.RUB.getKey(); + } + + public AnltSearch(Account account, + Company company, + TradingClearingRegistry tcr, + TradingClearingRegistryList tcrList, + String currency) { + this.account = account; + this.company = company; + this.tcr = tcr; + this.tcrList = tcrList; + this.currency = CurrencyCode.RUB.getKey(); } public boolean isFound() { @@ -153,5 +200,21 @@ public class AnltSearcher { public void setTcr(TradingClearingRegistry tcr) { this.tcr = tcr; } + + public TradingClearingRegistryList getTcrList() { + return tcrList; + } + + public void setTcrList(TradingClearingRegistryList tcrList) { + this.tcrList = tcrList; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/TcrSearcher.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/TcrSearcher.java new file mode 100644 index 000000000..cf128a442 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/TcrSearcher.java @@ -0,0 +1,99 @@ +package ru.spcex.clearing.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.company.Company; +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.imdg.IMDGDistributedNames; +import ru.spcex.platform.enumeration.CurrencyCode; +import ru.spcex.platform.enumeration.ServiceStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; + +@Component +public class TcrSearcher { + private Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg tcrImdg; + private final Imdg tcrListImdg; + private final Imdg companyImdg; + private final Imdg accountImdg; + + + @Autowired + public TcrSearcher(ImdgProvider imdgProvider) { + this.tcrImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_TradingClearingRegistry, + TradingClearingRegistry.class); + this.tcrListImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_TradingClearingRegistryList, + TradingClearingRegistryList.class); + this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); + } + + public TcrSearcher(Imdg tcrImdg, + Imdg tcrListImdg, + Imdg companyImdg, + Imdg accountImdg) { + this.tcrImdg = tcrImdg; + this.tcrListImdg = tcrListImdg; + this.companyImdg = companyImdg; + this.accountImdg = accountImdg; + } + + public AnltSearcher.AnltSearch loadByCurrencyAccountId(Long accountId, String currency) { + AnltSearcher.AnltSearch srchRes = new AnltSearcher.AnltSearch(); + ImdgPredicateBuilder pb = tcrImdg.predicateBuilder(); + ImdgPredicate sttsPrdct = pb.or( + pb.equals("status", ServiceStatus.Active.getKey()), + pb.equals("status", ServiceStatus.Reopened.getKey()) + ); + //fixme BASED ON CURRENCY + TradingClearingRegistry tcr = tcrImdg.getSingleObjectByPredicate( + pb.and( + pb.equals("moneyAccountId", accountId), + sttsPrdct + ) + ); + + if (tcr != null) { + srchRes.setCurrency(CurrencyCode.RUB.getKey()); + } else { + TradingClearingRegistryList tcrList = tcrListImdg.getSingleObjectByPredicate( + pb.and( + pb.equals("accountId", accountId), + sttsPrdct + ) + ); + if (tcrList == null) { + return new AnltSearcher.AnltSearch(ClearingError.TCRegistryNotFound, " equitySecurityImdg; private final Imdg currencyPairSecurityImdg; private final Imdg currencyImdg; + private final TcrSearcher tcrSrcher; + private String currency; public static RegistryBuilder builder(ImdgProvider imdgProvider) { @@ -56,6 +63,7 @@ public class RegistryBuilder { this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); this.currencyPairSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class); this.currencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class); + this.tcrSrcher = new TcrSearcher(imdgProvider); } public RegistryBuilder statement(Statement statement) { @@ -73,6 +81,11 @@ public class RegistryBuilder { return this; } + public RegistryBuilder loadTcrForCurrency(String currency) { + this.currency = currency; + return this; + } + public RegistryBuilder designation(RegistryDesignation designation) { this.designation = designation; return this; @@ -103,15 +116,13 @@ public class RegistryBuilder { rgs.setRegistryUnit(RegistryUnit.T.getKey()); rgs.setRegistryCode(RegistryUtil.clearingCode(rgs)); - Collection tcrsByAccount = tradingClearingRegistryImdg.getCollectionObjectsByFieldValues(Map.of( - "moneyAccountId", account.getId(), - "companyId", company.getId(), - "status", ServiceStatus.Active.getKey() - )); - if (!tcrsByAccount.isEmpty()) { - TradingClearingRegistry tcr = tcrsByAccount.iterator().next(); - rgs.setTradingClearingRegistryId(tcr.getId()); - rgs.setTradingClearingRegistry(tcr.getCode()); + if (currency != null) { + AnltSearcher.AnltSearch anltSearch = tcrSrcher.loadByCurrencyAccountId(account.getId(), currency); + if (anltSearch.isFound()) { + TradingClearingRegistry tcr = anltSearch.getTcr(); + rgs.setTradingClearingRegistryId(tcr.getId()); + rgs.setTradingClearingRegistry(tcr.getCode()); + } } rgs.setRegistryStatus(RegistryStatus.PROC.getKey()); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java index 91decea8b..ffd91e829 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java @@ -180,6 +180,7 @@ public class Sdf01Executor extends AbstractExecutor { .company(company) .account(account) .designation(RegistryDesignation.A) + .loadTcrForCurrency(sdf01.getCurr_code()) .build(); calcBalance(rgs, stmt); Registry registryB = copyRegB(rgs); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java index b70c6d293..6b988bf17 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java @@ -40,7 +40,6 @@ import ru.spcex.clearing.service.schedule.TradingTimeService; import ru.spcex.clearing.service.validation.Sdf06NewValidationRule; import ru.spcex.clearing.service.validation.ValidationStored; import ru.spcex.platform.classes.base.SpcexObjectBase; -import ru.spcex.platform.enumeration.CurrencyCode; import ru.spcex.platform.enumeration.InOutDirection; import ru.spcex.platform.enumeration.InOutSDfType; import ru.spcex.platform.enumeration.OperationStatus; @@ -173,7 +172,7 @@ public class Sdf06Executor { processedApproved(stmt, sDf06, now, sdf07GroupId); if (tcr != null) { dmiService.setProcContract(tcr.getId(), - CurrencyCode.RUB.getKey(), //fixme??? + sDf06.getPay_val(), safeBD(sDf06.getSum()), sDf06.getNumber().toString()); Optional asts = assets.searchMoneyByAccAndCompany(company.getId(), tcr.getMoneyAccountId()); @@ -286,7 +285,7 @@ public class Sdf06Executor { processedApproved(stmt, sdf06, updatedTime); Optional tcr = searchTcrOnGatewayResponse(sdf06); dmiService.setProcContract(tcr.map(SpcexObjectBase::getId).orElse(null), - CurrencyCode.RUB.getKey(), //fixme??? + sdf06.getPay_val(), safeBD(sdf06.getSum()), sdf06.getNumber().toString() ); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java index 85fa61bd0..a48d95802 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java @@ -278,6 +278,7 @@ public class Sdf57Executor extends AbstractExecutor { .statement(stmt) .company(company) .account(account) + .loadTcrForCurrency(sdf57.getPay_val()) .designation(RegistryDesignation.A) .build(); calcBalance(registry, stmt, sdf57); @@ -418,7 +419,7 @@ public class Sdf57Executor extends AbstractExecutor { Account acc = stmtCmpAcc.account(); Optional asts = createRegistryIfNeeded.apply(stmtCmpAcc); if (accountIsAnlt(acc)) { - AnltSearcher.AnltSearch searchResult = anltSearcher.loadByAnlt(stmt.getComment()); + AnltSearcher.AnltSearch searchResult = anltSearcher.loadByAnlt(stmt.getComment(), sdf57.getPay_val()); if (searchResult.isFound()) { log.debug("stmt.id={} comment={} is anlt, loaded account.id={}/companyId={}", stmt.getId(), diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf06NewValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf06NewValidationRule.java index 195ecd6f3..30cd00265 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf06NewValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf06NewValidationRule.java @@ -1,35 +1,39 @@ package ru.spcex.clearing.service.validation; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import ru.clearing.classes.statics.data.account.Account; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.misc.Session; -import ru.clearing.classes.statics.data.registry.Registry; -import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; -import ru.clearing.classes.statics.data.sdf.SDf06; -import ru.spcex.clearing.error.ClearingError; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.service.AnltSearcher; -import ru.spcex.platform.enumeration.*; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; -import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; -import ru.spcex.platform.imdg.validation.ImdgValidationContext; -import ru.spcex.platform.utils.enumeration.EnumMessage; -import ru.spcex.platform.utils.number.BigDecimalUtil; -import ru.spcex.platform.utils.text.TextUtil; -import ru.spcex.platform.utils.validation.IValidationRule; - import java.math.BigDecimal; import java.util.Collection; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.function.Function; - +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.misc.Session; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList; +import ru.clearing.classes.statics.data.sdf.SDf06; +import ru.spcex.clearing.error.ClearingError; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.service.AnltSearcher; +import ru.spcex.clearing.service.TcrSearcher; +import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.InOutDirection; +import ru.spcex.platform.enumeration.RegistryStatus; +import ru.spcex.platform.enumeration.RegistryTradingParams; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.number.BigDecimalUtil; import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; +import ru.spcex.platform.utils.text.TextUtil; +import ru.spcex.platform.utils.validation.IValidationRule; public enum Sdf06NewValidationRule implements IValidationRule> { Fields() { @@ -165,7 +169,9 @@ public enum Sdf06NewValidationRule implements IValidationRule tcrImdg; + Imdg tcrListImdg; tcrImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + tcrListImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class); //если направление in то ТКР необязателен Function, Optional> err = msg -> { if (dir.equals(InOutDirection.in)) { @@ -177,16 +183,16 @@ public enum Sdf06NewValidationRule implements IValidationRule companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class); + Imdg accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class); if (AccountType.Anlt.getKey().equals(account.getAccountType())) { log.debug("account.id={} is ANLT", account.getId()); if (TextUtil.isEmpty(sdf06.getSpec())) { log.debug("ANLT couldn't find by account.id={} spec empty", account.getId()); return err.apply(of(ClearingError.TCRegistryNotFound, "")); } - Imdg companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class); - Imdg accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class); - AnltSearcher anltSearcher = new AnltSearcher(tcrImdg, companyImdg, accountImdg); - anltSrch = anltSearcher.loadByAnlt(sdf06.getSpec()); + AnltSearcher anltSearcher = new AnltSearcher(tcrImdg, tcrListImdg, companyImdg, accountImdg); + anltSrch = anltSearcher.loadByAnlt(sdf06.getSpec(), sdf06.getPay_val()); if (!anltSrch.isFound()) { log.debug("ANLT couldn't find by account.id={} by spec {}", account.getId(), sdf06.getSpec()); return err.apply(of(ClearingError.TCRegistryNotFound, sdf06.getSpec())); @@ -200,11 +206,10 @@ public enum Sdf06NewValidationRule implements IValidationRule