This commit is contained in:
parent
ecbaecf7eb
commit
b7eeb13040
2 changed files with 38 additions and 41 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.spcex.clearing.dflt.management.config;
|
package ru.spcex.clearing.dflt.management.config;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
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;
|
||||||
|
|
@ -10,6 +11,7 @@ import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
||||||
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
||||||
import ru.clearing.classes.statics.data.registry.Registry;
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
|
import ru.clearing.classes.statics.data.security.Security;
|
||||||
import ru.clearing.platform.dictionary.OvernightTypeDictionary;
|
import ru.clearing.platform.dictionary.OvernightTypeDictionary;
|
||||||
import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyByCompanyAndTcrAlreadyPresent;
|
import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyByCompanyAndTcrAlreadyPresent;
|
||||||
import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyPLBLCheck;
|
import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyPLBLCheck;
|
||||||
|
|
@ -34,11 +36,13 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
import ru.spcex.platform.imdg.api.predicate.specific.IdEqualPredicate;
|
import ru.spcex.platform.imdg.api.predicate.specific.IdEqualPredicate;
|
||||||
import static ru.spcex.platform.imdg.api.predicate.specific.IdEqualPredicate.byId;
|
import static ru.spcex.platform.imdg.api.predicate.specific.IdEqualPredicate.byId;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
|
||||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
import ru.spcex.platform.imdg.validation.LogPrefixId;
|
import ru.spcex.platform.imdg.validation.LogPrefixId;
|
||||||
import ru.spcex.platform.imdg.validation.rule.PresentById;
|
import ru.spcex.platform.imdg.validation.rule.PresentById;
|
||||||
import ru.spcex.platform.imdg.validation.rule.PresentByPredicate;
|
import ru.spcex.platform.imdg.validation.rule.PresentByPredicate;
|
||||||
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.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||||
|
|
||||||
|
|
@ -52,6 +56,7 @@ public class ValidationConfig {
|
||||||
private final Imdg<OvernightTypeDictionary> osTypeDictionaryImdg;
|
private final Imdg<OvernightTypeDictionary> osTypeDictionaryImdg;
|
||||||
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
||||||
private final Imdg<Registry> rgsImdg;
|
private final Imdg<Registry> rgsImdg;
|
||||||
|
private final SecuritySelector<Security> secSelector;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public ValidationConfig(ImdgProvider imdgProvider) {
|
public ValidationConfig(ImdgProvider imdgProvider) {
|
||||||
|
|
@ -62,6 +67,7 @@ public class ValidationConfig {
|
||||||
this.orderCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class);
|
this.orderCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.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.secSelector = new SecuritySelector<>(imdgProvider, Security.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum OvernightSettingsValidationStorage {
|
public enum OvernightSettingsValidationStorage {
|
||||||
|
|
@ -186,21 +192,6 @@ public class ValidationConfig {
|
||||||
ctx.setValidatedObject(req);
|
ctx.setValidatedObject(req);
|
||||||
ctx.setLogPrefix(LogPrefixId.INSTANCE);
|
ctx.setLogPrefix(LogPrefixId.INSTANCE);
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_OrderCurrency, orderCurrencyImdg);
|
ctx.addImdg(IMDGDistributedNames.Map_OrderCurrency, orderCurrencyImdg);
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_Registry, rgsImdg);
|
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_OvernightTypeDictionary, osTypeDictionaryImdg);
|
|
||||||
|
|
||||||
//@JsonProperty
|
|
||||||
//private Long securityId;
|
|
||||||
//@JsonProperty
|
|
||||||
//private BigDecimal price;
|
|
||||||
//@JsonProperty
|
|
||||||
//private Long quantityLot;
|
|
||||||
//@JsonProperty
|
|
||||||
//private String side;
|
|
||||||
//@JsonProperty
|
|
||||||
//private String status;
|
|
||||||
//@JsonProperty
|
|
||||||
//private String comment;
|
|
||||||
|
|
||||||
var orderCurrencyPresentById = PresentByPredicate
|
var orderCurrencyPresentById = PresentByPredicate
|
||||||
.builder(byId(orderCurrencyImdg.predicateBuilder(), req))
|
.builder(byId(orderCurrencyImdg.predicateBuilder(), req))
|
||||||
|
|
@ -209,34 +200,23 @@ public class ValidationConfig {
|
||||||
.store(OrderCurrencyValidationStored.OrderCurrency)
|
.store(OrderCurrencyValidationStored.OrderCurrency)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
ImdgPredicateBuilder rgsPb = rgsImdg.predicateBuilder();
|
var securityPresent = new IValidationRule<ImdgValidationContext<OrderCurrencyUpdateRequest>>() {
|
||||||
|
@Override
|
||||||
var registryPresent = PresentByPredicate
|
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCurrencyUpdateRequest> ctx) {
|
||||||
.builder(r -> {
|
OrderCurrencyUpdateRequest validatedObject = ctx.getValidatedObject();
|
||||||
OrderCurrency order = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
|
Security security = secSelector.selectSecurityById(validatedObject.getSecurityId());
|
||||||
return rgsPb.equals("id", order.getRegistryId());
|
if (security == null) {
|
||||||
})
|
return of(DefaultManagementErrors.RecordNotFound, "security.id=" + validatedObject.getSecurityId());
|
||||||
.mapName(IMDGDistributedNames.Map_Registry)
|
}
|
||||||
.errorProvider(r -> {
|
return empty();
|
||||||
OrderCurrency order = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
|
}
|
||||||
return recordNotFound("registry.id=" + order.getRegistryId());
|
};
|
||||||
})
|
|
||||||
.store(OrderCurrencyValidationStored.Registry)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
return new ValidatorImpl<>(ctx,
|
return new ValidatorImpl<>(ctx,
|
||||||
orderCurrencyPresentById,
|
orderCurrencyPresentById,
|
||||||
OvernightTypeChanged.INSTANCE,
|
securityPresent
|
||||||
DictionaryPresentRule.instance(
|
//todo SecurityId/price/quantityLot validation?/Side/status/Comment
|
||||||
"overnightType",
|
|
||||||
OvernightSettingsNewRequest::getOvernightType,
|
|
||||||
IMDGDistributedNames.Map_OvernightTypeDictionary,
|
|
||||||
OvernightTypeDictionary.class,
|
|
||||||
DefaultManagementErrors.RequiredFieldIsEmpty,
|
|
||||||
DefaultManagementErrors.DictionaryNotFound,
|
|
||||||
true),
|
|
||||||
SpotPairPresent.INSTANCE,
|
|
||||||
registryPresent
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
||||||
private final Imdg<Registry> registryImdg;
|
private final Imdg<Registry> registryImdg;
|
||||||
private final Imdg<OvernightSettings> overnightSettingsImdg;
|
private final Imdg<OvernightSettings> overnightSettingsImdg;
|
||||||
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
||||||
|
private final Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateValidator;
|
||||||
private final Function<OrderCurrencyUpdateRequest, IValidator> overnightTypeUpdateValidator;
|
private final Function<OrderCurrencyUpdateRequest, IValidator> overnightTypeUpdateValidator;
|
||||||
private final Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator;
|
private final Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator;
|
||||||
private final Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator;
|
private final Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator;
|
||||||
|
|
@ -70,6 +71,8 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
||||||
UserRoleVerification userRoleVerification,
|
UserRoleVerification userRoleVerification,
|
||||||
@Qualifier("orderCurrencyUpdateOvernightTypeValidator")
|
@Qualifier("orderCurrencyUpdateOvernightTypeValidator")
|
||||||
Function<OrderCurrencyUpdateRequest, IValidator> overnightTypeUpdateValidator,
|
Function<OrderCurrencyUpdateRequest, IValidator> overnightTypeUpdateValidator,
|
||||||
|
@Qualifier("orderCurrencyUpdateValidator")
|
||||||
|
Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateValidator,
|
||||||
Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator,
|
Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator,
|
||||||
Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator,
|
Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator,
|
||||||
Function<CommonDeleteRequest, IValidator> orderCompanyDeleteValidator,
|
Function<CommonDeleteRequest, IValidator> orderCompanyDeleteValidator,
|
||||||
|
|
@ -78,6 +81,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
||||||
super(kafkaQueue, kafkaProducer);
|
super(kafkaQueue, kafkaProducer);
|
||||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
|
this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
|
||||||
|
this.orderCurrencyUpdateValidator = orderCurrencyUpdateValidator;
|
||||||
this.overnightTypeUpdateValidator = overnightTypeUpdateValidator;
|
this.overnightTypeUpdateValidator = overnightTypeUpdateValidator;
|
||||||
this.orderCompanyNewValidator = orderCompanyNewValidator;
|
this.orderCompanyNewValidator = orderCompanyNewValidator;
|
||||||
this.orderCompanyUpdateValidator = orderCompanyUpdateValidator;
|
this.orderCompanyUpdateValidator = orderCompanyUpdateValidator;
|
||||||
|
|
@ -111,7 +115,20 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
||||||
|
|
||||||
private RequestInfoUpdate orderCurrencyUpdate(BaseRequest<OrderCurrencyUpdateRequest> req) {
|
private RequestInfoUpdate orderCurrencyUpdate(BaseRequest<OrderCurrencyUpdateRequest> req) {
|
||||||
OrderCurrencyUpdateRequest payload = req.getRequestPayload();
|
OrderCurrencyUpdateRequest payload = req.getRequestPayload();
|
||||||
|
IValidator validator = orderCurrencyUpdateValidator.apply(payload);
|
||||||
|
Optional<EnumMessage> error = validator.tillFirstError();
|
||||||
|
if (error.isPresent()) {
|
||||||
|
return new RequestInfoUpdate(req.getId(), Status.Error, msgResolver.resolve(error.get()));
|
||||||
|
}
|
||||||
|
OrderCurrency order = validator.getStored(OrderCurrencyValidationStored.OrderCurrency);
|
||||||
|
order.setSecurityId(payload.getSecurityId());
|
||||||
|
order.setPrice(payload.getPrice());
|
||||||
|
order.setQuantityLot(BigDecimal.valueOf(payload.getQuantityLot()));
|
||||||
|
order.setSide(payload.getSide());
|
||||||
|
order.setStatus(payload.getStatus());
|
||||||
|
order.setComment(payload.getComment());
|
||||||
|
log.info("updating OrderCurrency[{}]", order.getId());
|
||||||
|
orderCurrencyImdg.update(order);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue