This commit is contained in:
parent
328573074c
commit
b5ad5540c7
1 changed files with 35 additions and 13 deletions
|
|
@ -1,8 +1,10 @@
|
||||||
package ru.spcex.clearing.account.validation;
|
package ru.spcex.clearing.account.validation;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
@ -18,8 +20,8 @@ import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.MoneyAccountMsgRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.MoneyAccountMsgRequest;
|
||||||
import ru.spcex.platform.enumeration.AccountType;
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
import ru.spcex.platform.enumeration.CurrencyCode;
|
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||||
import ru.spcex.platform.enumeration.Status;
|
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
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.ImdgPredicateBuilder;
|
||||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
|
|
@ -124,25 +126,45 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule<ImdgVa
|
||||||
@Override
|
@Override
|
||||||
public Optional<EnumMessage> validate (ImdgValidationContext < TkrAccount > context) {
|
public Optional<EnumMessage> validate (ImdgValidationContext < TkrAccount > context) {
|
||||||
Optional<DepoAccount> depoAccountOpt = context.getStoredObject(ClientCodeStoreObjects.DEPO_ACCOUNT);
|
Optional<DepoAccount> depoAccountOpt = context.getStoredObject(ClientCodeStoreObjects.DEPO_ACCOUNT);
|
||||||
if (depoAccountOpt.isEmpty()) {
|
List<Account> clrnAccs = context.getStoredObject(ClientCodeStoreObjects.CLRN_ACCS);
|
||||||
|
Optional<Account> ruClrnAcc = clrnAccs.stream()
|
||||||
|
.filter(ruAcc -> CurrencyCode.RUB.equalsByKey(ruAcc.getCurrency()))
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
|
if (ruClrnAcc.isEmpty()) {
|
||||||
return empty();
|
return empty();
|
||||||
}
|
}
|
||||||
DepoAccount depoAccount = depoAccountOpt.get();
|
|
||||||
Imdg<TradingClearingRegistry> imdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry,
|
Imdg<TradingClearingRegistry> imdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry,
|
||||||
TradingClearingRegistry.class);
|
TradingClearingRegistry.class);
|
||||||
Imdg<Account> accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account,
|
Imdg<Account> accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account,
|
||||||
Account.class);
|
Account.class);
|
||||||
TradingClearingRegistry tcr = imdg.getFirstObjectByFieldValues(
|
|
||||||
Map.of(
|
ImdgPredicateBuilder pb = imdg.predicateBuilder();
|
||||||
"depoAccountId", depoAccount.getAccountId(),
|
ImdgPredicate query = pb.equals("moneyAccountId", ruClrnAcc.get().getId());
|
||||||
"status", Status.Active.getKey()
|
if (depoAccountOpt.isPresent()) {
|
||||||
)
|
query = pb.or(query, pb.equals("depoAccountId", depoAccountOpt.get().getAccountId()));
|
||||||
);
|
}
|
||||||
if (tcr != null) {
|
Collection<TradingClearingRegistry> tcr = imdg.getCollectionObjectsByPredicate(query);
|
||||||
Account account = accountImdg.getSingleObjectByID(depoAccount.getAccountId());
|
|
||||||
return of(AccountError.AccountForTradingClearingRegistryAlreadyUsed, account.getAccount(), "account");
|
if (tcr.isEmpty()) {
|
||||||
|
return empty();
|
||||||
|
} else {
|
||||||
|
Account dubAcc = null;
|
||||||
|
for (TradingClearingRegistry duplicate : tcr) {
|
||||||
|
if (Objects.equals(duplicate.getMoneyAccountId(), ruClrnAcc.get().getId())) {
|
||||||
|
dubAcc = ruClrnAcc.get();
|
||||||
|
}
|
||||||
|
if (depoAccountOpt.isPresent() &&
|
||||||
|
depoAccountOpt.get().getAccountId().equals(duplicate.getDepoAccountId())) {
|
||||||
|
dubAcc = accountImdg.getSingleObjectByID(depoAccountOpt.get().getAccountId());
|
||||||
|
}
|
||||||
|
if (dubAcc != null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return of(AccountError.AccountForTradingClearingRegistryAlreadyUsed,
|
||||||
|
dubAcc != null ? dubAcc.getAccount() : "null");
|
||||||
}
|
}
|
||||||
return Optional.empty();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue