http://jira.mfd.msk:8088/browse/CLS-855
This commit is contained in:
parent
7f81e47fb6
commit
040e0e359d
6 changed files with 37 additions and 196 deletions
|
|
@ -31,6 +31,7 @@ import ru.clearing.classes.statics.data.sdf.SDf54;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf55;
|
import ru.clearing.classes.statics.data.sdf.SDf55;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf57;
|
import ru.clearing.classes.statics.data.sdf.SDf57;
|
||||||
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
||||||
|
import ru.clearing.classes.statics.data.security.DigitalCertificateSecurity;
|
||||||
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
|
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
|
||||||
import ru.clearing.classes.statics.data.security.Security;
|
import ru.clearing.classes.statics.data.security.Security;
|
||||||
import ru.clearing.classes.statics.data.statement.Statement;
|
import ru.clearing.classes.statics.data.statement.Statement;
|
||||||
|
|
@ -91,6 +92,7 @@ public class ValidationConfig {
|
||||||
Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
||||||
Imdg<EquitySecurity> equitySecurityImdg;
|
Imdg<EquitySecurity> equitySecurityImdg;
|
||||||
Imdg<CurrencyPairSecurity> currencyPairSecurityImdg;
|
Imdg<CurrencyPairSecurity> currencyPairSecurityImdg;
|
||||||
|
Imdg<DigitalCertificateSecurity> digitalCertificateSecurityImdg;
|
||||||
|
|
||||||
Imdg<CompanySymbols> imdgCompanySymbols;
|
Imdg<CompanySymbols> imdgCompanySymbols;
|
||||||
Imdg<Registry> imdgRegistry;
|
Imdg<Registry> imdgRegistry;
|
||||||
|
|
@ -138,6 +140,7 @@ public class ValidationConfig {
|
||||||
this.pmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
this.pmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||||
this.ctgrImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
|
this.ctgrImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
|
||||||
this.currencyPairSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
|
this.currencyPairSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
|
||||||
|
this.digitalCertificateSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, DigitalCertificateSecurity.class);
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -216,6 +219,7 @@ public class ValidationConfig {
|
||||||
context.addImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, currencyPairSecurityImdg);
|
context.addImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, currencyPairSecurityImdg);
|
||||||
context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry);
|
context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry);
|
||||||
context.addImdg(IMDGDistributedNames.Map_SDf20, imdgSdf20);
|
context.addImdg(IMDGDistributedNames.Map_SDf20, imdgSdf20);
|
||||||
|
context.addImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, digitalCertificateSecurityImdg);
|
||||||
context.setLogPrefix(LogPrefixId.INSTANCE);
|
context.setLogPrefix(LogPrefixId.INSTANCE);
|
||||||
return new ValidatorImpl<>(context,
|
return new ValidatorImpl<>(context,
|
||||||
CompanyByTradingCodeValidationRule.instance(SDf21::getDepoCodeCl),
|
CompanyByTradingCodeValidationRule.instance(SDf21::getDepoCodeCl),
|
||||||
|
|
@ -305,6 +309,7 @@ public class ValidationConfig {
|
||||||
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
|
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
|
||||||
context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry);
|
context.addImdg(IMDGDistributedNames.Map_Registry, imdgRegistry);
|
||||||
context.addImdg(IMDGDistributedNames.Map_Session, imdgSession);
|
context.addImdg(IMDGDistributedNames.Map_Session, imdgSession);
|
||||||
|
context.addImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, digitalCertificateSecurityImdg);
|
||||||
context.setLogPrefix(LogPrefixId.INSTANCE);
|
context.setLogPrefix(LogPrefixId.INSTANCE);
|
||||||
return new ValidatorImpl<>(context,
|
return new ValidatorImpl<>(context,
|
||||||
Sdf10ValidationRule.DepoAccountPresent,
|
Sdf10ValidationRule.DepoAccountPresent,
|
||||||
|
|
@ -458,6 +463,7 @@ public class ValidationConfig {
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity , imdgMoneyMarketSecurity);
|
ctx.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity , imdgMoneyMarketSecurity);
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_EquitySecurity , equitySecurityImdg);
|
ctx.addImdg(IMDGDistributedNames.Map_EquitySecurity , equitySecurityImdg);
|
||||||
ctx.addImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, currencyPairSecurityImdg);
|
ctx.addImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, currencyPairSecurityImdg);
|
||||||
|
ctx.addImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, digitalCertificateSecurityImdg);
|
||||||
return new ValidatorImpl<>(ctx,
|
return new ValidatorImpl<>(ctx,
|
||||||
Sdf20ValidationRule.Fields,
|
Sdf20ValidationRule.Fields,
|
||||||
Sdf20ValidationRule.AccountPresent,
|
Sdf20ValidationRule.AccountPresent,
|
||||||
|
|
|
||||||
|
|
@ -1,167 +0,0 @@
|
||||||
package ru.spcex.clearing.service.validation;
|
|
||||||
|
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
|
||||||
import ru.clearing.classes.statics.data.misc.STrades;
|
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
|
||||||
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
|
||||||
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
|
|
||||||
import ru.clearing.classes.statics.data.security.Security;
|
|
||||||
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;
|
|
||||||
import ru.spcex.platform.utils.text.TextUtil;
|
|
||||||
import ru.spcex.platform.utils.validation.IValidationRule;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public enum STradesValidationRule implements IValidationRule<ImdgValidationContext<STrades>> {
|
|
||||||
|
|
||||||
// 2.1. Найти в security запись, у которой security.securitySymbol=sTrades.secCode.
|
|
||||||
// Если такой записи нет, записать в лог ошибку (5416) "Инструмент %s не найден".
|
|
||||||
SecurityPresentFond() {
|
|
||||||
@Override
|
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
|
|
||||||
STrades validatedObject = context.getValidatedObject();
|
|
||||||
if (TextUtil.isEmpty(validatedObject.getSecCode())) {
|
|
||||||
return of(ClearingError.SecurityNotFound, 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),
|
|
||||||
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class)
|
|
||||||
);
|
|
||||||
Security security = slctr.selectSecurityBySymbol(validatedObject.getSecCode().trim());
|
|
||||||
if (security == null) {
|
|
||||||
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
|
|
||||||
}
|
|
||||||
context.storeObject(ValidationStored.STradesSecurity, security);
|
|
||||||
return empty();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
SecurityPresentDeposit() {
|
|
||||||
@Override
|
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
|
|
||||||
STrades validatedObject = context.getValidatedObject();
|
|
||||||
if (TextUtil.isEmpty(validatedObject.getSecCode())) {
|
|
||||||
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
|
|
||||||
}
|
|
||||||
String secCode = validatedObject.getSecCode().trim();
|
|
||||||
secCode = secCode.substring(0, Math.min(7, secCode.length()));
|
|
||||||
Imdg<MoneyMarketSecurity> securityImdg = context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class);
|
|
||||||
Security security = securityImdg.getFirstObjectByFieldValues(Map.of("securitySymbol", secCode));
|
|
||||||
if (security == null) {
|
|
||||||
return of(ClearingError.SecurityNotFound, secCode);
|
|
||||||
}
|
|
||||||
context.storeObject(ValidationStored.STradesSecurity, security);
|
|
||||||
return empty();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
SecurityPresentCurrencyPair() {
|
|
||||||
@Override
|
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
|
|
||||||
STrades validatedObject = context.getValidatedObject();
|
|
||||||
if (TextUtil.isEmpty(validatedObject.getSecCode())) {
|
|
||||||
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
|
|
||||||
}
|
|
||||||
|
|
||||||
String secCode = validatedObject.getSecCode().trim();
|
|
||||||
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),
|
|
||||||
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class)
|
|
||||||
);
|
|
||||||
Security security = slctr.selectSecurityBySymbol(secCode);
|
|
||||||
/*
|
|
||||||
Imdg<CurrencyPairSecurity> securityImdg = context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
|
|
||||||
String secCode = validatedObject.getSecCode();
|
|
||||||
Security security = securityImdg.getFirstObjectByFieldValues(Map.of("securitySymbol", secCode));
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (security == null) {
|
|
||||||
return of(ClearingError.SecurityNotFound, secCode);
|
|
||||||
}
|
|
||||||
context.storeObject(ValidationStored.STradesSecurity, security);
|
|
||||||
return empty();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 2.2. Найти в company запись, у которой company.tradingCode=sTrades.firmId.
|
|
||||||
// Если такой записи нет, записать в лог ошибку (5410) "Компания %s не найдена".
|
|
||||||
CompanyPresent() {
|
|
||||||
@Override
|
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
|
|
||||||
STrades validatedObject = context.getValidatedObject();
|
|
||||||
if (TextUtil.isEmpty(validatedObject.getFirmId())) {
|
|
||||||
return of(ClearingError.CompanyNotFound, validatedObject.getFirmId());
|
|
||||||
}
|
|
||||||
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
|
|
||||||
Company company = companyImdg.getFirstObjectByFieldValues(Map.of("tradingCode", validatedObject.getFirmId()));
|
|
||||||
if (company == null) {
|
|
||||||
return of(ClearingError.CompanyNotFound, validatedObject.getFirmId());
|
|
||||||
}
|
|
||||||
context.storeObject(ValidationStored.STradesCompany, company);
|
|
||||||
return empty();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
CounterCompanyPresent() {
|
|
||||||
@Override
|
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
|
|
||||||
STrades validatedObject = context.getValidatedObject();
|
|
||||||
if (TextUtil.isEmpty(validatedObject.getCpFirmId())) {
|
|
||||||
return of(ClearingError.CompanyNotFound, validatedObject.getCpFirmId());
|
|
||||||
}
|
|
||||||
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
|
|
||||||
Company company = companyImdg.getFirstObjectByFieldValues(Map.of("tradingCode", validatedObject.getCpFirmId()));
|
|
||||||
if (company == null) {
|
|
||||||
return of(ClearingError.CompanyNotFound, validatedObject.getCpFirmId());
|
|
||||||
}
|
|
||||||
context.storeObject(ValidationStored.STradesCounterCompany, company);
|
|
||||||
return empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
|
||||||
// 2.3. Найти в tradingClearingRegistry запись, у которой tradingClearingRegistry.code=sTrades.account
|
|
||||||
// и tradingClearingRegistry.companyId=companyId, найденому в предыдущем пункте.
|
|
||||||
// Если такой записи нет, записать в лог ошибку (5418) "Торгово-клиринговый регистр %s не найден для компании %s".
|
|
||||||
TradingClearingRegistryPresent() {
|
|
||||||
@Override
|
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<STrades> context) {
|
|
||||||
STrades validatedObject = context.getValidatedObject();
|
|
||||||
if (TextUtil.isEmpty(validatedObject.getAccount())) {
|
|
||||||
return of(ClearingError.TradingClearingRegistryNotFound, "", validatedObject.getAccount());
|
|
||||||
}
|
|
||||||
if (context.getStoredObject(ValidationStored.STradesCompany) == null) { //maybe unnecessary
|
|
||||||
return of(ClearingError.CompanyNotFound, validatedObject.getSecCode());
|
|
||||||
}
|
|
||||||
Imdg<TradingClearingRegistry> registryImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
|
||||||
TradingClearingRegistry tcRegister = registryImdg.getFirstObjectByFieldValues(
|
|
||||||
Map.of("code", validatedObject.getAccount().trim(),
|
|
||||||
"companyId", ((Company) context.getStoredObject(ValidationStored.STradesCompany)).getId()
|
|
||||||
));
|
|
||||||
if (tcRegister == null) {
|
|
||||||
return of(ClearingError.TradingClearingRegistryNotFound, "", validatedObject.getAccount());
|
|
||||||
}
|
|
||||||
// 2.4. Проверить, что найденный торгово-клиринговый регистр в активном состоянии:
|
|
||||||
// tradingClearingRegistry.status≠BLKD/SSPD/CLOS (см. справочник serviceStatus).
|
|
||||||
// Иначе записать в лог ошибку (5419) "Торгово-клиринговый регистр %s неактивен".
|
|
||||||
ServiceStatus status = IEnumKey.getEnumByKey(ServiceStatus.class, tcRegister.getStatus());
|
|
||||||
if (IEnumKey.contains(status, ServiceStatus.Blocked, ServiceStatus.Suspended, ServiceStatus.Closed)) {
|
|
||||||
return of(ClearingError.TradingClearingRegistryNotActive, validatedObject.getAccount());
|
|
||||||
}
|
|
||||||
context.storeObject(ValidationStored.STradesTradingClearingRegistry, tcRegister);
|
|
||||||
return empty();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String ruleName() {
|
|
||||||
return "STradesValidationRule." + name();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
package ru.spcex.clearing.service.validation;
|
package ru.spcex.clearing.service.validation;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
|
|
@ -7,13 +10,17 @@ import ru.clearing.classes.statics.data.company.Company;
|
||||||
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.sdf.SDf20;
|
import ru.clearing.classes.statics.data.sdf.SDf20;
|
||||||
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
|
||||||
import ru.clearing.classes.statics.data.security.Security;
|
import ru.clearing.classes.statics.data.security.Security;
|
||||||
import ru.spcex.clearing.error.ClearingError;
|
import ru.spcex.clearing.error.ClearingError;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.service.AssetTrio;
|
import ru.spcex.clearing.service.AssetTrio;
|
||||||
import ru.spcex.clearing.service.registry.RegistryManager;
|
import ru.spcex.clearing.service.registry.RegistryManager;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
|
import ru.spcex.platform.enumeration.NoRef;
|
||||||
|
import ru.spcex.platform.enumeration.OperationCode;
|
||||||
|
import static ru.spcex.platform.enumeration.RegistryTradingParams.*;
|
||||||
|
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||||
|
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
|
@ -22,16 +29,10 @@ 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.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
import ru.spcex.platform.utils.text.TextUtil;
|
|
||||||
import ru.spcex.platform.utils.validation.IValidationRule;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.*;
|
|
||||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.parseLeadingZeroes;
|
import static ru.spcex.platform.utils.number.BigDecimalUtil.parseLeadingZeroes;
|
||||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||||
|
import ru.spcex.platform.utils.text.TextUtil;
|
||||||
|
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
|
|
||||||
public enum Sdf20ValidationRule implements IValidationRule<ImdgValidationContext<SDf20>> {
|
public enum Sdf20ValidationRule implements IValidationRule<ImdgValidationContext<SDf20>> {
|
||||||
Fields() {
|
Fields() {
|
||||||
|
|
@ -109,7 +110,8 @@ public enum Sdf20ValidationRule implements IValidationRule<ImdgValidationContext
|
||||||
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
|
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
|
||||||
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
|
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
|
||||||
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class),
|
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class),
|
||||||
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class)
|
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class),
|
||||||
|
context.obtainMap(IMDGDistributedNames.Map_DigitalCertificateSecurity, Security.class)
|
||||||
);
|
);
|
||||||
Security securityFound = slctr.selectSecurityBySymbol(security);
|
Security securityFound = slctr.selectSecurityBySymbol(security);
|
||||||
if (securityFound == null) {
|
if (securityFound == null) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
package ru.spcex.clearing.service.validation;
|
package ru.spcex.clearing.service.validation;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.Function;
|
||||||
import ru.clearing.classes.statics.data.security.Security;
|
import ru.clearing.classes.statics.data.security.Security;
|
||||||
import ru.spcex.clearing.error.ClearingError;
|
import ru.spcex.clearing.error.ClearingError;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
|
@ -9,10 +12,6 @@ import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.text.TextUtil;
|
import ru.spcex.platform.utils.text.TextUtil;
|
||||||
import ru.spcex.platform.utils.validation.IValidationRule;
|
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class SecurityBySecurityCodeValidationRule<T> implements IValidationRule<ImdgValidationContext<T>> {
|
public class SecurityBySecurityCodeValidationRule<T> implements IValidationRule<ImdgValidationContext<T>> {
|
||||||
|
|
||||||
private final Function<T, String> securitySymbolExtractor;
|
private final Function<T, String> securitySymbolExtractor;
|
||||||
|
|
@ -37,7 +36,8 @@ public class SecurityBySecurityCodeValidationRule<T> implements IValidationRule<
|
||||||
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
|
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
|
||||||
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
|
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
|
||||||
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class),
|
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class),
|
||||||
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class)
|
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class),
|
||||||
|
context.obtainMap(IMDGDistributedNames.Map_DigitalCertificateSecurity, Security.class)
|
||||||
);
|
);
|
||||||
Security security = secSel.selectSecurityBySymbol(securitySymbol);
|
Security security = secSel.selectSecurityBySymbol(securitySymbol);
|
||||||
if (security == null) {
|
if (security == null) {
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ 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.registry.TradingClearingRegistryList;
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList;
|
||||||
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
||||||
|
import ru.clearing.classes.statics.data.security.DigitalCertificateSecurity;
|
||||||
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
|
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
|
||||||
import ru.clearing.classes.statics.data.security.Security;
|
import ru.clearing.classes.statics.data.security.Security;
|
||||||
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
||||||
|
|
@ -88,6 +89,7 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
private final Imdg<ClearingAccount> clAccImdg;
|
private final Imdg<ClearingAccount> clAccImdg;
|
||||||
private final Imdg<DepoAccount> dpAccImdg;
|
private final Imdg<DepoAccount> dpAccImdg;
|
||||||
private final Imdg<CurrencyPairSecurity> currPairSecImdg;
|
private final Imdg<CurrencyPairSecurity> currPairSecImdg;
|
||||||
|
private final Imdg<DigitalCertificateSecurity> digitCertSecImdg;
|
||||||
private final Imdg<FixedIncomeSecurity> fixIncSecImdg;
|
private final Imdg<FixedIncomeSecurity> fixIncSecImdg;
|
||||||
private final Imdg<MoneyMarketSecurity> monMrktSecImdg;
|
private final Imdg<MoneyMarketSecurity> monMrktSecImdg;
|
||||||
private final Imdg<EquitySecurity> eqtySecImdg;
|
private final Imdg<EquitySecurity> eqtySecImdg;
|
||||||
|
|
@ -118,6 +120,7 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
this.clAccImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class, null);
|
this.clAccImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class, null);
|
||||||
this.dpAccImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class, null);
|
this.dpAccImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class, null);
|
||||||
this.currPairSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class, cash.currPairCash);
|
this.currPairSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class, cash.currPairCash);
|
||||||
|
this.digitCertSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, DigitalCertificateSecurity.class, cash.digitCertSecCash);
|
||||||
this.fixIncSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, cash.fixIncSecCash);
|
this.fixIncSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, cash.fixIncSecCash);
|
||||||
this.monMrktSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class, cash.monMrktSecCash);
|
this.monMrktSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class, cash.monMrktSecCash);
|
||||||
this.eqtySecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class, cash.eqtySecCash);
|
this.eqtySecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class, cash.eqtySecCash);
|
||||||
|
|
@ -130,7 +133,8 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
this.secSelector = new SecuritySelector<>(castSecImdg(fixIncSecImdg),
|
this.secSelector = new SecuritySelector<>(castSecImdg(fixIncSecImdg),
|
||||||
castSecImdg(monMrktSecImdg),
|
castSecImdg(monMrktSecImdg),
|
||||||
castSecImdg(eqtySecImdg),
|
castSecImdg(eqtySecImdg),
|
||||||
castSecImdg(currPairSecImdg));
|
castSecImdg(currPairSecImdg),
|
||||||
|
castSecImdg(digitCertSecImdg));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static <T extends Security> Imdg<Security> castSecImdg(Imdg<T> m) {
|
private static <T extends Security> Imdg<Security> castSecImdg(Imdg<T> m) {
|
||||||
|
|
@ -497,6 +501,7 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
protected final CashV2<Long, ClearingAccount> clrAccCash;
|
protected final CashV2<Long, ClearingAccount> clrAccCash;
|
||||||
protected final CashV2<Long, Session> ssnCash;
|
protected final CashV2<Long, Session> ssnCash;
|
||||||
protected final CashV2<Long, CurrencyPairSecurity> currPairCash;
|
protected final CashV2<Long, CurrencyPairSecurity> currPairCash;
|
||||||
|
protected final CashV2<Long, DigitalCertificateSecurity> digitCertSecCash;
|
||||||
protected final CashV2<Long, FixedIncomeSecurity> fixIncSecCash;
|
protected final CashV2<Long, FixedIncomeSecurity> fixIncSecCash;
|
||||||
protected final CashV2<Long, MoneyMarketSecurity> monMrktSecCash;
|
protected final CashV2<Long, MoneyMarketSecurity> monMrktSecCash;
|
||||||
protected final CashV2<Long, EquitySecurity> eqtySecCash;
|
protected final CashV2<Long, EquitySecurity> eqtySecCash;
|
||||||
|
|
@ -513,6 +518,7 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
clrAccCash = add(new CashV2ById<>("clrAccCash"));
|
clrAccCash = add(new CashV2ById<>("clrAccCash"));
|
||||||
ssnCash = add(new CashV2ById<>("ssnCash"));
|
ssnCash = add(new CashV2ById<>("ssnCash"));
|
||||||
currPairCash = add(new CashV2ById<>("currPairCash"));
|
currPairCash = add(new CashV2ById<>("currPairCash"));
|
||||||
|
digitCertSecCash = add(new CashV2ById<>("digitCertSecCash"));
|
||||||
fixIncSecCash = add(new CashV2ById<>("fixIncSecCash"));
|
fixIncSecCash = add(new CashV2ById<>("fixIncSecCash"));
|
||||||
monMrktSecCash = add(new CashV2ById<>("monMrktSecCash"));
|
monMrktSecCash = add(new CashV2ById<>("monMrktSecCash"));
|
||||||
eqtySecCash = add(new CashV2ById<>("eqtySecCash"));
|
eqtySecCash = add(new CashV2ById<>("eqtySecCash"));
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ public class SecuritySelector<T extends SpcexObjectBase> {
|
||||||
private CashV2ByString<T> equitySecurityCash = null;
|
private CashV2ByString<T> equitySecurityCash = null;
|
||||||
private final Imdg<T> currencyPairSecurity;
|
private final Imdg<T> currencyPairSecurity;
|
||||||
private CashV2ByString<T> currencyPairSecurityCash = null;
|
private CashV2ByString<T> currencyPairSecurityCash = null;
|
||||||
private Imdg<T> digitCertSecurity;
|
private final Imdg<T> digitCertSecurity;
|
||||||
private CashV2ByString<T> digitCertSecCash = null;
|
private CashV2ByString<T> digitCertSecCash = null;
|
||||||
|
|
||||||
public SecuritySelector(ImdgProvider imdgProvider, Class<T> clazz) {
|
public SecuritySelector(ImdgProvider imdgProvider, Class<T> clazz) {
|
||||||
|
|
@ -35,20 +35,12 @@ public class SecuritySelector<T extends SpcexObjectBase> {
|
||||||
public SecuritySelector(Imdg<T> fixedIncomeSecurityImdg,
|
public SecuritySelector(Imdg<T> fixedIncomeSecurityImdg,
|
||||||
Imdg<T> moneyMarketSecurityImdg,
|
Imdg<T> moneyMarketSecurityImdg,
|
||||||
Imdg<T> equitySecurity,
|
Imdg<T> equitySecurity,
|
||||||
Imdg<T> currencyPairSecurity) {
|
Imdg<T> currencyPairSecurity,
|
||||||
|
Imdg<T> digitCertSecurity) {
|
||||||
this.fixedIncomeSecurityImdg = fixedIncomeSecurityImdg;
|
this.fixedIncomeSecurityImdg = fixedIncomeSecurityImdg;
|
||||||
this.moneyMarketSecurityImdg = moneyMarketSecurityImdg;
|
this.moneyMarketSecurityImdg = moneyMarketSecurityImdg;
|
||||||
this.equitySecurity = equitySecurity;
|
this.equitySecurity = equitySecurity;
|
||||||
this.currencyPairSecurity = currencyPairSecurity;
|
this.currencyPairSecurity = currencyPairSecurity;
|
||||||
this.digitCertSecurity = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SecuritySelector(Imdg<T> fixedIncomeSecurityImdg,
|
|
||||||
Imdg<T> moneyMarketSecurityImdg,
|
|
||||||
Imdg<T> equitySecurity,
|
|
||||||
Imdg<T> currencyPairSecurity,
|
|
||||||
Imdg<T> digitCertSecurity) {
|
|
||||||
this(fixedIncomeSecurityImdg, moneyMarketSecurityImdg, equitySecurity, currencyPairSecurity);
|
|
||||||
this.digitCertSecurity = digitCertSecurity;
|
this.digitCertSecurity = digitCertSecurity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -89,7 +81,9 @@ public class SecuritySelector<T extends SpcexObjectBase> {
|
||||||
security = retriever.apply(equitySecurity);
|
security = retriever.apply(equitySecurity);
|
||||||
if (security != null) return security;
|
if (security != null) return security;
|
||||||
security = retriever.apply(currencyPairSecurity);
|
security = retriever.apply(currencyPairSecurity);
|
||||||
return security;// null
|
if (security != null) return security;
|
||||||
|
security = retriever.apply(digitCertSecurity);
|
||||||
|
return security;
|
||||||
}
|
}
|
||||||
|
|
||||||
private T selectSecurityByAnything(BiFunction<Imdg<T>, CashV2ByString<T>, T> retriever) {
|
private T selectSecurityByAnything(BiFunction<Imdg<T>, CashV2ByString<T>, T> retriever) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue