diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java index 836333d1b..8a4b572d2 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java @@ -15,9 +15,11 @@ public enum SecuritiesError implements IErrorEnumId { CurrencyAlreadyExists(1015L), CurrencyNotFound(1016L), ListingAlreadyExist(1017L), // Инструмент на режиме %s уже существует - ListingNotFound(1017L), // Инструмент на режиме %s не найден + ListingNotFound(1018L), // Инструмент на режиме %s не найден MarketNotFound(1020L), // Режим %s не найден - ListingOnMMSCreatedBySystem(1021L), // Информиция об инструментах Денежного рынка на режимах добавляется автоматически + ListingOnMMSCreatedBySystem(1021L), // Информиция об инструментах Денежного рынка на режимах добавляется автоматически. + ListingOnMMSUpdatedBySystem(1022L), // Информиция об инструментах Денежного рынка на режимах изменяется автоматически. + ListingOnMMSDeletedBySystem(1023L), // Информиция об инструментах Денежного рынка на режимах блокируется автоматически. ; private final Long id; diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java index 84158be33..7665bd599 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java @@ -2,14 +2,15 @@ package ru.spcex.clearing.securities.validation; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.scheduler.PlannerTemplate; import ru.clearing.classes.statics.data.security.Security; +import ru.clearing.platform.dictionary.CurrencyCodeDictionary; +import ru.clearing.platform.dictionary.WorkflowStatusDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerTemplateUpdateRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.*; import ru.spcex.clearing.util.security.SecuritySelector; import ru.spcex.clearing.securities.errors.SecuritiesError; +import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule; import ru.spcex.clearing.validation.common.rules.IdPresentRule; import ru.spcex.clearing.validation.common.rules.SpecialIdPresentRule; import ru.spcex.platform.classes.base.SpcexObjectBase; @@ -31,6 +32,7 @@ import java.util.function.Function; @Component public class ListingValidationProvider { final Imdg workflowStatusDictionaryImdg; + final Imdg currencyCodeDictionaryImdg; final Imdg listingImdg; final Imdg marketImdg; final SecuritySelector securitySelector; @@ -39,6 +41,7 @@ public class ListingValidationProvider { public ListingValidationProvider(ImdgProvider imdgProvider, SecuritySelector securitySelector) { this.securitySelector = securitySelector; this.workflowStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, SpcexObjectBase.class); + this.currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, SpcexObjectBase.class); this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, ru.clearing.classes.statics.data.misc.Market.class); } @@ -49,6 +52,7 @@ public class ListingValidationProvider { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(listingRequest); context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg); context.addImdg(IMDGDistributedNames.Map_Market, marketImdg); context.addImdg(IMDGDistributedNames.Map_Listing, listingImdg); return new ValidatorImpl>(context, @@ -62,6 +66,16 @@ public class ListingValidationProvider { SecuritiesError.RequiredFieldIsEmpty, SecuritiesError.MarketNotFound, true ), + DictionaryPresentRule.instance("tradingCurrency", ListingNewRequest::getTradingCurrency, + IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class, + SecuritiesError.RequiredFieldIsEmpty, SecuritiesError.WrongFieldValue, + false + ), + DictionaryPresentRule.instance("workflowStatus", ListingNewRequest::getWorkflowStatus, + IMDGDistributedNames.Map_WorkflowStatusDictionary, WorkflowStatusDictionary.class, + SecuritiesError.RequiredFieldIsEmpty, SecuritiesError.WrongFieldValue, + false + ), new NotSameActiveListing<>(ListingNewRequest::getSecurityId, ListingNewRequest::getMarket) ); }; @@ -77,7 +91,17 @@ public class ListingValidationProvider { new PresentById(IMDGDistributedNames.Map_Listing, SecuritiesError.ListingNotFound, true), new SecurityIdPresentRule("securityId", ListingUpdateRequest::getSecurityId, (Security security) -> - InstrumentType.RATE.equalsByKey(security.getInstrumentType()) ? SecuritiesError.ListingOnMMSCreatedBySystem : null + InstrumentType.RATE.equalsByKey(security.getInstrumentType()) ? SecuritiesError.ListingOnMMSUpdatedBySystem : null + ), + DictionaryPresentRule.instance("tradingCurrency", ListingUpdateRequest::getTradingCurrency, + IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class, + SecuritiesError.RequiredFieldIsEmpty, SecuritiesError.WrongFieldValue, + false + ), + DictionaryPresentRule.instance("workflowStatus", ListingUpdateRequest::getWorkflowStatus, + IMDGDistributedNames.Map_WorkflowStatusDictionary, WorkflowStatusDictionary.class, + SecuritiesError.RequiredFieldIsEmpty, SecuritiesError.WrongFieldValue, + false ) ); }; @@ -102,7 +126,7 @@ public class ListingValidationProvider { Security security = securitySelector.selectSecurityById(listing.getSecurityId()); if (security != null) { if (InstrumentType.RATE.equalsByKey(security.getInstrumentType())) - return SecuritiesError.ListingOnMMSCreatedBySystem; + return SecuritiesError.ListingOnMMSDeletedBySystem; } return null; }