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;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.clearing.classes.statics.data.security.Security;
|
||||
import ru.clearing.platform.dictionary.OvernightTypeDictionary;
|
||||
import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyByCompanyAndTcrAlreadyPresent;
|
||||
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.specific.IdEqualPredicate;
|
||||
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.LogPrefixId;
|
||||
import ru.spcex.platform.imdg.validation.rule.PresentById;
|
||||
import ru.spcex.platform.imdg.validation.rule.PresentByPredicate;
|
||||
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.ValidatorImpl;
|
||||
|
||||
|
|
@ -52,6 +56,7 @@ public class ValidationConfig {
|
|||
private final Imdg<OvernightTypeDictionary> osTypeDictionaryImdg;
|
||||
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
||||
private final Imdg<Registry> rgsImdg;
|
||||
private final SecuritySelector<Security> secSelector;
|
||||
|
||||
@Autowired
|
||||
public ValidationConfig(ImdgProvider imdgProvider) {
|
||||
|
|
@ -62,6 +67,7 @@ public class ValidationConfig {
|
|||
this.orderCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class);
|
||||
this.tcrImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.secSelector = new SecuritySelector<>(imdgProvider, Security.class);
|
||||
}
|
||||
|
||||
public enum OvernightSettingsValidationStorage {
|
||||
|
|
@ -186,21 +192,6 @@ public class ValidationConfig {
|
|||
ctx.setValidatedObject(req);
|
||||
ctx.setLogPrefix(LogPrefixId.INSTANCE);
|
||||
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
|
||||
.builder(byId(orderCurrencyImdg.predicateBuilder(), req))
|
||||
|
|
@ -209,34 +200,23 @@ public class ValidationConfig {
|
|||
.store(OrderCurrencyValidationStored.OrderCurrency)
|
||||
.build();
|
||||
|
||||
ImdgPredicateBuilder rgsPb = rgsImdg.predicateBuilder();
|
||||
|
||||
var registryPresent = PresentByPredicate
|
||||
.builder(r -> {
|
||||
OrderCurrency order = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
|
||||
return rgsPb.equals("id", order.getRegistryId());
|
||||
})
|
||||
.mapName(IMDGDistributedNames.Map_Registry)
|
||||
.errorProvider(r -> {
|
||||
OrderCurrency order = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
|
||||
return recordNotFound("registry.id=" + order.getRegistryId());
|
||||
})
|
||||
.store(OrderCurrencyValidationStored.Registry)
|
||||
.build();
|
||||
var securityPresent = new IValidationRule<ImdgValidationContext<OrderCurrencyUpdateRequest>>() {
|
||||
@Override
|
||||
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCurrencyUpdateRequest> ctx) {
|
||||
OrderCurrencyUpdateRequest validatedObject = ctx.getValidatedObject();
|
||||
Security security = secSelector.selectSecurityById(validatedObject.getSecurityId());
|
||||
if (security == null) {
|
||||
return of(DefaultManagementErrors.RecordNotFound, "security.id=" + validatedObject.getSecurityId());
|
||||
}
|
||||
return empty();
|
||||
}
|
||||
};
|
||||
|
||||
return new ValidatorImpl<>(ctx,
|
||||
orderCurrencyPresentById,
|
||||
OvernightTypeChanged.INSTANCE,
|
||||
DictionaryPresentRule.instance(
|
||||
"overnightType",
|
||||
OvernightSettingsNewRequest::getOvernightType,
|
||||
IMDGDistributedNames.Map_OvernightTypeDictionary,
|
||||
OvernightTypeDictionary.class,
|
||||
DefaultManagementErrors.RequiredFieldIsEmpty,
|
||||
DefaultManagementErrors.DictionaryNotFound,
|
||||
true),
|
||||
SpotPairPresent.INSTANCE,
|
||||
registryPresent
|
||||
securityPresent
|
||||
//todo SecurityId/price/quantityLot validation?/Side/status/Comment
|
||||
|
||||
);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
|||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<OvernightSettings> overnightSettingsImdg;
|
||||
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
||||
private final Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateValidator;
|
||||
private final Function<OrderCurrencyUpdateRequest, IValidator> overnightTypeUpdateValidator;
|
||||
private final Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator;
|
||||
private final Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator;
|
||||
|
|
@ -70,6 +71,8 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
|||
UserRoleVerification userRoleVerification,
|
||||
@Qualifier("orderCurrencyUpdateOvernightTypeValidator")
|
||||
Function<OrderCurrencyUpdateRequest, IValidator> overnightTypeUpdateValidator,
|
||||
@Qualifier("orderCurrencyUpdateValidator")
|
||||
Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateValidator,
|
||||
Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator,
|
||||
Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator,
|
||||
Function<CommonDeleteRequest, IValidator> orderCompanyDeleteValidator,
|
||||
|
|
@ -78,6 +81,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
|||
super(kafkaQueue, kafkaProducer);
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
|
||||
this.orderCurrencyUpdateValidator = orderCurrencyUpdateValidator;
|
||||
this.overnightTypeUpdateValidator = overnightTypeUpdateValidator;
|
||||
this.orderCompanyNewValidator = orderCompanyNewValidator;
|
||||
this.orderCompanyUpdateValidator = orderCompanyUpdateValidator;
|
||||
|
|
@ -111,7 +115,20 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
|||
|
||||
private RequestInfoUpdate orderCurrencyUpdate(BaseRequest<OrderCurrencyUpdateRequest> req) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue