This commit is contained in:
parent
7492fbe823
commit
0aa623836f
1 changed files with 37 additions and 43 deletions
|
|
@ -100,9 +100,13 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule<ImdgVa
|
||||||
if (accountSymbols == null) {
|
if (accountSymbols == null) {
|
||||||
return of(AccountError.DepoAccountNotFound, "depo_account");
|
return of(AccountError.DepoAccountNotFound, "depo_account");
|
||||||
}
|
}
|
||||||
|
Company company = context.getStoredObject(ClientCodeStoreObjects.COMPANY);
|
||||||
Imdg<DepoAccount> imdg = context.obtainMap(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class);
|
Imdg<DepoAccount> imdg = context.obtainMap(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class);
|
||||||
DepoAccount depoAccount = imdg.getFirstObjectByPredicate(
|
DepoAccount depoAccount = imdg.getFirstObjectByPredicate(
|
||||||
predicateBuilder.equals("accountId", accountSymbols.getAccountId())
|
predicateBuilder.and(
|
||||||
|
predicateBuilder.equals("accountId", accountSymbols.getAccountId()),
|
||||||
|
predicateBuilder.equals("companyId", company.getId())
|
||||||
|
)
|
||||||
);
|
);
|
||||||
if (depoAccount == null) {
|
if (depoAccount == null) {
|
||||||
context.storeObject(ClientCodeStoreObjects.DEPO_ACCOUNT, Optional.empty());
|
context.storeObject(ClientCodeStoreObjects.DEPO_ACCOUNT, Optional.empty());
|
||||||
|
|
@ -122,12 +126,14 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule<ImdgVa
|
||||||
.toList();
|
.toList();
|
||||||
Imdg<Account> accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class);
|
Imdg<Account> accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class);
|
||||||
List<Account> validClrnAccs = new ArrayList<>();
|
List<Account> validClrnAccs = new ArrayList<>();
|
||||||
|
Company company = context.getStoredObject(ClientCodeStoreObjects.COMPANY);
|
||||||
for (MoneyAccountMsgRequest moneyAccount : moneyAccounts) {
|
for (MoneyAccountMsgRequest moneyAccount : moneyAccounts) {
|
||||||
ImdgPredicateBuilder predicateBuilder = accountImdg.predicateBuilder();
|
ImdgPredicateBuilder predicateBuilder = accountImdg.predicateBuilder();
|
||||||
Account clrnAcc = accountImdg.getFirstObjectByPredicate(
|
Account clrnAcc = accountImdg.getFirstObjectByPredicate(
|
||||||
predicateBuilder.and(
|
predicateBuilder.and(
|
||||||
predicateBuilder.equals("account", moneyAccount.getAccount()),
|
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) {
|
if (clrnAcc == null) {
|
||||||
return of(AccountError.AccountNotFound, moneyAccount.getAccount());
|
return of(AccountError.AccountNotFound, moneyAccount.getAccount());
|
||||||
|
|
@ -164,56 +170,44 @@ public enum GatewayEksClientCodeValidationRule implements IValidationRule<ImdgVa
|
||||||
|
|
||||||
TcrIsNotPresent() {
|
TcrIsNotPresent() {
|
||||||
@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);
|
||||||
List<Account> clrnAccs = context.getStoredObject(ClientCodeStoreObjects.CLRN_ACCS);
|
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,
|
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);
|
||||||
|
|
||||||
ImdgPredicateBuilder pb = imdg.predicateBuilder();
|
ImdgPredicateBuilder pb = imdg.predicateBuilder();
|
||||||
ImdgPredicate query = null;
|
for (Account clrnAcc : clrnAccs) {
|
||||||
if (ruClrnAcc.isPresent()) {
|
ImdgPredicate query = pb.equals("moneyAccountId", clrnAcc.getId());
|
||||||
query = pb.equals("moneyAccountId", ruClrnAcc.get().getId());
|
if (depoAccountOpt.isPresent()) {
|
||||||
}
|
ImdgPredicate depoCondition = pb.equals("depoAccountId", depoAccountOpt.get().getAccountId());
|
||||||
if (depoAccountOpt.isPresent()) {
|
query = pb.or(query, depoCondition);
|
||||||
ImdgPredicate depoCondition = pb.equals("depoAccountId", depoAccountOpt.get().getAccountId());
|
|
||||||
query = query == null ? depoCondition : pb.or(query, depoCondition);
|
|
||||||
}
|
|
||||||
Collection<TradingClearingRegistry> tcr = imdg.getCollectionObjectsByPredicate(query);
|
|
||||||
|
|
||||||
if (tcr.isEmpty()) {
|
|
||||||
return empty();
|
|
||||||
} else {
|
|
||||||
Account dubAcc = null;
|
|
||||||
for (TradingClearingRegistry duplicate : tcr) {
|
|
||||||
if (ruClrnAcc.isPresent() &&
|
|
||||||
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,
|
Collection<TradingClearingRegistry> tcr = imdg.getCollectionObjectsByPredicate(query);
|
||||||
dubAcc != null ? dubAcc.getAccount() : "null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
;
|
if (!tcr.isEmpty()) {
|
||||||
|
Account dubAcc = null;
|
||||||
|
for (TradingClearingRegistry duplicate : tcr) {
|
||||||
|
if (Objects.equals(duplicate.getMoneyAccountId(), clrnAcc.getId())) {
|
||||||
|
dubAcc = clrnAcc;
|
||||||
|
}
|
||||||
|
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 empty();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(GatewayEksClientCodeValidationRule.class);
|
private static final Logger log = LoggerFactory.getLogger(GatewayEksClientCodeValidationRule.class);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue