This commit is contained in:
parent
206dd19aca
commit
8f505d5233
2 changed files with 42 additions and 2 deletions
|
|
@ -1,12 +1,16 @@
|
||||||
package ru.spcex.clearing.dflt.management.config;
|
package ru.spcex.clearing.dflt.management.config;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
|
import ru.clearing.classes.statics.data.company.CompanyRoleSet;
|
||||||
import ru.clearing.classes.statics.data.misc.Market;
|
import ru.clearing.classes.statics.data.misc.Market;
|
||||||
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
||||||
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
||||||
|
|
@ -34,6 +38,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.order.OrderCurrencyUpdate
|
||||||
import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule;
|
import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule;
|
||||||
import ru.spcex.clearing.validation.common.rules.IdPresentRule;
|
import ru.spcex.clearing.validation.common.rules.IdPresentRule;
|
||||||
import ru.spcex.clearing.validation.common.rules.SpecialIdPresentRule;
|
import ru.spcex.clearing.validation.common.rules.SpecialIdPresentRule;
|
||||||
|
import ru.spcex.platform.enumeration.CompanyRole;
|
||||||
import ru.spcex.platform.enumeration.OrderAffil;
|
import ru.spcex.platform.enumeration.OrderAffil;
|
||||||
import ru.spcex.platform.enumeration.OrderStatus;
|
import ru.spcex.platform.enumeration.OrderStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
@ -55,9 +60,11 @@ import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||||
@Configuration
|
@Configuration
|
||||||
public class ValidationConfig {
|
public class ValidationConfig {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(ValidationConfig.class);
|
||||||
private final Imdg<OvernightSettings> overnightSettingsImdg;
|
private final Imdg<OvernightSettings> overnightSettingsImdg;
|
||||||
private final Imdg<Company> companyImdg;
|
private final Imdg<Company> companyImdg;
|
||||||
private final Imdg<TradingClearingRegistry> tcrImdg;
|
private final Imdg<TradingClearingRegistry> tcrImdg;
|
||||||
|
private final Imdg<CompanyRoleSet> cmpRoleImdg;
|
||||||
private final Imdg<Market> marketImdg;
|
private final Imdg<Market> marketImdg;
|
||||||
private final Imdg<OvernightTypeDictionary> osTypeDictionaryImdg;
|
private final Imdg<OvernightTypeDictionary> osTypeDictionaryImdg;
|
||||||
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
||||||
|
|
@ -77,6 +84,7 @@ public class ValidationConfig {
|
||||||
this.orderStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderStatusDictionary, OrderStatusDictionary.class);
|
this.orderStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderStatusDictionary, OrderStatusDictionary.class);
|
||||||
this.tcrImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
this.tcrImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||||
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
|
this.cmpRoleImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class);
|
||||||
this.secSelector = new SecuritySelector<>(imdgProvider, Security.class);
|
this.secSelector = new SecuritySelector<>(imdgProvider, Security.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -325,6 +333,7 @@ public class ValidationConfig {
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_OrderCurrency, orderCurrencyImdg);
|
ctx.addImdg(IMDGDistributedNames.Map_OrderCurrency, orderCurrencyImdg);
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg);
|
ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg);
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, tcrImdg);
|
ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, tcrImdg);
|
||||||
|
ctx.addImdg(IMDGDistributedNames.Map_CompanyRoleSet, cmpRoleImdg);
|
||||||
var orderCurrencyPresent = PresentByPredicate
|
var orderCurrencyPresent = PresentByPredicate
|
||||||
.builder(new IdEqualPredicate<>(orderCurrencyImdg.predicateBuilder(), OrderCompanyNewRequest::getOrderId))
|
.builder(new IdEqualPredicate<>(orderCurrencyImdg.predicateBuilder(), OrderCompanyNewRequest::getOrderId))
|
||||||
.mapName(IMDGDistributedNames.Map_OrderCurrency)
|
.mapName(IMDGDistributedNames.Map_OrderCurrency)
|
||||||
|
|
@ -332,6 +341,36 @@ public class ValidationConfig {
|
||||||
.store(OrderCurrencyValidationStored.OrderCurrency)
|
.store(OrderCurrencyValidationStored.OrderCurrency)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
var clccOrderOnly = new IValidationRule<ImdgValidationContext<OrderCompanyNewRequest>> () {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCompanyNewRequest> context) {
|
||||||
|
ImdgPredicateBuilder cmpRolePb = cmpRoleImdg.predicateBuilder();
|
||||||
|
CompanyRoleSet companyRoleSet = cmpRoleImdg.getFirstObjectByPredicate(
|
||||||
|
cmpRolePb.equals("companyRole", CompanyRole.CLCC.getKey())
|
||||||
|
);
|
||||||
|
if (companyRoleSet == null) {
|
||||||
|
log.error("couldn't find companyRole CLCC");
|
||||||
|
return of(DefaultManagementErrors.RecordNotFound, "companyRole[CLCC]");
|
||||||
|
}
|
||||||
|
Company clccCmp = companyImdg.getSingleObjectByID(companyRoleSet.getCompanyId());
|
||||||
|
if (clccCmp == null) {
|
||||||
|
log.error("couldn't find company CLCC");
|
||||||
|
return of(DefaultManagementErrors.RecordNotFound, "company[CLCC]");
|
||||||
|
}
|
||||||
|
OrderCurrency order = context.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
|
||||||
|
if (!Objects.equals(order.getCounterPartyId(), clccCmp.getId())) {
|
||||||
|
return of(DefaultManagementErrors.OperationNotAllowed);
|
||||||
|
}
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String ruleName() {
|
||||||
|
return "clccOrderOnly";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
var companyPresentRule = PresentByPredicate
|
var companyPresentRule = PresentByPredicate
|
||||||
.builder(new IdEqualPredicate<>(
|
.builder(new IdEqualPredicate<>(
|
||||||
companyImdg.predicateBuilder(),
|
companyImdg.predicateBuilder(),
|
||||||
|
|
@ -357,8 +396,7 @@ public class ValidationConfig {
|
||||||
OrderCurrency oc = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
|
OrderCurrency oc = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
|
||||||
ImdgPredicateBuilder pb = tcrImdg.predicateBuilder();
|
ImdgPredicateBuilder pb = tcrImdg.predicateBuilder();
|
||||||
return pb.and(
|
return pb.and(
|
||||||
pb.equals("companyId", oc.getCounterPartyId()),
|
pb.equals("companyId", oc.getCounterPartyId())
|
||||||
pb.equals("code", oc.getCounterTradingCode())
|
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.mapName(IMDGDistributedNames.Map_TradingClearingRegistry)
|
.mapName(IMDGDistributedNames.Map_TradingClearingRegistry)
|
||||||
|
|
@ -370,6 +408,7 @@ public class ValidationConfig {
|
||||||
//fixme проверить что tcr.getCompanyId() = companyId из запроса?
|
//fixme проверить что tcr.getCompanyId() = companyId из запроса?
|
||||||
return new ValidatorImpl<>(ctx,
|
return new ValidatorImpl<>(ctx,
|
||||||
orderCurrencyPresent,
|
orderCurrencyPresent,
|
||||||
|
clccOrderOnly,
|
||||||
companyPresentRule,
|
companyPresentRule,
|
||||||
tcrPresent,
|
tcrPresent,
|
||||||
QuantityLotGreaterThanZero.INSTANCE,
|
QuantityLotGreaterThanZero.INSTANCE,
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ public enum DefaultManagementErrors implements IErrorEnumId {
|
||||||
IncorrectFieldValue(11005L),
|
IncorrectFieldValue(11005L),
|
||||||
DictionaryNotFound(11006L),
|
DictionaryNotFound(11006L),
|
||||||
RequiredFieldIsEmpty(11007L),
|
RequiredFieldIsEmpty(11007L),
|
||||||
|
OperationNotAllowed(11008L),
|
||||||
;
|
;
|
||||||
|
|
||||||
private final Long id;
|
private final Long id;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue