etreschenkov 2024-06-06 11:32:19 +03:00
parent 7ce2445fc9
commit cc87b6ec1e

View file

@ -51,26 +51,27 @@ public class TradingClearingRegistryListValidationConfig {
addImdg.accept(IMDGDistributedNames.Map_TradingClearingRegistry); addImdg.accept(IMDGDistributedNames.Map_TradingClearingRegistry);
addImdg.accept(IMDGDistributedNames.Map_ServiceStatusDictionary); addImdg.accept(IMDGDistributedNames.Map_ServiceStatusDictionary);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
IdPresentRule.instance("tradingClearingRegistryId", IdPresentRule.instance("tradingClearingRegistryId",
TradingClearingRegistryListNewRequest::getTradingClearingRegistryId, TradingClearingRegistryListNewRequest::getTradingClearingRegistryId,
IMDGDistributedNames.Map_TradingClearingRegistry, IMDGDistributedNames.Map_TradingClearingRegistry,
TradingClearingRegistry.class, TradingClearingRegistry.class,
AccountError.RequiredFieldEmpty, AccountError.RequiredFieldEmpty,
AccountError.TradingClearingRegistryNotFound, AccountError.TradingClearingRegistryNotFound,
false), false),
new ExistAllAccountId<>("accountId", new ExistAllAccountId<>("accountId",
TradingClearingRegistryListNewRequest::getCurrencyAccountList, TradingClearingRegistryListNewRequest::getCurrencyAccountList,
TradingClearingRegistryListNewRequest::getAccountId, TradingClearingRegistryListNewRequest::getAccountId,
false, TradingClearingRegistryListNewRequest::getTradingClearingRegistryId,
null), false,
DictionaryPresentRule.instance("stauts", null),
TradingClearingRegistryListNewRequest::getStatus, DictionaryPresentRule.instance("stauts",
IMDGDistributedNames.Map_ServiceStatusDictionary, TradingClearingRegistryListNewRequest::getStatus,
ServiceStatusDictionary.class, IMDGDistributedNames.Map_ServiceStatusDictionary,
AccountError.RequiredFieldEmpty, ServiceStatusDictionary.class,
AccountError.DictionaryNotFound, AccountError.RequiredFieldEmpty,
false), AccountError.DictionaryNotFound,
NotAlreadyPresent.instance false),
NotAlreadyPresent.instance
); );
}; };
} }
@ -86,43 +87,43 @@ public class TradingClearingRegistryListValidationConfig {
addImdg.accept(IMDGDistributedNames.Map_TradingClearingRegistry); addImdg.accept(IMDGDistributedNames.Map_TradingClearingRegistry);
addImdg.accept(IMDGDistributedNames.Map_ServiceStatusDictionary); addImdg.accept(IMDGDistributedNames.Map_ServiceStatusDictionary);
return new ValidatorImpl<ImdgValidationContext<TradingClearingRegistryListUpdateRequest>>(context, return new ValidatorImpl<ImdgValidationContext<TradingClearingRegistryListUpdateRequest>>(context,
IdPresentRule.instance2("id", IdPresentRule.instance2("id",
TradingClearingRegistryListUpdateRequest::getId, TradingClearingRegistryListUpdateRequest::getId,
IMDGDistributedNames.Map_TradingClearingRegistryList, IMDGDistributedNames.Map_TradingClearingRegistryList,
TradingClearingRegistryList.class, TradingClearingRegistryList.class,
AccountError.RequiredFieldEmpty, AccountError.RequiredFieldEmpty,
AccountError.RecordNotFound, AccountError.RecordNotFound,
true, true,
(tcrList)-> { (tcrList) -> {
Long accountId = tcrList.getAccountId(); Long accountId = tcrList.getAccountId();
if (accountId==null) if (accountId == null)
return null; return null;
if (!IEnumKey.contains(context.getValidatedObject().getStatus(), if (!IEnumKey.contains(context.getValidatedObject().getStatus(),
ServiceStatus.Active, ServiceStatus.Reopened)) ServiceStatus.Active, ServiceStatus.Reopened))
return null; return null;
Imdg<TradingClearingRegistryList> tradingClearingRegistryListImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class); Imdg<TradingClearingRegistryList> tradingClearingRegistryListImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class);
ImdgPredicateBuilder pb = tradingClearingRegistryListImdg.predicateBuilder(); ImdgPredicateBuilder pb = tradingClearingRegistryListImdg.predicateBuilder();
ImdgPredicate query = pb.and(pb.equals("status", WorkflowStatus.Active.getKey()), ImdgPredicate query = pb.and(pb.equals("status", WorkflowStatus.Active.getKey()),
pb.equals("accountId", accountId)); pb.equals("accountId", accountId));
query = pb.and(query, pb.not(pb.equals("id", tcrList.getId()))); query = pb.and(query, pb.not(pb.equals("id", tcrList.getId())));
Collection<TradingClearingRegistryList> inOtherLists = tradingClearingRegistryListImdg.getCollectionObjectsByPredicate(query); Collection<TradingClearingRegistryList> inOtherLists = tradingClearingRegistryListImdg.getCollectionObjectsByPredicate(query);
if (!inOtherLists.isEmpty()) { if (!inOtherLists.isEmpty()) {
Collection<Long> duplicateAccounts = inOtherLists.stream() Collection<Long> duplicateAccounts = inOtherLists.stream()
.map(TradingClearingRegistryList::getAccountId) .map(TradingClearingRegistryList::getAccountId)
.filter(accountId::equals) .filter(accountId::equals)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
return new EnumMessage(AccountError.AccountForTradingClearingRegistryAlreadyUsed, duplicateAccounts, "accountId"); // (5023) «Счет %s уже используется» return new EnumMessage(AccountError.AccountForTradingClearingRegistryAlreadyUsed, duplicateAccounts, "accountId"); // (5023) «Счет %s уже используется»
} }
return null; return null;
}), }),
DictionaryPresentRule.instance("status", DictionaryPresentRule.instance("status",
TradingClearingRegistryListUpdateRequest::getStatus, TradingClearingRegistryListUpdateRequest::getStatus,
IMDGDistributedNames.Map_ServiceStatusDictionary, IMDGDistributedNames.Map_ServiceStatusDictionary,
ServiceStatusDictionary.class, ServiceStatusDictionary.class,
AccountError.RequiredFieldEmpty, AccountError.RequiredFieldEmpty,
AccountError.DictionaryNotFound, AccountError.DictionaryNotFound,
true) true)
); );
}; };
} }
@ -158,16 +159,19 @@ public class TradingClearingRegistryListValidationConfig {
String fieldName; String fieldName;
Function<R, List<Long>> accountIdListGetter; Function<R, List<Long>> accountIdListGetter;
Function<R, Long> accountIdGetter; Function<R, Long> accountIdGetter;
Function<R, Long> tkrIdGetter;
boolean required; boolean required;
Function<R, Long> idGetter; Function<R, Long> idGetter;
public ExistAllAccountId(String fieldName, public ExistAllAccountId(String fieldName,
Function<R, List<Long>> accountIdListGetter, Function<R, List<Long>> accountIdListGetter,
Function<R, Long> accountIdGetter, Function<R, Long> accountIdGetter,
Function<R, Long> tkrIdGetter,
boolean required, Function<R, Long> idGetter) { boolean required, Function<R, Long> idGetter) {
this.fieldName = fieldName; this.fieldName = fieldName;
this.accountIdListGetter = accountIdListGetter; this.accountIdListGetter = accountIdListGetter;
this.accountIdGetter = accountIdGetter; this.accountIdGetter = accountIdGetter;
this.tkrIdGetter = tkrIdGetter;
this.required = required; this.required = required;
this.idGetter = idGetter; this.idGetter = idGetter;
} }
@ -176,7 +180,7 @@ public class TradingClearingRegistryListValidationConfig {
public Optional<EnumMessage> validate(ImdgValidationContext<R> context) { public Optional<EnumMessage> validate(ImdgValidationContext<R> context) {
R validatedObject = context.getValidatedObject(); R validatedObject = context.getValidatedObject();
List<Long> accounts = accountIdListGetter.apply(validatedObject); List<Long> accounts = accountIdListGetter.apply(validatedObject);
if (accounts.isEmpty()){ if (accounts == null) {
accounts = new ArrayList<>(); accounts = new ArrayList<>();
} }
Long singleAccountId = accountIdGetter.apply(validatedObject); Long singleAccountId = accountIdGetter.apply(validatedObject);
@ -206,9 +210,12 @@ public class TradingClearingRegistryListValidationConfig {
// Проверка отсутствия других TradingClearingRegistryList с этими счетами // Проверка отсутствия других TradingClearingRegistryList с этими счетами
Imdg<TradingClearingRegistryList> tradingClearingRegistryListImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class); Imdg<TradingClearingRegistryList> tradingClearingRegistryListImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class);
Long tkrId = tkrIdGetter.apply(validatedObject);
ImdgPredicateBuilder pb = tradingClearingRegistryListImdg.predicateBuilder(); ImdgPredicateBuilder pb = tradingClearingRegistryListImdg.predicateBuilder();
ImdgPredicate query = pb.and(pb.equals("status", WorkflowStatus.Active.getKey()), ImdgPredicate query = pb.and(
pb.equals("currency", byIdObject.getCurrency())); pb.equals("status", WorkflowStatus.Active.getKey()),
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
@ -217,9 +224,9 @@ public class TradingClearingRegistryListValidationConfig {
} }
Collection<TradingClearingRegistryList> inOtherLists = tradingClearingRegistryListImdg.getCollectionObjectsByPredicate(query); Collection<TradingClearingRegistryList> inOtherLists = tradingClearingRegistryListImdg.getCollectionObjectsByPredicate(query);
if (!inOtherLists.isEmpty()) { if (!inOtherLists.isEmpty()) {
Collection<Long> duplicateAccounts = inOtherLists.stream() Collection<String> duplicateAccounts = inOtherLists.stream()
.map(TradingClearingRegistryList::getAccountId) .map(tradingClearingRegistryList ->
.filter(accountId::equals) accountImdg.getSingleObjectByID(tradingClearingRegistryList.getAccountId()).getAccount())
.collect(Collectors.toSet()); .collect(Collectors.toSet());
return of(AccountError.AccountForTradingClearingRegistryAlreadyUsed, duplicateAccounts, fieldName); // (5023) «Счет %s уже используется» return of(AccountError.AccountForTradingClearingRegistryAlreadyUsed, duplicateAccounts, fieldName); // (5023) «Счет %s уже используется»
} }