ialbert 2026-04-22 14:47:37 +03:00
parent 434089c005
commit 263b77598d
9 changed files with 45 additions and 19 deletions

View file

@ -5,19 +5,25 @@ import java.util.Optional;
import ru.clearing.classes.statics.data.misc.OrderCurrency; import ru.clearing.classes.statics.data.misc.OrderCurrency;
import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors; import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.cud.order.OrderCompanyNewRequest; import ru.spcex.platform.classes.base.interfaces.WithCompanyId;
import ru.spcex.platform.classes.base.interfaces.WithTcrId;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.validation.IValidationRule; import ru.spcex.platform.utils.validation.IValidationRule;
public class OrderCurrencyByCompanyAndTcrAlreadyPresent implements IValidationRule<ImdgValidationContext<OrderCompanyNewRequest>> { public class OrderCurrencyByCompanyAndTcrAlreadyPresent<T extends WithTcrId & WithCompanyId>
public static final OrderCurrencyByCompanyAndTcrAlreadyPresent INSTANCE = new OrderCurrencyByCompanyAndTcrAlreadyPresent(); implements IValidationRule<ImdgValidationContext<T>> {
public static <T extends WithTcrId & WithCompanyId>
OrderCurrencyByCompanyAndTcrAlreadyPresent<T> getInstance(Class<T> clazz) {
return new OrderCurrencyByCompanyAndTcrAlreadyPresent<>();
}
@Override @Override
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCompanyNewRequest> ctx) { public Optional<EnumMessage> validate(ImdgValidationContext<T> ctx) {
OrderCompanyNewRequest validatedObject = ctx.getValidatedObject(); T validatedObject = ctx.getValidatedObject();
Imdg<OrderCurrency> imdg = ctx.obtainMap(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class); Imdg<OrderCurrency> imdg = ctx.obtainMap(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class);
ImdgPredicateBuilder pb = imdg.predicateBuilder(); ImdgPredicateBuilder pb = imdg.predicateBuilder();
Collection<OrderCurrency> orders = imdg.getCollectionObjectsByPredicate( Collection<OrderCurrency> orders = imdg.getCollectionObjectsByPredicate(

View file

@ -3,17 +3,16 @@ package ru.spcex.clearing.dflt.management.component.validation;
import java.util.Optional; import java.util.Optional;
import ru.clearing.classes.statics.data.misc.OrderCurrency; import ru.clearing.classes.statics.data.misc.OrderCurrency;
import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors; import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors;
import ru.spcex.clearing.platform.messaging.domain.cud.order.OrderCompanyNewRequest;
import ru.spcex.platform.enumeration.OrderAffil; import ru.spcex.platform.enumeration.OrderAffil;
import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.validation.IValidationRule; import ru.spcex.platform.utils.validation.IValidationRule;
public class OrderCurrencyPLBLCheck implements IValidationRule<ImdgValidationContext<OrderCompanyNewRequest>> { public class OrderCurrencyPLBLCheck implements IValidationRule<ImdgValidationContext<?>> {
public static final OrderCurrencyPLBLCheck INSTANCE = new OrderCurrencyPLBLCheck(); public static final OrderCurrencyPLBLCheck INSTANCE = new OrderCurrencyPLBLCheck();
@Override @Override
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCompanyNewRequest> ctx) { public Optional<EnumMessage> validate(ImdgValidationContext<?> ctx) {
OrderCurrency order = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency); OrderCurrency order = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
if (!OrderAffil.PLBL.equalsByKey(order.getType())) { if (!OrderAffil.PLBL.equalsByKey(order.getType())) {
return of(DefaultManagementErrors.OnlyBalancingOrdersAllowed); return of(DefaultManagementErrors.OnlyBalancingOrdersAllowed);

View file

@ -2,17 +2,17 @@ package ru.spcex.clearing.dflt.management.component.validation;
import java.util.Optional; import java.util.Optional;
import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors; import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors;
import ru.spcex.clearing.platform.messaging.domain.cud.order.OrderCompanyNewRequest; import ru.spcex.platform.classes.base.interfaces.WithQuantityLot;
import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.validation.IValidationRule; import ru.spcex.platform.utils.validation.IValidationRule;
public class QuantityLotGreaterThanZero implements IValidationRule<ImdgValidationContext<OrderCompanyNewRequest>> { public class QuantityLotGreaterThanZero<T extends WithQuantityLot> implements IValidationRule<ImdgValidationContext<T>> {
public static final QuantityLotGreaterThanZero INSTANCE = new QuantityLotGreaterThanZero(); public static final QuantityLotGreaterThanZero<WithQuantityLot> INSTANCE = new QuantityLotGreaterThanZero<>();
@Override @Override
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCompanyNewRequest> ctx) { public Optional<EnumMessage> validate(ImdgValidationContext<T> ctx) {
OrderCompanyNewRequest validatedObject = ctx.getValidatedObject(); T validatedObject = ctx.getValidatedObject();
if (validatedObject.getQuantityLot() == null || validatedObject.getQuantityLot() < 0) { if (validatedObject.getQuantityLot() == null || validatedObject.getQuantityLot() < 0) {
return of(DefaultManagementErrors.RequiredFieldIsEmpty, "quantityLot"); return of(DefaultManagementErrors.RequiredFieldIsEmpty, "quantityLot");
} }

View file

@ -177,7 +177,7 @@ public class ValidationConfig {
OvernightTypeChanged.INSTANCE, OvernightTypeChanged.INSTANCE,
DictionaryPresentRule.instance( DictionaryPresentRule.instance(
"overnightType", "overnightType",
OvernightSettingsNewRequest::getOvernightType, OrderCurrencyUpdateRequest::getOvernightType,
IMDGDistributedNames.Map_OvernightTypeDictionary, IMDGDistributedNames.Map_OvernightTypeDictionary,
OvernightTypeDictionary.class, OvernightTypeDictionary.class,
DefaultManagementErrors.RequiredFieldIsEmpty, DefaultManagementErrors.RequiredFieldIsEmpty,
@ -292,7 +292,7 @@ public class ValidationConfig {
companyPresentRule, companyPresentRule,
tcrPresent, tcrPresent,
QuantityLotGreaterThanZero.INSTANCE, QuantityLotGreaterThanZero.INSTANCE,
OrderCurrencyByCompanyAndTcrAlreadyPresent.INSTANCE, OrderCurrencyByCompanyAndTcrAlreadyPresent.getInstance(OrderCompanyNewRequest.class),
OrderCurrencyPLBLCheck.INSTANCE, OrderCurrencyPLBLCheck.INSTANCE,
counterTcrPresent); counterTcrPresent);
}; };
@ -328,7 +328,7 @@ public class ValidationConfig {
var tcrPresent = PresentByPredicate var tcrPresent = PresentByPredicate
.builder(new IdEqualPredicate<>( .builder(new IdEqualPredicate<>(
tcrImdg.predicateBuilder(), tcrImdg.predicateBuilder(),
OrderCompanyNewRequest::getTradingClearingRegistryId) OrderCompanyUpdateRequest::getTradingClearingRegistryId)
) )
.mapName(IMDGDistributedNames.Map_TradingClearingRegistry) .mapName(IMDGDistributedNames.Map_TradingClearingRegistry)
.errorProvider(r -> recordNotFound("tcr.id=" + r.getTradingClearingRegistryId())) .errorProvider(r -> recordNotFound("tcr.id=" + r.getTradingClearingRegistryId()))
@ -357,7 +357,7 @@ public class ValidationConfig {
companyPresentRule, companyPresentRule,
tcrPresent, tcrPresent,
QuantityLotGreaterThanZero.INSTANCE, QuantityLotGreaterThanZero.INSTANCE,
OrderCurrencyByCompanyAndTcrAlreadyPresent.INSTANCE, OrderCurrencyByCompanyAndTcrAlreadyPresent.getInstance(OrderCompanyUpdateRequest.class),
OrderCurrencyPLBLCheck.INSTANCE, OrderCurrencyPLBLCheck.INSTANCE,
counterOrderPresent); counterOrderPresent);
}; };

View file

@ -0,0 +1,5 @@
package ru.spcex.platform.classes.base.interfaces;
public interface WithCompanyId {
Long getCompanyId();
}

View file

@ -0,0 +1,5 @@
package ru.spcex.platform.classes.base.interfaces;
public interface WithQuantityLot {
Long getQuantityLot();
}

View file

@ -0,0 +1,5 @@
package ru.spcex.platform.classes.base.interfaces;
public interface WithTcrId {
Long getTradingClearingRegistryId();
}

View file

@ -1,8 +1,11 @@
package ru.spcex.clearing.platform.messaging.domain.cud.order; package ru.spcex.clearing.platform.messaging.domain.cud.order;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import ru.spcex.platform.classes.base.interfaces.WithCompanyId;
import ru.spcex.platform.classes.base.interfaces.WithQuantityLot;
import ru.spcex.platform.classes.base.interfaces.WithTcrId;
public class OrderCompanyNewRequest { public class OrderCompanyNewRequest implements WithQuantityLot, WithTcrId, WithCompanyId {
@JsonProperty @JsonProperty
private Long orderId; private Long orderId;
@JsonProperty @JsonProperty

View file

@ -1,9 +1,12 @@
package ru.spcex.clearing.platform.messaging.domain.cud.order; package ru.spcex.clearing.platform.messaging.domain.cud.order;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import ru.spcex.platform.classes.base.interfaces.WithCompanyId;
import ru.spcex.platform.classes.base.interfaces.WithId; import ru.spcex.platform.classes.base.interfaces.WithId;
import ru.spcex.platform.classes.base.interfaces.WithQuantityLot;
import ru.spcex.platform.classes.base.interfaces.WithTcrId;
public class OrderCompanyUpdateRequest implements WithId { public class OrderCompanyUpdateRequest implements WithId, WithQuantityLot, WithTcrId, WithCompanyId {
@JsonProperty @JsonProperty
private Long id; private Long id;
@JsonProperty @JsonProperty