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