This commit is contained in:
parent
7ce2445fc9
commit
cc87b6ec1e
1 changed files with 69 additions and 62 deletions
|
|
@ -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 уже используется»
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue