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;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import org.slf4j.Logger;
|
||||
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.platform.enumeration.AccountType;
|
||||
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.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
|
|
@ -124,25 +126,45 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule<ImdgVa
|
|||
@Override
|
||||
public Optional<EnumMessage> validate (ImdgValidationContext < TkrAccount > context) {
|
||||
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();
|
||||
}
|
||||
DepoAccount depoAccount = depoAccountOpt.get();
|
||||
Imdg<TradingClearingRegistry> imdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry,
|
||||
TradingClearingRegistry.class);
|
||||
Imdg<Account> accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account,
|
||||
Account.class);
|
||||
TradingClearingRegistry tcr = imdg.getFirstObjectByFieldValues(
|
||||
Map.of(
|
||||
"depoAccountId", depoAccount.getAccountId(),
|
||||
"status", Status.Active.getKey()
|
||||
)
|
||||
);
|
||||
if (tcr != null) {
|
||||
Account account = accountImdg.getSingleObjectByID(depoAccount.getAccountId());
|
||||
return of(AccountError.AccountForTradingClearingRegistryAlreadyUsed, account.getAccount(), "account");
|
||||
|
||||
ImdgPredicateBuilder pb = imdg.predicateBuilder();
|
||||
ImdgPredicate query = pb.equals("moneyAccountId", ruClrnAcc.get().getId());
|
||||
if (depoAccountOpt.isPresent()) {
|
||||
query = pb.or(query, pb.equals("depoAccountId", depoAccountOpt.get().getAccountId()));
|
||||
}
|
||||
Collection<TradingClearingRegistry> tcr = imdg.getCollectionObjectsByPredicate(query);
|
||||
|
||||
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