Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
ialbert 2024-06-18 19:13:40 +03:00
commit 1b0672bba3
3 changed files with 30 additions and 3 deletions

View file

@ -176,7 +176,8 @@ public class ClientCodeValidationConfig {
GatewayClientCodeValidationRule.CompanyPresent, GatewayClientCodeValidationRule.CompanyPresent,
GatewayClientCodeValidationRule.AllAccountsPresent, GatewayClientCodeValidationRule.AllAccountsPresent,
GatewayClientCodeValidationRule.DepoAccountsPresent, GatewayClientCodeValidationRule.DepoAccountsPresent,
GatewayClientCodeValidationRule.TcrIsNotPresent GatewayClientCodeValidationRule.TcrIsNotPresent,
GatewayClientCodeValidationRule.TcrListIsNotPresent
); );
}; };
} }

View file

@ -214,8 +214,7 @@ public class TradingClearingRegistryListValidationConfig {
ImdgPredicateBuilder pb = tradingClearingRegistryListImdg.predicateBuilder(); ImdgPredicateBuilder pb = tradingClearingRegistryListImdg.predicateBuilder();
ImdgPredicate query = pb.and( ImdgPredicate query = pb.and(
pb.equals("status", WorkflowStatus.Active.getKey()), pb.equals("status", WorkflowStatus.Active.getKey()),
pb.equals("currency", byIdObject.getCurrency()), pb.equals("currency", byIdObject.getCurrency()));
pb.equals("tradingClearingRegistryId", tkrId));
if (idGetter != null) { if (idGetter != null) {
Long id = idGetter.apply(validatedObject); Long id = idGetter.apply(validatedObject);
if (id == null) // never if (id == null) // never

View file

@ -1,5 +1,6 @@
package ru.spcex.clearing.account.validation; package ru.spcex.clearing.account.validation;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -8,6 +9,7 @@ import org.springframework.util.StringUtils;
import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList;
import ru.spcex.clearing.account.errors.AccountError; import ru.spcex.clearing.account.errors.AccountError;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount; import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount;
@ -126,5 +128,30 @@ public enum GatewayClientCodeValidationRule implements IValidationRule<ImdgValid
} }
return Optional.empty(); return Optional.empty();
} }
},
TcrListIsNotPresent() {
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<TkrAccount> context) {
Map<String, Account> accountByCurrency = context.getStoredObject(ClientCodeStoreObjects.MAPPED_TO_CURRENCY_ACCOUNTS);
List<Account> currencyAccounts = accountByCurrency.entrySet().stream()
.filter(stringAccountEntry -> !stringAccountEntry.getKey().equals(CurrencyCode.RUB.getKey()))
.map(Map.Entry::getValue).toList();
if (currencyAccounts.isEmpty()) {
return empty();
}
List<String> currencies = currencyAccounts.stream().map(Account::getCurrency).toList();
Imdg<TradingClearingRegistryList> imdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList,
TradingClearingRegistryList.class);
ImdgPredicateBuilder predicateBuilder = imdg.predicateBuilder();
Collection<TradingClearingRegistryList> tcrList = imdg.getCollectionObjectsByPredicate(
predicateBuilder.and(
predicateBuilder.in("currency", currencies.toArray(new String[0])),
predicateBuilder.equals("status", Status.Active.getKey())
));
if (!tcrList.isEmpty()) {
return of(AccountError.TCR_ALREADY_EXIST_GTW, tcrList.iterator().next().getCurrency(), "currency");
}
return Optional.empty();
}
} }
} }