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.spcex.clearing.dflt.management.error.DefaultManagementErrors;
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.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.validation.IValidationRule;
public class OrderCurrencyByCompanyAndTcrAlreadyPresent implements IValidationRule<ImdgValidationContext<OrderCompanyNewRequest>> {
public static final OrderCurrencyByCompanyAndTcrAlreadyPresent INSTANCE = new OrderCurrencyByCompanyAndTcrAlreadyPresent();
public class OrderCurrencyByCompanyAndTcrAlreadyPresent<T extends WithTcrId & WithCompanyId>
implements IValidationRule<ImdgValidationContext<T>> {
public static <T extends WithTcrId & WithCompanyId>
OrderCurrencyByCompanyAndTcrAlreadyPresent<T> getInstance(Class<T> clazz) {
return new OrderCurrencyByCompanyAndTcrAlreadyPresent<>();
}
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCompanyNewRequest> ctx) {
OrderCompanyNewRequest validatedObject = ctx.getValidatedObject();
public Optional<EnumMessage> validate(ImdgValidationContext<T> ctx) {
T validatedObject = ctx.getValidatedObject();
Imdg<OrderCurrency> imdg = ctx.obtainMap(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class);
ImdgPredicateBuilder pb = imdg.predicateBuilder();
Collection<OrderCurrency> orders = imdg.getCollectionObjectsByPredicate(

View file

@ -3,17 +3,16 @@ package ru.spcex.clearing.dflt.management.component.validation;
import java.util.Optional;
import ru.clearing.classes.statics.data.misc.OrderCurrency;
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.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
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();
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCompanyNewRequest> ctx) {
public Optional<EnumMessage> validate(ImdgValidationContext<?> ctx) {
OrderCurrency order = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
if (!OrderAffil.PLBL.equalsByKey(order.getType())) {
return of(DefaultManagementErrors.OnlyBalancingOrdersAllowed);

View file

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

View file

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

View file

@ -1,9 +1,12 @@
package ru.spcex.clearing.platform.messaging.domain.cud.order;
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.WithQuantityLot;
import ru.spcex.platform.classes.base.interfaces.WithTcrId;
public class OrderCompanyUpdateRequest implements WithId {
public class OrderCompanyUpdateRequest implements WithId, WithQuantityLot, WithTcrId, WithCompanyId {
@JsonProperty
private Long id;
@JsonProperty