STrades validation: проверка security для Fond
This commit is contained in:
parent
6fbf4efa1c
commit
cf1db1b604
9 changed files with 83 additions and 55 deletions
|
|
@ -105,9 +105,11 @@ public class ValidationConfig {
|
|||
ImdgValidationContext<STrades> context = new ImdgValidationContext<>();
|
||||
context.setValidatedObject(sTrades);
|
||||
context.addImdg(IMDGDistributedNames.Map_Security, imdgSecurity);
|
||||
context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, imdgMoneyMarketSecurity);
|
||||
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
|
||||
context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry);
|
||||
context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeSecurityImdg);
|
||||
context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, imdgMoneyMarketSecurity);
|
||||
context.addImdg(IMDGDistributedNames.Map_EquitySecurity, equitySecurityImdg);
|
||||
context.setLogPrefix(LogPrefixId.INSTANCE);
|
||||
return new ValidatorImpl<>(context,
|
||||
STradesValidationRule.SecurityPresentFond,
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import ru.spcex.clearing.error.ClearingError;
|
|||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
|
||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
|
@ -29,8 +30,12 @@ public enum STradesValidationRule implements IValidationRule<ImdgValidationConte
|
|||
if (TextUtil.isEmpty(validatedObject.getSecCode())) {
|
||||
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
|
||||
}
|
||||
Imdg<Security> securityImdg = context.obtainMap(IMDGDistributedNames.Map_Security, Security.class);
|
||||
Security security = securityImdg.getFirstObjectByFieldValues(Map.of("securitySymbol", validatedObject.getSecCode()));
|
||||
SecuritySelector<Security> slctr = new SecuritySelector<>(
|
||||
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
|
||||
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
|
||||
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class)
|
||||
);
|
||||
Security security = slctr.selectSecurityBySymbol(validatedObject.getSecCode());
|
||||
if (security == null) {
|
||||
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import org.springframework.context.annotation.Bean;
|
|||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
import ru.spcex.clearing.securities.config.element.SecuritiesServiceSettings;
|
||||
import ru.spcex.clearing.util.security.SecuritySelector;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
||||
|
||||
|
|
@ -45,10 +44,4 @@ public class SecuritiesServiceImdgConfig {
|
|||
pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion);
|
||||
return pool;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
@Bean
|
||||
public SecuritySelector securitySelector(ImdgProvider imdgProvider) {
|
||||
return new SecuritySelector(imdgProvider);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
package ru.spcex.clearing.securities.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import ru.clearing.classes.statics.data.security.Security;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
|
||||
|
||||
@Configuration
|
||||
public class SecuritySelectorConfig {
|
||||
@Autowired
|
||||
@Bean
|
||||
public SecuritySelector<Security> securitySelector(ImdgProvider imdgProvider) {
|
||||
return new SecuritySelector<>(imdgProvider, Security.class);
|
||||
}
|
||||
}
|
||||
|
|
@ -19,7 +19,6 @@ import ru.spcex.clearing.platform.messaging.domain.cud.securitites.ListingUpdate
|
|||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||
import ru.spcex.clearing.securities.validation.ListingValidationProvider;
|
||||
import ru.spcex.clearing.util.security.SecuritySelector;
|
||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||
import ru.spcex.clearing.util.services.RequestHelper;
|
||||
import ru.spcex.clearing.validation.common.ValidationHelper;
|
||||
|
|
@ -28,6 +27,7 @@ import ru.spcex.platform.enumeration.WorkflowStatus;
|
|||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgId;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
|
||||
import ru.spcex.platform.utils.error.ValidationException;
|
||||
|
||||
import java.time.Instant;
|
||||
|
|
@ -42,7 +42,7 @@ public class ListingService extends QueueConsumer implements InitializingBean {
|
|||
private final ListingValidationProvider validation;
|
||||
private final UserRoleVerification userRoleVerification;
|
||||
private final ValidationHelper validationHelper;
|
||||
private final SecuritySelector securitySelector;
|
||||
private final SecuritySelector<Security> securitySelector;
|
||||
private final RequestHelper requestHelper;
|
||||
|
||||
@Autowired
|
||||
|
|
@ -52,7 +52,7 @@ public class ListingService extends QueueConsumer implements InitializingBean {
|
|||
ListingValidationProvider validation,
|
||||
UserRoleVerification userRoleVerification,
|
||||
ValidationHelper validationHelper,
|
||||
SecuritySelector securitySelector,
|
||||
SecuritySelector<Security> securitySelector,
|
||||
RequestHelper requestHelper) {
|
||||
super(kafkaQueue, kafkaProducer);
|
||||
this.validation = validation;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteReques
|
|||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.ListingNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.ListingUpdateRequest;
|
||||
import ru.spcex.clearing.securities.errors.SecuritiesError;
|
||||
import ru.spcex.clearing.util.security.SecuritySelector;
|
||||
import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule;
|
||||
import ru.spcex.clearing.validation.common.rules.IdPresentRule;
|
||||
import ru.spcex.clearing.validation.common.rules.SpecialIdPresentRule;
|
||||
|
|
@ -19,6 +18,7 @@ import ru.spcex.platform.enumeration.InstrumentType;
|
|||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
|
||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||
import ru.spcex.platform.imdg.validation.rule.PresentById;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
|
|
@ -36,10 +36,10 @@ public class ListingValidationProvider {
|
|||
final Imdg<SpcexObjectBase> currencyCodeDictionaryImdg;
|
||||
final Imdg<Listing> listingImdg;
|
||||
final Imdg<ru.clearing.classes.statics.data.misc.Market> marketImdg;
|
||||
final SecuritySelector securitySelector;
|
||||
final SecuritySelector<Security> securitySelector;
|
||||
|
||||
|
||||
public ListingValidationProvider(ImdgProvider imdgProvider, SecuritySelector securitySelector) {
|
||||
public ListingValidationProvider(ImdgProvider imdgProvider, SecuritySelector<Security> securitySelector) {
|
||||
this.securitySelector = securitySelector;
|
||||
this.workflowStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, SpcexObjectBase.class);
|
||||
this.currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, SpcexObjectBase.class);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
|
|||
import ru.clearing.platform.dictionary.*;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.securities.config.ErrorResolverConfig;
|
||||
import ru.spcex.clearing.securities.config.SecuritySelectorConfig;
|
||||
import ru.spcex.clearing.securities.config.ValidationConfig;
|
||||
import ru.spcex.clearing.securities.service.cud.*;
|
||||
import ru.spcex.clearing.securities.validation.ListingValidationProvider;
|
||||
|
|
@ -23,7 +24,6 @@ import ru.spcex.clearing.securities.validation.ValidationProvider;
|
|||
import ru.spcex.clearing.test.MatcherFactory;
|
||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||
import ru.spcex.clearing.util.security.SecuritySelector;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
|
|
@ -40,7 +40,7 @@ import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProv
|
|||
FixedIncomeSecurityService.class,
|
||||
MoneyMarketSecurityService.class,
|
||||
ListingService.class, ListingValidationProvider.class,
|
||||
SecuritySelector.class,
|
||||
SecuritySelectorConfig.class,
|
||||
ImdgTestConfig.class,
|
||||
KafkaTestConfig.class,
|
||||
ValidationProvider.class,
|
||||
|
|
|
|||
|
|
@ -1,37 +0,0 @@
|
|||
package ru.spcex.clearing.util.security;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
|
||||
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
|
||||
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
|
||||
import ru.clearing.classes.statics.data.security.Security;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
@Component
|
||||
public class SecuritySelector {
|
||||
|
||||
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
||||
private final Imdg<MoneyMarketSecurity> moneyMarketSecurityImdg;
|
||||
private final Imdg<EquitySecurity> equitySecurity;
|
||||
|
||||
@Autowired
|
||||
public SecuritySelector(ImdgProvider imdgProvider) {
|
||||
this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class);
|
||||
this.moneyMarketSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class);
|
||||
this.equitySecurity = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
|
||||
}
|
||||
|
||||
public Security selectSecurityById(Long securityId) {
|
||||
Security security = fixedIncomeSecurityImdg.getSingleObjectByID(securityId);
|
||||
if (security != null) return security;
|
||||
security = moneyMarketSecurityImdg.getSingleObjectByID(securityId);
|
||||
if (security != null) return security;
|
||||
security = equitySecurity.getSingleObjectByID(securityId);
|
||||
if (security != null) return security;
|
||||
|
||||
return security; // null
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
package ru.spcex.platform.imdg.api.predicate.specific;
|
||||
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class SecuritySelector<T extends SpcexObjectBase> {
|
||||
|
||||
private final Imdg<T> fixedIncomeSecurityImdg;
|
||||
private final Imdg<T> moneyMarketSecurityImdg;
|
||||
private final Imdg<T> equitySecurity;
|
||||
|
||||
public SecuritySelector(ImdgProvider imdgProvider, Class<T> clazz) {
|
||||
this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, clazz);
|
||||
this.moneyMarketSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, clazz);
|
||||
this.equitySecurity = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, clazz);
|
||||
}
|
||||
|
||||
public SecuritySelector(Imdg<T> fixedIncomeSecurityImdg,
|
||||
Imdg<T> moneyMarketSecurityImdg,
|
||||
Imdg<T> equitySecurity) {
|
||||
this.fixedIncomeSecurityImdg = fixedIncomeSecurityImdg;
|
||||
this.moneyMarketSecurityImdg = moneyMarketSecurityImdg;
|
||||
this.equitySecurity = equitySecurity;
|
||||
}
|
||||
|
||||
public T selectSecurityById(Long securityId) {
|
||||
return selectSecurityByAnything(imdg -> imdg.getSingleObjectByID(securityId));
|
||||
}
|
||||
|
||||
public T selectSecurityBySymbol(String securitySymbol) {
|
||||
Map<String, String> fields = Map.of("securitySymbol", securitySymbol);
|
||||
return selectSecurityByAnything(imdg -> imdg.getFirstObjectByFieldValues(fields));
|
||||
}
|
||||
|
||||
private T selectSecurityByAnything(Function<Imdg<T>, T> retriever) {
|
||||
T security = retriever.apply(fixedIncomeSecurityImdg);
|
||||
if (security != null) return security;
|
||||
security = retriever.apply(moneyMarketSecurityImdg);
|
||||
if (security != null) return security;
|
||||
security = retriever.apply(equitySecurity);
|
||||
return security;// null
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue