This commit is contained in:
AKurakin 2023-06-05 18:53:36 +03:00
parent 2254f94de7
commit a036261319
2 changed files with 32 additions and 6 deletions

View file

@ -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;

View file

@ -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<SpcexObjectBase> workflowStatusDictionaryImdg;
final Imdg<SpcexObjectBase> currencyCodeDictionaryImdg;
final Imdg<Listing> listingImdg;
final Imdg<ru.clearing.classes.statics.data.misc.Market> 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<ListingNewRequest> 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<ImdgValidationContext<ListingNewRequest>>(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<ListingUpdateRequest>("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;
}