From dec7f44e48160e8a3001c283edd51ead1dce4b45 Mon Sep 17 00:00:00 2001 From: psemenkov Date: Wed, 5 Apr 2023 16:26:32 +0300 Subject: [PATCH] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-258=20?= =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=B2=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BE?= =?UTF-8?q?=D1=87=D0=BD=D0=B8=D0=BA=D0=B0=D1=85,=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=B8,=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clearing-parent/securities-service/pom.xml | 17 ++ .../securities/component/ListingBuilder.java | 19 +- .../service/cud/EquitySecurityService.java | 4 +- .../cud/FixedIncomeSecurityService.java | 14 +- .../cud/MoneyMarketSecurityService.java | 7 +- .../service/cud/СurrencyService.java | 172 +++++++++++++++ .../validation/ValidationProvider.java | 94 +++++++- .../rule/HaveValidCodeByDictionary.java | 39 ++++ .../validation/rule/HaveValidCompanyId.java | 35 +++ .../IsValidInstrumentTypeFromRequest.java | 6 +- .../service/AbstractServiceTest.java | 53 +++++ .../service/EquitySecurityServiceTest.java | 9 +- .../FixedIncomeSecurityServiceTest.java | 207 +++++++++--------- .../service/MoneyMarketSecurityFactory.java | 25 ++- .../MoneyMarketSecurityServiceTest.java | 7 +- .../platform/messaging/domain/Consts.java | 4 + 16 files changed, 569 insertions(+), 143 deletions(-) create mode 100644 clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/СurrencyService.java create mode 100644 clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/HaveValidCodeByDictionary.java create mode 100644 clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/HaveValidCompanyId.java diff --git a/clearing-parent/securities-service/pom.xml b/clearing-parent/securities-service/pom.xml index 742105bf4..63e85f10a 100644 --- a/clearing-parent/securities-service/pom.xml +++ b/clearing-parent/securities-service/pom.xml @@ -77,6 +77,23 @@ ${project.artifactId} + + org.apache.maven.plugins + maven-surefire-plugin + 2.21.0 + + + org.junit.platform + junit-platform-surefire-provider + 1.2.0-M1 + + + org.junit.jupiter + junit-jupiter-engine + 5.2.0-M1 + + + diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/component/ListingBuilder.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/component/ListingBuilder.java index d8cec1b88..376c068d2 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/component/ListingBuilder.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/component/ListingBuilder.java @@ -13,12 +13,13 @@ import ru.spcex.platform.enumeration.Status; import java.math.BigDecimal; public class ListingBuilder { + private final String market = Market.mkrs.getKey(); public Listing byNewMms(MoneyMarketSecurity mms, MoneyMarketSecurityNewRequest mmsReq) { Listing listing = new Listing(); listing.setCreated(mms.getCreated()); listing.setSecurityId(mms.getId()); listing.setLotSize(BigDecimal.valueOf(mmsReq.getLotSize())); - listing.setMarket(Market.mkrs.getKey()); + listing.setMarket(market); listing.setSymbolCode(mms.getSecuritySymbol()); listing.setSymbolName(mms.getFullName()); listing.setTradingCurrency(mms.getNominalCurrency()); @@ -41,7 +42,7 @@ public class ListingBuilder { listing.setCreated(equitySecurity.getCreated()); listing.setSecurityId(equitySecurity.getId()); listing.setLotSize(BigDecimal.valueOf(request.getLotSize())); - listing.setMarket(Market.mkrs.getKey()); + listing.setMarket(market); listing.setSymbolCode(equitySecurity.getSecuritySymbol()); listing.setSymbolName(equitySecurity.getFullName()); // listing.setTradingCurrency(equitySecurity.getNominalCurrency()); @@ -54,6 +55,7 @@ public class ListingBuilder { listing.setSymbolCode(equitySecurity.getSecuritySymbol()); listing.setSymbolName(equitySecurity.getFullName()); listing.setWorkflowStatus(equitySecurity.getWorkflowStatus()); + listing.setMarket(market); listing.setLotSize(equitySecurity.getLotSize()); listing.setUpdated(equitySecurity.getUpdated()); return listing; @@ -64,11 +66,22 @@ public class ListingBuilder { listing.setCreated(instant.getCreated()); listing.setSecurityId(instant.getId()); listing.setLotSize(BigDecimal.valueOf(request.getLotSize())); - listing.setMarket(Market.mkrs.getKey()); + listing.setMarket(market); listing.setSymbolCode(instant.getSecuritySymbol()); listing.setSymbolName(instant.getFullName()); listing.setTradingCurrency(instant.getNominalCurrency()); listing.setWorkflowStatus(Status.Active.getKey()); return listing; } + + public Listing byFixedIncomeEquity(FixedIncomeSecurity fixedIncomeSecurity, Listing listing) { + listing.setSecurityId(fixedIncomeSecurity.getId()); + listing.setSymbolCode(fixedIncomeSecurity.getSecuritySymbol()); + listing.setSymbolName(fixedIncomeSecurity.getFullName()); + listing.setTradingCurrency(fixedIncomeSecurity.getNominalCurrency()); + listing.setWorkflowStatus(fixedIncomeSecurity.getWorkflowStatus()); + listing.setLotSize(fixedIncomeSecurity.getLotSize()); + listing.setUpdated(fixedIncomeSecurity.getUpdated()); + return listing; + } } diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/EquitySecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/EquitySecurityService.java index 4744748b9..e7accd308 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/EquitySecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/EquitySecurityService.java @@ -89,7 +89,7 @@ public class EquitySecurityService extends QueueConsumer implements Initializing equity.setIssuerId(req.getIssuerId()); equity.setShortNameEng(req.getShortNameEng()); equity.setFullNameEng(req.getFullNameEng()); - equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); + equity.setWorkflowStatus(req.workflowStatus); equity.setInstrumentType(req.getInstrumentType()); equity.setSecurityId(equity.getId()); equity.setCreated(Instant.now()); @@ -132,7 +132,7 @@ public class EquitySecurityService extends QueueConsumer implements Initializing equity.setIssuerId(req.getIssuerId()); equity.setShortNameEng(req.getShortNameEng()); equity.setFullNameEng(req.getFullNameEng()); - equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); + equity.setWorkflowStatus(req.workflowStatus); equity.setInstrumentType(req.getInstrumentType()); equitySecurityImdg.update(equity); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java index bb5b8af08..aa6c36cee 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java @@ -94,7 +94,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial fixedIncome.setIssuerId(req.getIssuerId()); fixedIncome.setShortNameEng(req.getShortNameEng()); fixedIncome.setFullNameEng(req.getFullNameEng()); - fixedIncome.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); + fixedIncome.setWorkflowStatus(req.getWorkflowStatus()); fixedIncome.setInstrumentType(req.getInstrumentType()); fixedIncome.setSecurityId(fixedIncome.getId()); fixedIncome.setCreated(Instant.now()); @@ -142,7 +142,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial fixedIncome.setIssuerId(req.getIssuerId()); fixedIncome.setShortNameEng(req.getShortNameEng()); fixedIncome.setFullNameEng(req.getFullNameEng()); - fixedIncome.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); + fixedIncome.setWorkflowStatus(req.getWorkflowStatus()); fixedIncome.setInstrumentType(req.getInstrumentType()); fixedIncome.setSecurityId(fixedIncome.getId()); @@ -152,13 +152,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial log.error("MoneyMarketSecurityUpdateRequest id {} couldn't find listing with securityId {}", req.getId(), fixedIncome.getId()); return null; } - listing.setSecurityId(fixedIncome.getId()); - listing.setSymbolCode(fixedIncome.getSecuritySymbol()); - listing.setSymbolName(fixedIncome.getFullName()); - listing.setTradingCurrency(fixedIncome.getNominalCurrency()); - listing.setWorkflowStatus(fixedIncome.getWorkflowStatus()); - listing.setLotSize(fixedIncome.getLotSize()); - listing.setUpdated(updateTime); + listing = listingBuilder.byFixedIncomeEquity(fixedIncome, listing); listingImdg.update(listing); return null; } @@ -167,7 +161,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial CommonDeleteRequest req = userRequest.getRequestPayload(); log.debug("CommonDeleteRequest received id = {}", req.getId()); - RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityDeleteValidator()); + RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.fixedIncomeDeleteValidator()); if (requestInfoUpdate != null) return requestInfoUpdate; Instant updateTime = Instant.now(); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java index 493124d92..383610af8 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java @@ -118,10 +118,11 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial mms.setSecuritySymbol(req.getSecuritySymbol()); mms.setTermType(req.getTermType()); mms.setIsin(req.getIsin()); + mms.setIssuerId(req.getIssuerId()); mms.setSecurityId(mms.getId()); mms.setDescription(req.getDescription()); mms.setCreated(Instant.now()); - mms.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); + mms.setWorkflowStatus(req.getWorkflowStatus()); try { transaction.beginTransaction(); Imdg moneyMarketSecurityMap = transaction.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class); @@ -171,8 +172,10 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial mms.setSecuritySymbol(req.getSecuritySymbol()); mms.setTermType(req.getTermType()); mms.setIsin(req.getIsin()); + mms.setIssuerId(req.getIssuerId()); mms.setSecurityId(mms.getId()); - mms.setDescription(mms.getDescription()); + mms.setDescription(req.getDescription()); + mms.setWorkflowStatus(req.getWorkflowStatus()); moneyMarketSecurityMap.update(mms); Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", mms.getId())); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/СurrencyService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/СurrencyService.java new file mode 100644 index 000000000..779b46eca --- /dev/null +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/СurrencyService.java @@ -0,0 +1,172 @@ +package ru.spcex.clearing.securities.service.cud; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; +import ru.clearing.classes.statics.data.misc.Listing; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.securities.component.ListingBuilder; +import ru.spcex.clearing.securities.validation.ValidationProvider; +import ru.spcex.clearing.validation.common.ValidationHelper; +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.ImdgTransaction; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.Map; + +@Service +public class СurrencyService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg equitySecurityImdg; + private final Imdg listingImdg; + private final ImdgProvider imdgProvider; + private final ImdgId idGenerator; + private final ValidationProvider validation; + private final ValidationHelper validationHelper; + private final ListingBuilder listingBuilder = new ListingBuilder(); + + @Autowired + public СurrencyService(Consumer kafkaQueue, + Producer kafkaProducer, + ImdgProvider imdgProvider, + ValidationProvider validation, + ValidationHelper validationHelper) { + super(kafkaQueue, kafkaProducer); + this.validation = validation; + this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); + this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); + this.imdgProvider = imdgProvider; + this.idGenerator = imdgProvider.getImdgIdGenerator(); + this.validationHelper = validationHelper; + } + + @Override + public void afterPropertiesSet() { + callback(EquitySecurityNewRequest.class) + .setFunction(this::newEquity) + .forDestination(Consts.DESTINATION_СURRENCY_NEW, callbacks::put); + callback(EquitySecurityUpdateRequest.class) + .setFunction(this::updateEquity) + .forDestination(Consts.DESTINATION_СURRENCY_UPDATE, callbacks::put); + callback(CommonDeleteRequest.class) + .setFunction(this::deleteEquity) + .forDestination(Consts.DESTINATION_СURRENCY_DELETE, callbacks::put); + imdgProvider.waitAvailable(); + init(); + } + + private RequestInfoUpdate newEquity(BaseRequest userRequest) { + ImdgTransaction transaction = imdgProvider.newTransaction(); + EquitySecurityNewRequest req = userRequest.getRequestPayload(); + + RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityNewValidator()); + if (requestInfoUpdate != null) return requestInfoUpdate; + + log.debug("EquitySecurityNewRequest received"); + EquitySecurity equity = new EquitySecurity(); + equity.setId(idGenerator.nextId()); + equity.setSecuritySymbol(req.getSecuritySymbol()); + equity.setShortName(req.getShortName()); + equity.setFullName(req.getFullName()); + equity.setIsin(req.getIsin()); + equity.setShareType(req.getShareType()); + equity.setLotSize(req.getLotSize() != null ? BigDecimal.valueOf(req.getLotSize()) : null); + equity.setIssuerId(req.getIssuerId()); + equity.setShortNameEng(req.getShortNameEng()); + equity.setFullNameEng(req.getFullNameEng()); + equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); + equity.setInstrumentType(req.getInstrumentType()); + equity.setSecurityId(equity.getId()); + equity.setCreated(Instant.now()); + try { + transaction.beginTransaction(); + Imdg equityImdg = transaction.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); + Imdg listingMap = transaction.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); + //одним скопом выполняем реквест + equityImdg.insert(equity); + Listing listing = listingBuilder.byNewEquity(equity, req); + listingMap.insert(listing); + //и сохраняем обновленный +// reqInfoMap.insert(reqInfo); + transaction.commitTransaction(); + } catch (Throwable e) { + transaction.rollbackTransaction(); +// RequestInfo.update(reqInfo, Status.Error, ExceptionUtils.getStackTrace(e)); +// requestInfoImdg.insert(reqInfo); + } + log.debug("successfully processed, request id {}, new object id {}", userRequest.getId(), equity.getId()); + return null; // default success + } + + private RequestInfoUpdate updateEquity(BaseRequest userRequest) { + EquitySecurityUpdateRequest req = userRequest.getRequestPayload(); + log.debug("MoneyMarketSecurityUpdateRequest received id = {}", req.getId()); + + RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityUpdateValidator()); + if (requestInfoUpdate != null) return requestInfoUpdate; + + EquitySecurity equity = equitySecurityImdg.getSingleObjectByID(req.getId()); + Instant updateTime = Instant.now(); + equity.setUpdated(updateTime); + equity.setSecuritySymbol(req.getSecuritySymbol()); + equity.setShortName(req.getShortName()); + equity.setFullName(req.getFullName()); + equity.setIsin(req.getIsin()); + equity.setShareType(req.getShareType()); + equity.setLotSize(req.getLotSize() != null ? BigDecimal.valueOf(req.getLotSize()) : null); + equity.setIssuerId(req.getIssuerId()); + equity.setShortNameEng(req.getShortNameEng()); + equity.setFullNameEng(req.getFullNameEng()); + equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); + equity.setInstrumentType(req.getInstrumentType()); + + equitySecurityImdg.update(equity); + Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", equity.getId())); + if (listing == null) { + log.error("MoneyMarketSecurityUpdateRequest id {} couldn't find listing with securityId {}", req.getId(), equity.getId()); + return null; + } + listing = listingBuilder.byUpdateEquity(equity, listing); + listingImdg.update(listing); + return null; + } + + private RequestInfoUpdate deleteEquity(BaseRequest userRequest) { + CommonDeleteRequest req = userRequest.getRequestPayload(); + log.debug("CommonDeleteRequest received id = {}", req.getId()); + + RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, validation.equityDeleteValidator()); + if (requestInfoUpdate != null) return requestInfoUpdate; + + Instant updateTime = Instant.now(); + EquitySecurity equity = equitySecurityImdg.getSingleObjectByID(req.getId()); + equity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); + equity.setUpdated(updateTime); + equitySecurityImdg.update(equity); + + Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", equity.getId())); + if (listing == null) { + log.error("CommonDeleteRequest id {} couldn't find listing with securityId {}", req.getId(), equity.getId()); + return null; + } + listing.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); + listing.setUpdated(updateTime); + listingImdg.update(listing); + return null; + } +} diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ValidationProvider.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ValidationProvider.java index 40371d3a4..ae176fd6a 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ValidationProvider.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ValidationProvider.java @@ -21,12 +21,26 @@ public class ValidationProvider { private final Imdg mmsMap; private final Imdg equityMap; private final Imdg fixedIncomeMap; + private final Imdg instrumentTypeDictionaryImdg; + private final Imdg workflowStatusDictionaryImdg; + private final Imdg termTypeDictionaryImdg; + private final Imdg currencyCodeDictionaryImdg; + private final Imdg shareTypeDictionaryImdg; + private final Imdg bondTypeDictionaryImdg; + private final Imdg companyImdg; public ValidationProvider(ImdgProvider imdgProvider) { this.mmsMap = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, SpcexObjectBase.class); this.equityMap = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, SpcexObjectBase.class); this.fixedIncomeMap = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, SpcexObjectBase.class); + this.instrumentTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, SpcexObjectBase.class); + this.workflowStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, SpcexObjectBase.class); + this.termTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TermTypeDictionary, SpcexObjectBase.class); + this.currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, SpcexObjectBase.class); + this.shareTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ShareTypeDictionary, SpcexObjectBase.class); + this.bondTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_BondTypeDictionary, SpcexObjectBase.class); + this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, SpcexObjectBase.class); } public Function mmsNewValidator() { @@ -34,11 +48,21 @@ public class ValidationProvider { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(mmsRequest); context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, mmsMap); + context.addImdg(IMDGDistributedNames.Map_Company, companyImdg); + context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_TermTypeDictionary, termTypeDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg); return new ValidatorImpl<>(context, EndDtAfterStartDt.instance(MoneyMarketSecurityNewRequest.class), new NotPresentBySecuritySymbolAndWorkflowStatusActv(IMDGDistributedNames.Map_MoneyMarketSecurity, SecuritiesError.InstrumentAlreadyExists, MoneyMarketSecurityNewRequest.class), new IsValidInstrumentTypeFromRequest(SecuritiesError.RequiredFieldIsEmpty, "RATE"), - MmsNewValidationRule.RequiredFieldIsNotEmpty + MmsNewValidationRule.RequiredFieldIsNotEmpty, + new HaveValidCompanyId<>(MoneyMarketSecurityNewRequest::getIssuerId, "issuerId"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, MoneyMarketSecurityNewRequest::getInstrumentType, "instrumentType"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, MoneyMarketSecurityNewRequest::getWorkflowStatus, "workflowStatus"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_TermTypeDictionary, MoneyMarketSecurityNewRequest::getTermType, "termType"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_CurrencyCodeDictionary, MoneyMarketSecurityNewRequest::getNominalCurrency, "nominalCurrency") ); }; } @@ -48,11 +72,21 @@ public class ValidationProvider { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(mmsRequest); context.addImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, mmsMap); + context.addImdg(IMDGDistributedNames.Map_Company, companyImdg); + context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_TermTypeDictionary, termTypeDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg); return new ValidatorImpl<>(context, EndDtAfterStartDt.instance(MoneyMarketSecurityUpdateRequest.class), new PresentById(IMDGDistributedNames.Map_MoneyMarketSecurity, SecuritiesError.InstrumentNotFound, true), new IsValidInstrumentTypeById(SecuritiesError.InstrumentNotFound, "RATE"), - new WorkflowStatusActv() + new WorkflowStatusActv(), + new HaveValidCompanyId<>(MoneyMarketSecurityUpdateRequest::getIssuerId, "issuerId"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, MoneyMarketSecurityUpdateRequest::getInstrumentType, "instrumentType"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, MoneyMarketSecurityUpdateRequest::getWorkflowStatus, "workflowStatus"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_TermTypeDictionary, MoneyMarketSecurityUpdateRequest::getTermType, "termType"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_CurrencyCodeDictionary, MoneyMarketSecurityUpdateRequest::getNominalCurrency, "nominalCurrency") ); }; } @@ -74,12 +108,19 @@ public class ValidationProvider { return equityRequest -> { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(equityRequest); + context.addImdg(IMDGDistributedNames.Map_Company, companyImdg); context.addImdg(IMDGDistributedNames.Map_EquitySecurity, equityMap); + context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_ShareTypeDictionary, shareTypeDictionaryImdg); return new ValidatorImpl<>(context, new NotPresentBySecuritySymbolAndWorkflowStatusActv(IMDGDistributedNames.Map_EquitySecurity, SecuritiesError.InstrumentAlreadyExists, EquitySecurityNewRequest.class), new IsValidInstrumentTypeFromRequest(SecuritiesError.RequiredFieldIsEmpty, "EQTY"), - EquityNewValidationRule.RequiredFieldIsNotEmpty - ); + EquityNewValidationRule.RequiredFieldIsNotEmpty, + new HaveValidCompanyId<>(EquitySecurityNewRequest::getIssuerId, "issuerId"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, EquitySecurityNewRequest::getInstrumentType, "instrumentType"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, EquitySecurityNewRequest::getWorkflowStatus, "workflowStatus"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_ShareTypeDictionary, EquitySecurityNewRequest::getShareType, "shareType")); }; } @@ -88,11 +129,18 @@ public class ValidationProvider { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(equityRequest); context.addImdg(IMDGDistributedNames.Map_EquitySecurity, equityMap); + context.addImdg(IMDGDistributedNames.Map_Company, companyImdg); + context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_ShareTypeDictionary, shareTypeDictionaryImdg); return new ValidatorImpl<>(context, new PresentById(IMDGDistributedNames.Map_EquitySecurity, SecuritiesError.InstrumentNotFound, true), new IsValidInstrumentTypeById(SecuritiesError.InstrumentNotFound, "EQTY"), - new WorkflowStatusActv() - ); + new WorkflowStatusActv(), + new HaveValidCompanyId<>(EquitySecurityUpdateRequest::getIssuerId, "issuerId"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, EquitySecurityUpdateRequest::getInstrumentType, "instrumentType"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, EquitySecurityUpdateRequest::getWorkflowStatus, "workflowStatus"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_ShareTypeDictionary, EquitySecurityUpdateRequest::getShareType, "shareType")); }; } @@ -113,12 +161,22 @@ public class ValidationProvider { return equityRequest -> { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(equityRequest); - context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, equityMap); + context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeMap); + context.addImdg(IMDGDistributedNames.Map_Company, companyImdg); + context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_BondTypeDictionary, bondTypeDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg); return new ValidatorImpl<>(context, new NotPresentBySecuritySymbolAndWorkflowStatusActv(IMDGDistributedNames.Map_FixedIncomeSecurity, SecuritiesError.InstrumentAlreadyExists, FixedIncomeSecurityNewRequest.class), new IsValidInstrumentTypeFromRequest(SecuritiesError.RequiredFieldIsEmpty, "BOND"), - FixedIncomeNewValidationRule.RequiredFieldIsNotEmpty - ); + FixedIncomeNewValidationRule.RequiredFieldIsNotEmpty, + new HaveValidCompanyId<>(FixedIncomeSecurityNewRequest::getIssuerId, "issuerId"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, FixedIncomeSecurityNewRequest::getInstrumentType, "instrumentType"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, FixedIncomeSecurityNewRequest::getWorkflowStatus, "workflowStatus"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_BondTypeDictionary, FixedIncomeSecurityNewRequest::getBondType, "bondType"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_CurrencyCodeDictionary, FixedIncomeSecurityNewRequest::getNominalCurrency, "nominalCurrency") + ); }; } @@ -126,11 +184,22 @@ public class ValidationProvider { return equityRequest -> { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(equityRequest); - context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, equityMap); + context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeMap); + context.addImdg(IMDGDistributedNames.Map_Company, companyImdg); + context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeMap); + context.addImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, instrumentTypeDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_BondTypeDictionary, bondTypeDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg); return new ValidatorImpl<>(context, new PresentById(IMDGDistributedNames.Map_FixedIncomeSecurity, SecuritiesError.InstrumentNotFound, true), new IsValidInstrumentTypeById(SecuritiesError.InstrumentNotFound, "BOND"), - new WorkflowStatusActv() + new WorkflowStatusActv(), + new HaveValidCompanyId<>(FixedIncomeSecurityUpdateRequest::getIssuerId, "issuerId"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, FixedIncomeSecurityUpdateRequest::getInstrumentType, "instrumentType"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, FixedIncomeSecurityUpdateRequest::getWorkflowStatus, "workflowStatus"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_BondTypeDictionary, FixedIncomeSecurityUpdateRequest::getBondType, "bondType"), + new HaveValidCodeByDictionary<>(IMDGDistributedNames.Map_CurrencyCodeDictionary, FixedIncomeSecurityUpdateRequest::getNominalCurrency, "nominalCurrency") ); }; } @@ -139,7 +208,8 @@ public class ValidationProvider { return equityRequest -> { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(equityRequest); - context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, equityMap); + context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeMap); + context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeMap); return new ValidatorImpl<>(context, new PresentById(IMDGDistributedNames.Map_FixedIncomeSecurity, SecuritiesError.InstrumentNotFound, true), new IsValidInstrumentTypeById(SecuritiesError.InstrumentNotFound, "BOND"), diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/HaveValidCodeByDictionary.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/HaveValidCodeByDictionary.java new file mode 100644 index 000000000..5ec7f2ec6 --- /dev/null +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/HaveValidCodeByDictionary.java @@ -0,0 +1,39 @@ +package ru.spcex.clearing.securities.validation.rule; + +import org.springframework.util.StringUtils; +import ru.spcex.clearing.securities.errors.SecuritiesError; +import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; + +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; + +public class HaveValidCodeByDictionary implements IValidationRule> { + String mapName; + String errArg; + Function codeGetter; + public HaveValidCodeByDictionary(String mapName, Function codeGetter, String errArg) { + this.mapName = mapName; + this.codeGetter = codeGetter; + this.errArg = errArg; + } + @Override + public Optional validate(ImdgValidationContext context) { + R validatedObject = context.getValidatedObject(); + String code = codeGetter.apply(validatedObject); + if(!StringUtils.hasText(code)) { + return of(SecuritiesError.RequiredFieldIsEmpty, errArg); + } + Imdg imdgDictionary = context.obtainMap(mapName, SpcexObjectBase.class); + SpcexObjectBase dictionary = imdgDictionary.getSingleObjectByFieldValues(Map.of( + "code", code)); + if (dictionary == null) { + return of(SecuritiesError.WrongFieldValue, errArg); + } + return empty(); + } +} diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/HaveValidCompanyId.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/HaveValidCompanyId.java new file mode 100644 index 000000000..914fa2903 --- /dev/null +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/HaveValidCompanyId.java @@ -0,0 +1,35 @@ +package ru.spcex.clearing.securities.validation.rule; + +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.securities.errors.SecuritiesError; +import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; + +import java.util.Optional; +import java.util.function.Function; + +public class HaveValidCompanyId implements IValidationRule> { + Function idGetter; + String errArg; + public HaveValidCompanyId(Function idGetter, String errArg) { + this.idGetter = idGetter; + this.errArg = errArg; + } + @Override + public Optional validate(ImdgValidationContext context) { + R validatedObject = context.getValidatedObject(); + Long id = idGetter.apply(validatedObject); + if(id == null) { + return of(SecuritiesError.RequiredFieldIsEmpty, errArg); + } + Imdg imdgDictionary = context.obtainMap(IMDGDistributedNames.Map_Company, SpcexObjectBase.class); + SpcexObjectBase dictionary = imdgDictionary.getSingleObjectByID(id); + if (dictionary == null) { + return of(SecuritiesError.WrongFieldValue, errArg); + } + return empty(); + } +} diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/IsValidInstrumentTypeFromRequest.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/IsValidInstrumentTypeFromRequest.java index a051e0916..76aa065ba 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/IsValidInstrumentTypeFromRequest.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/IsValidInstrumentTypeFromRequest.java @@ -17,15 +17,15 @@ public class IsValidInstrumentTypeFromRequest implements IValidationRule validate(ImdgValidationContext context) { WithInstrumentType action = context.getValidatedObject(); if (action.getInstrumentType() == null) { return of(SecuritiesError.RequiredFieldIsEmpty); - } else if (!predictableInstrumentType.equalsIgnoreCase(action.getInstrumentType())){ + } else if (!predictableInstrumentType.equalsIgnoreCase(action.getInstrumentType())) { return of(errorEnum); - }else { + } else { return empty(); } } diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java index 391580ce8..86bc623f9 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java @@ -10,10 +10,12 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; import ru.clearing.classes.statics.data.misc.Listing; import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.platform.dictionary.*; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.securities.component.ListingBuilder; import ru.spcex.clearing.securities.config.ErrorResolverConfig; @@ -52,6 +54,22 @@ public abstract class AbstractServiceTest { protected Imdg listingImdg; protected Imdg equitySecurityImdg; protected Imdg fixedIncomeSecurityImdg; + protected Imdg instrumentTypeDictionaryImdg; + protected Imdg workflowStatusDictionaryImdg; + protected Imdg termTypeDictionaryImdg; + protected Imdg currencyCodeDictionaryImdg; + protected Imdg shareTypeDictionaryImdg; + protected Imdg bondTypeDictionaryImdg; + protected Imdg companyImdg; + + public static String RATE = "RATE"; + protected String EQTY = "EQTY"; + protected String BOND = "BOND"; + protected String shareType = "shareType"; + protected String bondType = "bondType"; + public static Long issuerId = 13243L; + public static String termType = "TermType"; + public static String currencyCode = "RUB"; protected final ListingBuilder listingBuilder = new ListingBuilder(); @Captor protected ArgumentCaptor producerRecord; @@ -67,7 +85,42 @@ public abstract class AbstractServiceTest { this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class); + this.instrumentTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_InstrumentTypeDictionary, InstrumentTypeDictionary.class); + this.workflowStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, WorkflowStatusDictionary.class); + this.termTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TermTypeDictionary, TermTypeDictionary.class); + this.currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class); + this.shareTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ShareTypeDictionary, ShareTypeDictionary.class); + this.bondTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_BondTypeDictionary, BondTypeDictionary.class); + this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + InstrumentTypeDictionary instrumentTypeDictionary = new InstrumentTypeDictionary(); + instrumentTypeDictionary.setId(1L); + instrumentTypeDictionary.setCode(RATE); + instrumentTypeDictionaryImdg.insert(instrumentTypeDictionary); + instrumentTypeDictionary.setId(2L); + instrumentTypeDictionary.setCode(EQTY); + instrumentTypeDictionaryImdg.insert(instrumentTypeDictionary); + instrumentTypeDictionary.setId(3L); + instrumentTypeDictionary.setCode(BOND); + instrumentTypeDictionaryImdg.insert(instrumentTypeDictionary); + WorkflowStatusDictionary workflowStatusDictionary = new WorkflowStatusDictionary(); + workflowStatusDictionary.setCode(ru.spcex.platform.enumeration.Status.Active.getKey()); + workflowStatusDictionaryImdg.insert(workflowStatusDictionary); + TermTypeDictionary termTypeDictionary = new TermTypeDictionary(); + termTypeDictionary.setCode(termType); + termTypeDictionaryImdg.insert(termTypeDictionary); + CurrencyCodeDictionary currencyCodeDictionary = new CurrencyCodeDictionary(); + currencyCodeDictionary.setCode(currencyCode); + currencyCodeDictionaryImdg.insert(currencyCodeDictionary); + ShareTypeDictionary shareTypeDictionary = new ShareTypeDictionary(); + shareTypeDictionary.setCode(shareType); + shareTypeDictionaryImdg.insert(shareTypeDictionary); + BondTypeDictionary bondTypeDictionary = new BondTypeDictionary(); + bondTypeDictionary.setCode(bondType); + bondTypeDictionaryImdg.insert(bondTypeDictionary); + Company company = new Company(); + company.setId(issuerId); + companyImdg.insert(company); TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); doReturn(future).when(mockProducer).send(producerRecord.capture()); } diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java index 960212afc..d34e89aff 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java @@ -49,6 +49,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{ */ @Test public void testNewEquity(){ + clearAllInImdg(equitySecurityImdg); final String TOPIC = Consts.DESTINATION_EQUITY_SECURITY_NEW; final EquitySecurity equityPrediction = getEquitySecurity(); @@ -86,6 +87,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{ */ @Test public void testUpdateEquity() { + clearAllInImdg(equitySecurityImdg); final String TOPIC = Consts.DESTINATION_EQUITY_SECURITY_UPDATE; String fullName = "FullNameUpdate"; Double updateLotSize = 12.0; @@ -126,6 +128,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{ */ @Test public void testDeleteEquity(){ + clearAllInImdg(equitySecurityImdg); final String TOPIC = Consts.DESTINATION_EQUITY_SECURITY_DELETE; final EquitySecurity equityPrediction = getEquitySecurity(); @@ -165,13 +168,13 @@ public class EquitySecurityServiceTest extends AbstractServiceTest{ equitySecurity.setShortName("ShortNameNewEquity"); equitySecurity.setFullName("FullNameNewEquity"); equitySecurity.setIsin("Isin"); - equitySecurity.setShareType("ShareType"); + equitySecurity.setShareType(shareType); equitySecurity.setLotSize(BigDecimal.valueOf(18.0d)); - equitySecurity.setIssuerId(11L); + equitySecurity.setIssuerId(issuerId); equitySecurity.setShortNameEng("ShortNameNewEquity"); equitySecurity.setFullNameEng("FullNameNewEquity"); equitySecurity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); - equitySecurity.setInstrumentType("EQTY"); + equitySecurity.setInstrumentType(EQTY); return equitySecurity; } diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java index 9e19f531e..92ae716b9 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java @@ -3,15 +3,14 @@ package ru.spcex.clearing.securities.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; import ru.clearing.classes.statics.data.misc.Listing; import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityUpdateRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityUpdateRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityUpdateRequest; import ru.spcex.clearing.securities.service.cud.FixedIncomeSecurityService; @@ -51,6 +50,7 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ */ @Test public void newFixedIncome(){ + clearAllInImdg(fixedIncomeSecurityImdg); final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_NEW; final FixedIncomeSecurity fixedIncomePrediction = getFixedIncomeSecurity(); @@ -88,38 +88,38 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ */ @Test public void updateFixedIncome() { -// clearAllInImdg(moneyMarketSecurityMap); -// final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_UPDATE; -// String fullName = "FullNameUpdate"; -// Double updateLotSize = 12.0; -// -// final FixedIncomeSecurity fixedIncomePrediction = getFixedIncomeSecurity(); -// -// fixedIncomeSecurityImdg.insert(fixedIncomePrediction); -// fixedIncomePrediction.setFullName(fullName); -// fixedIncomePrediction.setLotSize(BigDecimal.valueOf(updateLotSize)); -// final FixedIncomeSecurityUpdateRequest request = getEquitySecurityUpdateRequest(fixedIncomePrediction); -// Listing listingPrediction = new Listing(); -// listingPrediction = listingBuilder.byUpdateEquity(fixedIncomePrediction, listingPrediction); -// listingImdg.insert(listingPrediction); -// -// //ACT -// String jsonString = getJsonStringForUPDATE(request, ID); -// -// addRecordToKafka((MockConsumer) equitySecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); -// -// //ASSERT -// waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); -// -// EquitySecurity equityResult = equitySecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", fixedIncomePrediction.getFullName())); -// fixedIncomePrediction.setId(equityResult.getId()); -// fixedIncomePrediction.setSecurityId(equityResult.getSecurityId()); -// FIXED_INCOME_SECURITY_MATCHER.assertMatch(equityResult, fixedIncomePrediction); -// -// Listing listingResult = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", fixedIncomePrediction.getId())); -// listingPrediction.setId(listingResult.getId()); -// listingPrediction.setSecurityId(listingResult.getSecurityId()); -// LISTING_MATCHER.assertMatch(listingResult, listingPrediction); + clearAllInImdg(moneyMarketSecurityMap); + final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_UPDATE; + String fullName = "FullNameUpdate"; + Double updateLotSize = 12.0; + + final FixedIncomeSecurity fixedIncomePrediction = getFixedIncomeSecurity(); + + fixedIncomeSecurityImdg.insert(fixedIncomePrediction); + fixedIncomePrediction.setFullName(fullName); + fixedIncomePrediction.setLotSize(BigDecimal.valueOf(updateLotSize)); + final FixedIncomeSecurityUpdateRequest request = getFixedIncomeSecurityUpdateRequest(fixedIncomePrediction); + Listing listingPrediction = new Listing(); + listingPrediction = listingBuilder.byFixedIncomeEquity(fixedIncomePrediction, listingPrediction); + listingImdg.insert(listingPrediction); + + //ACT + String jsonString = getJsonStringForUPDATE(request, ID); + + addRecordToKafka((MockConsumer) fixedIncomeSecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); + + //ASSERT + waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + + FixedIncomeSecurity equityResult = fixedIncomeSecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", fixedIncomePrediction.getFullName())); + fixedIncomePrediction.setId(equityResult.getId()); + fixedIncomePrediction.setSecurityId(equityResult.getSecurityId()); + FIXED_INCOME_SECURITY_MATCHER.assertMatch(equityResult, fixedIncomePrediction); + + Listing listingResult = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", fixedIncomePrediction.getId())); + listingPrediction.setId(listingResult.getId()); + listingPrediction.setSecurityId(listingResult.getSecurityId()); + LISTING_MATCHER.assertMatch(listingResult, listingPrediction); } /** @@ -130,37 +130,37 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ */ @Test public void deleteFixedIncome(){ -// clearAllInImdg(moneyMarketSecurityMap); -// final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_DELETE; -// -// final EquitySecurity equityPrediction = getFixedIncomeSecurity(); -// equitySecurityImdg.insert(equityPrediction); -// equityPrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); -// -// Listing listingPrediction = new Listing(); -// listingPrediction = listingBuilder.byUpdateEquity(equityPrediction, listingPrediction); -// listingImdg.insert(listingPrediction);listingPrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); -// -// CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest(); -// commonDeleteRequest.setId(ID); -// -// //ACT -// String jsonString = getJsonStringForDELETE(commonDeleteRequest, ID); -// -// addRecordToKafka((MockConsumer) equitySecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); -// -// //ASSERT -// waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); -// -// EquitySecurity equityResult = equitySecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", equityPrediction.getFullName())); -// equityPrediction.setId(equityResult.getId()); -// equityPrediction.setSecurityId(equityResult.getSecurityId()); -// FIXED_INCOME_SECURITY_MATCHER.assertMatch(equityResult, equityPrediction); -// -// Listing listingResult = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", equityPrediction.getId())); -// listingPrediction.setId(listingResult.getId()); -// listingPrediction.setSecurityId(listingResult.getSecurityId()); -// LISTING_MATCHER.assertMatch(listingResult, listingPrediction); + clearAllInImdg(moneyMarketSecurityMap); + final String TOPIC = Consts.DESTINATION_FIXED_INCOME_SECURITY_DELETE; + + final FixedIncomeSecurity fixedIncomePrediction = getFixedIncomeSecurity(); + fixedIncomeSecurityImdg.insert(fixedIncomePrediction); + fixedIncomePrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); + + Listing listingPrediction = new Listing(); + listingPrediction = listingBuilder.byFixedIncomeEquity(fixedIncomePrediction, listingPrediction); + listingImdg.insert(listingPrediction);listingPrediction.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Blocked.getKey()); + + CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest(); + commonDeleteRequest.setId(ID); + + //ACT + String jsonString = getJsonStringForDELETE(commonDeleteRequest, ID); + + addRecordToKafka((MockConsumer) fixedIncomeSecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); + + //ASSERT + waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + + FixedIncomeSecurity equityResult = fixedIncomeSecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", fixedIncomePrediction.getFullName())); + fixedIncomePrediction.setId(equityResult.getId()); + fixedIncomePrediction.setSecurityId(equityResult.getSecurityId()); + FIXED_INCOME_SECURITY_MATCHER.assertMatch(equityResult, fixedIncomePrediction); + + Listing listingResult = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", fixedIncomePrediction.getId())); + listingPrediction.setId(listingResult.getId()); + listingPrediction.setSecurityId(listingResult.getSecurityId()); + LISTING_MATCHER.assertMatch(listingResult, listingPrediction); } private FixedIncomeSecurity getFixedIncomeSecurity(){ @@ -170,58 +170,63 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest{ fixedIncome.setShortName("ShortNameNewEquity"); fixedIncome.setFullName("FullNameNewEquity"); fixedIncome.setIsin("Isin"); - fixedIncome.setBondType("BondType"); + fixedIncome.setBondType(bondType); fixedIncome.setLotSize(BigDecimal.valueOf(18.0d)); fixedIncome.setNominalValue(BigDecimal.valueOf(18.0d)); - fixedIncome.setNominalCurrency("NominalCurrency"); + fixedIncome.setNominalCurrency(currencyCode); fixedIncome.setMaturityDate(LocalDate.now()); fixedIncome.setCoupon(BigDecimal.valueOf(18.0d)); fixedIncome.setCouponFrequency(9L); - fixedIncome.setIssuerId(11L); + fixedIncome.setIssuerId(issuerId); fixedIncome.setShortNameEng("ShortNameNewEquity"); fixedIncome.setFullNameEng("FullNameNewEquity"); fixedIncome.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); - fixedIncome.setInstrumentType("BOND"); + fixedIncome.setInstrumentType(BOND); fixedIncome.setSecurityId(fixedIncome.getId()); return fixedIncome; } private FixedIncomeSecurityNewRequest getFixedIncomeSecurityNewRequest(FixedIncomeSecurity fixedIncomeSecurity){ - FixedIncomeSecurityNewRequest equitySecurityNewRequest = new FixedIncomeSecurityNewRequest(); - equitySecurityNewRequest.setSecuritySymbol(fixedIncomeSecurity.getSecuritySymbol()); - equitySecurityNewRequest.setShortName(fixedIncomeSecurity.getShortName()); - equitySecurityNewRequest.setFullName(fixedIncomeSecurity.getFullName()); - equitySecurityNewRequest.setIsin(fixedIncomeSecurity.getIsin()); - equitySecurityNewRequest.setBondType(fixedIncomeSecurity.getBondType()); - equitySecurityNewRequest.setLotSize(fixedIncomeSecurity.getLotSize().doubleValue()); - equitySecurityNewRequest.setNominalValue(fixedIncomeSecurity.getNominalValue().doubleValue()); - equitySecurityNewRequest.setNominalCurrency(fixedIncomeSecurity.getNominalCurrency()); - equitySecurityNewRequest.setMaturityDate(fixedIncomeSecurity.getMaturityDate()); - equitySecurityNewRequest.setCoupon(fixedIncomeSecurity.getCoupon().doubleValue()); - equitySecurityNewRequest.setCouponFrequency(9L); - equitySecurityNewRequest.setIssuerId(fixedIncomeSecurity.getIssuerId()); - equitySecurityNewRequest.setShortNameEng(fixedIncomeSecurity.getShortNameEng()); - equitySecurityNewRequest.setFullNameEng(fixedIncomeSecurity.getFullNameEng()); - equitySecurityNewRequest.setWorkflowStatus(fixedIncomeSecurity.getWorkflowStatus()); - equitySecurityNewRequest.setInstrumentType(fixedIncomeSecurity.getInstrumentType()); - return equitySecurityNewRequest; + FixedIncomeSecurityNewRequest fixedIncomeSecurityNewRequest = new FixedIncomeSecurityNewRequest(); + fixedIncomeSecurityNewRequest.setSecuritySymbol(fixedIncomeSecurity.getSecuritySymbol()); + fixedIncomeSecurityNewRequest.setShortName(fixedIncomeSecurity.getShortName()); + fixedIncomeSecurityNewRequest.setFullName(fixedIncomeSecurity.getFullName()); + fixedIncomeSecurityNewRequest.setIsin(fixedIncomeSecurity.getIsin()); + fixedIncomeSecurityNewRequest.setBondType(fixedIncomeSecurity.getBondType()); + fixedIncomeSecurityNewRequest.setLotSize(fixedIncomeSecurity.getLotSize().doubleValue()); + fixedIncomeSecurityNewRequest.setNominalValue(fixedIncomeSecurity.getNominalValue().doubleValue()); + fixedIncomeSecurityNewRequest.setNominalCurrency(fixedIncomeSecurity.getNominalCurrency()); + fixedIncomeSecurityNewRequest.setMaturityDate(fixedIncomeSecurity.getMaturityDate()); + fixedIncomeSecurityNewRequest.setCoupon(fixedIncomeSecurity.getCoupon().doubleValue()); + fixedIncomeSecurityNewRequest.setCouponFrequency(fixedIncomeSecurity.getCouponFrequency()); + fixedIncomeSecurityNewRequest.setIssuerId(fixedIncomeSecurity.getIssuerId()); + fixedIncomeSecurityNewRequest.setShortNameEng(fixedIncomeSecurity.getShortNameEng()); + fixedIncomeSecurityNewRequest.setFullNameEng(fixedIncomeSecurity.getFullNameEng()); + fixedIncomeSecurityNewRequest.setWorkflowStatus(fixedIncomeSecurity.getWorkflowStatus()); + fixedIncomeSecurityNewRequest.setInstrumentType(fixedIncomeSecurity.getInstrumentType()); + return fixedIncomeSecurityNewRequest; } - private EquitySecurityUpdateRequest getEquitySecurityUpdateRequest(EquitySecurity equitySecurity){ - EquitySecurityUpdateRequest equitySecurityUpdateRequest = new EquitySecurityUpdateRequest(); - equitySecurityUpdateRequest.setId(equitySecurity.getId()); - equitySecurityUpdateRequest.setSecuritySymbol(equitySecurity.getSecuritySymbol()); - equitySecurityUpdateRequest.setShortName(equitySecurity.getShortName()); - equitySecurityUpdateRequest.setFullName(equitySecurity.getFullName()); - equitySecurityUpdateRequest.setIsin(equitySecurity.getIsin()); - equitySecurityUpdateRequest.setShareType(equitySecurity.getShareType()); - equitySecurityUpdateRequest.setLotSize(equitySecurity.getLotSize().doubleValue()); - equitySecurityUpdateRequest.setIssuerId(equitySecurity.getIssuerId()); - equitySecurityUpdateRequest.setShortNameEng(equitySecurity.getShortNameEng()); - equitySecurityUpdateRequest.setFullNameEng(equitySecurity.getFullNameEng()); - equitySecurityUpdateRequest.setWorkflowStatus(equitySecurity.getWorkflowStatus()); - equitySecurityUpdateRequest.setInstrumentType(equitySecurity.getInstrumentType()); + private FixedIncomeSecurityUpdateRequest getFixedIncomeSecurityUpdateRequest(FixedIncomeSecurity fixedIncomeSecurity){ + FixedIncomeSecurityUpdateRequest equitySecurityUpdateRequest = new FixedIncomeSecurityUpdateRequest(); + equitySecurityUpdateRequest.setId(fixedIncomeSecurity.getId()); + equitySecurityUpdateRequest.setSecuritySymbol(fixedIncomeSecurity.getSecuritySymbol()); + equitySecurityUpdateRequest.setShortName(fixedIncomeSecurity.getShortName()); + equitySecurityUpdateRequest.setFullName(fixedIncomeSecurity.getFullName()); + equitySecurityUpdateRequest.setIsin(fixedIncomeSecurity.getIsin()); + equitySecurityUpdateRequest.setBondType(fixedIncomeSecurity.getBondType()); + equitySecurityUpdateRequest.setLotSize(fixedIncomeSecurity.getLotSize().doubleValue()); + equitySecurityUpdateRequest.setNominalValue(fixedIncomeSecurity.getNominalValue().doubleValue()); + equitySecurityUpdateRequest.setNominalCurrency(fixedIncomeSecurity.getNominalCurrency()); + equitySecurityUpdateRequest.setMaturityDate(fixedIncomeSecurity.getMaturityDate()); + equitySecurityUpdateRequest.setCoupon(fixedIncomeSecurity.getCoupon().doubleValue()); + equitySecurityUpdateRequest.setCouponFrequency(fixedIncomeSecurity.getCouponFrequency()); + equitySecurityUpdateRequest.setIssuerId(fixedIncomeSecurity.getIssuerId()); + equitySecurityUpdateRequest.setShortNameEng(fixedIncomeSecurity.getShortNameEng()); + equitySecurityUpdateRequest.setFullNameEng(fixedIncomeSecurity.getFullNameEng()); + equitySecurityUpdateRequest.setWorkflowStatus(fixedIncomeSecurity.getWorkflowStatus()); + equitySecurityUpdateRequest.setInstrumentType(fixedIncomeSecurity.getInstrumentType()); return equitySecurityUpdateRequest; } } diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java index fd66d5950..0ccfd0d7e 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java @@ -8,9 +8,11 @@ import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSe import java.math.BigDecimal; import java.time.LocalDate; +import static ru.spcex.clearing.securities.service.AbstractServiceTest.*; + class MoneyMarketSecurityFactory { - private String nominalCurrency = "RUB"; // (linked to currencyCode) + private String nominalCurrency = currencyCode; // (linked to currencyCode) private Long id = 0L; private Long securityId = 0L;// (linked to security) private String description = "tsetse"; @@ -18,11 +20,12 @@ class MoneyMarketSecurityFactory { private LocalDate startDate = LocalDate.ofEpochDay(0); private LocalDate endDate = LocalDate.now(); private BigDecimal nominalValue = BigDecimal.valueOf(1.0); - private String instrumentType = "RATE"; // (linked to instrumentType) + private String instrumentType = RATE; // (linked to instrumentType) private String fullName = "estat"; private String shortName = "esasdftat"; private String securitySymbol = "sdfafd"; - private String termType = "termType"; + private String istin = "istin"; + private String termType = AbstractServiceTest.termType; public String getFullName() { return fullName; @@ -88,7 +91,6 @@ class MoneyMarketSecurityFactory { moneyMarketSecurity.setId(id); moneyMarketSecurity.setSecurityId(securityId); - moneyMarketSecurity.setDescription(description); moneyMarketSecurity.setStartDate(startDate); moneyMarketSecurity.setEndDate(endDate); moneyMarketSecurity.setNominalValue(nominalValue); @@ -96,7 +98,11 @@ class MoneyMarketSecurityFactory { moneyMarketSecurity.setInstrumentType(instrumentType); moneyMarketSecurity.setFullName(fullName); moneyMarketSecurity.setShortName(shortName); + moneyMarketSecurity.setShortNameEng(shortName); + moneyMarketSecurity.setFullNameEng(fullName); + moneyMarketSecurity.setIsin(istin); moneyMarketSecurity.setTermType(termType); + moneyMarketSecurity.setIssuerId(issuerId); moneyMarketSecurity.setDescription(description); moneyMarketSecurity.setLotSize(BigDecimal.valueOf(lotSize)); moneyMarketSecurity.setSecuritySymbol(securitySymbol); @@ -118,9 +124,14 @@ class MoneyMarketSecurityFactory { moneyMarketSecurityUpdateRequest.setInstrumentType(instrumentType); moneyMarketSecurityUpdateRequest.setFullName(fullName); moneyMarketSecurityUpdateRequest.setShortName(shortName); + moneyMarketSecurityUpdateRequest.setShortNameEng(shortName); + moneyMarketSecurityUpdateRequest.setFullNameEng(fullName); + moneyMarketSecurityUpdateRequest.setIsin(istin); moneyMarketSecurityUpdateRequest.setTermType(termType); + moneyMarketSecurityUpdateRequest.setIssuerId(issuerId); moneyMarketSecurityUpdateRequest.setDescription(description); moneyMarketSecurityUpdateRequest.setSecuritySymbol(securitySymbol); + moneyMarketSecurityUpdateRequest.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); return moneyMarketSecurityUpdateRequest; } @@ -142,9 +153,15 @@ class MoneyMarketSecurityFactory { keyRequest.setInstrumentType(instrumentType); keyRequest.setFullName(fullName); keyRequest.setShortName(shortName); + keyRequest.setShortNameEng(shortName); + keyRequest.setFullNameEng(fullName); keyRequest.setTermType(termType); + keyRequest.setIssuerId(issuerId); + keyRequest.setIsin(istin); keyRequest.setDescription(description); keyRequest.setSecuritySymbol(securitySymbol); + keyRequest.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); + return keyRequest; } diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java index 2f95ecb3e..5331b7e6f 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java @@ -141,16 +141,17 @@ public class MoneyMarketSecurityServiceTest extends AbstractServiceTest{ clearAllInImdg(moneyMarketSecurityMap); final String TOPIC = Consts.DESTINATION_MONEY_MARKET_SECURITY_UPDATE; String updateTermType = "updateTermType"; - Double updateLotSize = 12.0; + Double updateLotSize = 112.0; final MoneyMarketSecurity moneyMarketSecurityPrediction = moneyMarketSecurityFactory .getMoneyMarketSecurity(); - moneyMarketSecurityMap.insert(moneyMarketSecurityPrediction); moneyMarketSecurityPrediction.setTermType(updateTermType); + moneyMarketSecurityMap.insert(moneyMarketSecurityPrediction); + moneyMarketSecurityPrediction.setTermType(termType); moneyMarketSecurityPrediction.setLotSize(BigDecimal.valueOf(updateLotSize)); final MoneyMarketSecurityUpdateRequest keyRequest = moneyMarketSecurityFactory .getMoneyMarketSecurityUpdateRequest(); - keyRequest.setTermType(updateTermType); + keyRequest.setTermType(termType); keyRequest.setLotSize(updateLotSize); Listing listingPrediction = new Listing(); listingPrediction = listingBuilder.byUpdateMms(moneyMarketSecurityPrediction, listingPrediction); diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index 5ee689fce..b4392e713 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -13,6 +13,10 @@ public interface Consts { String DESTINATION_FIXED_INCOME_SECURITY_UPDATE = "fixed-income-security-update"; String DESTINATION_FIXED_INCOME_SECURITY_DELETE = "fixed-income-security-delete"; + String DESTINATION_СURRENCY_NEW = "currency-new"; + String DESTINATION_СURRENCY_UPDATE = "currency-update"; + String DESTINATION_СURRENCY_DELETE = "currency-delete"; + String DESTINATION_KEY_RATE_NEW = "key-rate-new"; String DESTINATION_KEY_RATE_UPDATE = "key-rate-update"; String DESTINATION_KEY_RATE_DELETE = "key-rate-delete";