etreschenkov 2026-06-17 11:01:37 +03:00
parent 7492fbe823
commit 0aa623836f

View file

@ -100,9 +100,13 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule<ImdgVa
if (accountSymbols == null) {
return of(AccountError.DepoAccountNotFound, "depo_account");
}
Company company = context.getStoredObject(ClientCodeStoreObjects.COMPANY);
Imdg<DepoAccount> imdg = context.obtainMap(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class);
DepoAccount depoAccount = imdg.getFirstObjectByPredicate(
predicateBuilder.equals("accountId", accountSymbols.getAccountId())
predicateBuilder.and(
predicateBuilder.equals("accountId", accountSymbols.getAccountId()),
predicateBuilder.equals("companyId", company.getId())
)
);
if (depoAccount == null) {
context.storeObject(ClientCodeStoreObjects.DEPO_ACCOUNT, Optional.empty());
@ -122,12 +126,14 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule<ImdgVa
.toList();
Imdg<Account> accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class);
List<Account> validClrnAccs = new ArrayList<>();
Company company = context.getStoredObject(ClientCodeStoreObjects.COMPANY);
for (MoneyAccountMsgRequest moneyAccount : moneyAccounts) {
ImdgPredicateBuilder predicateBuilder = accountImdg.predicateBuilder();
Account clrnAcc = accountImdg.getFirstObjectByPredicate(
predicateBuilder.and(
predicateBuilder.equals("account", moneyAccount.getAccount()),
predicateBuilder.equals("accountType", AccountType.Clrn.getKey())
predicateBuilder.equals("accountType", AccountType.Clrn.getKey()),
predicateBuilder.equals("companyId", company.getId())
));
if (clrnAcc == null) {
return of(AccountError.AccountNotFound, moneyAccount.getAccount());
@ -167,37 +173,25 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule<ImdgVa
public Optional<EnumMessage> validate(ImdgValidationContext<TkrAccount> context) {
Optional<DepoAccount> depoAccountOpt = context.getStoredObject(ClientCodeStoreObjects.DEPO_ACCOUNT);
List<Account> clrnAccs = context.getStoredObject(ClientCodeStoreObjects.CLRN_ACCS);
Optional<Account> ruClrnAcc = clrnAccs.stream()
.filter(ruAcc -> CurrencyCode.RUB.equalsByKey(ruAcc.getCurrency()))
.findFirst();
if (ruClrnAcc.isEmpty() && depoAccountOpt.isEmpty()) {
return empty();
}
Imdg<TradingClearingRegistry> imdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry,
TradingClearingRegistry.class);
Imdg<Account> accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account,
Account.class);
ImdgPredicateBuilder pb = imdg.predicateBuilder();
ImdgPredicate query = null;
if (ruClrnAcc.isPresent()) {
query = pb.equals("moneyAccountId", ruClrnAcc.get().getId());
}
for (Account clrnAcc : clrnAccs) {
ImdgPredicate query = pb.equals("moneyAccountId", clrnAcc.getId());
if (depoAccountOpt.isPresent()) {
ImdgPredicate depoCondition = pb.equals("depoAccountId", depoAccountOpt.get().getAccountId());
query = query == null ? depoCondition : pb.or(query, depoCondition);
query = pb.or(query, depoCondition);
}
Collection<TradingClearingRegistry> tcr = imdg.getCollectionObjectsByPredicate(query);
if (tcr.isEmpty()) {
return empty();
} else {
if (!tcr.isEmpty()) {
Account dubAcc = null;
for (TradingClearingRegistry duplicate : tcr) {
if (ruClrnAcc.isPresent() &&
Objects.equals(duplicate.getMoneyAccountId(), ruClrnAcc.get().getId())) {
dubAcc = ruClrnAcc.get();
if (Objects.equals(duplicate.getMoneyAccountId(), clrnAcc.getId())) {
dubAcc = clrnAcc;
}
if (depoAccountOpt.isPresent() &&
depoAccountOpt.get().getAccountId().equals(duplicate.getDepoAccountId())) {
@ -211,9 +205,9 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule<ImdgVa
dubAcc != null ? dubAcc.getAccount() : "null");
}
}
return empty();
}
;
};
private static final Logger log = LoggerFactory.getLogger(GatewayEksClientCodeValidationRule.class);
}