From 09c0ab342b677f8c6a1c13ca14d3b3462539570d Mon Sep 17 00:00:00 2001 From: akulikov Date: Thu, 6 Apr 2023 10:37:48 +0300 Subject: [PATCH] FixedIncomeCashFlowValidationConfig --- .../common/rules/FieldRequiredRule.java | 1 + .../ClearingMemberCategoryService.java | 4 +- .../securities/config/ValidationConfig.java | 19 ++++++ .../FixedIncomeCashFlowValidationConfig.java | 64 ++++++++++++++++++ .../cud/FixedIncomeCashFlowService.java | 65 +++++++++++++++++++ 5 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/validation/FixedIncomeCashFlowValidationConfig.java create mode 100644 clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeCashFlowService.java diff --git a/clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java b/clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java index d8e0a0303..2cef88c89 100644 --- a/clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java +++ b/clearing-parent/clearing-utils/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java @@ -29,6 +29,7 @@ public record FieldRequiredRule( * @param Класс проверяемого объекта * @param Класс проверяемого значения */ + @SafeVarargs public static FieldRequiredRule instance(String fieldName, Function getter, IErrorEnumId errorEmptyRequiredValue, diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java index e3e928473..56c7335ad 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java @@ -65,12 +65,12 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init } private RequestInfoUpdate clearingMemberCategoryNew(BaseRequest userRequest) { - ClearingMemberCategoryNewRequest req = userRequest.getRequestPayload(); + log.debug("ClearingMemberCategoryNewRequest received {}", userRequest.getId()); RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryNewRequestValidator); if (requestInfoUpdate != null) return requestInfoUpdate; - log.debug("ClearingMemberCategoryUpdateRequest received {}", userRequest.getId()); + ClearingMemberCategoryNewRequest req = userRequest.getRequestPayload(); ClearingMemberCategory newCategory = new ClearingMemberCategory(); newCategory.setCompanyId(req.getCompanyId()); newCategory.setClearingMemberCategory(req.getClearingMemberCategory()); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ValidationConfig.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ValidationConfig.java index 253f2395c..6fcd1fcf6 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ValidationConfig.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/ValidationConfig.java @@ -2,13 +2,32 @@ package ru.spcex.clearing.securities.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import ru.clearing.platform.dictionary.CountryCodeDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IMessageResolver; +import java.util.HashMap; +import java.util.Map; +import java.util.function.BiConsumer; + @Configuration public class ValidationConfig { + @Bean("imdgForValidation") + public Map> imdgForValidation(ImdgProvider imdgProvider) { + final Map> imdg = new HashMap<>(); + BiConsumer> addImdg = (s, aClass) -> imdg.put(s, imdgProvider.getImdg(s, aClass)); + + addImdg.accept(IMDGDistributedNames.Map_FixedIncomeCashFlow, CountryCodeDictionary.class); + + return imdg; + } + @Bean("validationHelper") public ValidationHelper validationHelper(IMessageResolver messageResolver) { return new ValidationHelper(messageResolver); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/validation/FixedIncomeCashFlowValidationConfig.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/validation/FixedIncomeCashFlowValidationConfig.java new file mode 100644 index 000000000..179b29106 --- /dev/null +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/config/validation/FixedIncomeCashFlowValidationConfig.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.securities.config.validation; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeCashFlow; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeCashFlowNewRequest; +import ru.spcex.clearing.securities.errors.SecuritiesError; +import ru.spcex.clearing.validation.common.rules.FieldRequiredRule; +import ru.spcex.clearing.validation.common.rules.IsLongValueRule; +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.validation.IValidator; +import ru.spcex.platform.utils.validation.ValidatorImpl; + +import java.util.Collection; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; + +@Configuration +public class FixedIncomeCashFlowValidationConfig { + + @Bean("fixedIncomeCashFlowNewRequestValidator") + public Function fixedIncomeCashFlowNewRequestValidator( + Map> imdgForValidation + ) { + return fixedIncomeCashFlowNewRequest -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(fixedIncomeCashFlowNewRequest); + Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); + addImdg.accept(IMDGDistributedNames.Map_ClearingMemberCategory); + return new ValidatorImpl<>(context, + IsLongValueRule.instance("securitySymbol", + FixedIncomeCashFlowNewRequest::getSecuritySymbol, + SecuritiesError.RequiredFieldIsEmpty, + SecuritiesError.WrongFieldValue), + FieldRequiredRule.instance("securitySymbol", + FixedIncomeCashFlowNewRequest::getSecuritySymbol, + SecuritiesError.RequiredFieldIsEmpty, + request -> { + Imdg fixedIncomeCashFlowImdg = context.obtainMap( + IMDGDistributedNames.Map_FixedIncomeCashFlow, FixedIncomeCashFlow.class + ); + Long securityId = Long.valueOf(request.getSecuritySymbol()); + Collection fixedIncomeCashFlows = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(Map.of("securityId", securityId)); + if (!fixedIncomeCashFlows.isEmpty()) return SecuritiesError.CouponPeriodAlreadyExists; + return null; + }), + FieldRequiredRule.instance("accruedCoupon", + FixedIncomeCashFlowNewRequest::getAccruedCoupon, + SecuritiesError.RequiredFieldIsEmpty), + FieldRequiredRule.instance("nominalValue", + FixedIncomeCashFlowNewRequest::getNominalValue, + SecuritiesError.RequiredFieldIsEmpty), + FieldRequiredRule.instance("number", + FixedIncomeCashFlowNewRequest::getNumber, + SecuritiesError.RequiredFieldIsEmpty) + ); + }; + } + +} diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeCashFlowService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeCashFlowService.java new file mode 100644 index 000000000..b8309e587 --- /dev/null +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeCashFlowService.java @@ -0,0 +1,65 @@ +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.stereotype.Service; +import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeCashFlow; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeCashFlowNewRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Service +public class FixedIncomeCashFlowService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg fixedIncomeCashFlowImdg; + private final ImdgProvider imdgProvider; + private final ValidationHelper validationHelper; + + public FixedIncomeCashFlowService(Consumer kafkaQueue, + Producer kafkaResponseQueue, + ImdgProvider imdgProvider, + ValidationHelper validationHelper) { + super(kafkaQueue, kafkaResponseQueue); + this.imdgProvider = imdgProvider; + this.validationHelper = validationHelper; + this.fixedIncomeCashFlowImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_FixedIncomeCashFlow, FixedIncomeCashFlow.class + ); + + } + + @Override + public void afterPropertiesSet() throws Exception { + log.debug("EquitySecurityNewRequest received"); + + init(); + } + + public RequestInfoUpdate fixedIncomeCashFlowNew(BaseRequest userRequest) { + log.debug("FixedIncomeCashFlowNewRequest received {}", userRequest.getId()); + + // validation + + FixedIncomeCashFlowNewRequest req = userRequest.getRequestPayload(); + FixedIncomeCashFlow fixedIncomeCashFlow = new FixedIncomeCashFlow(); + fixedIncomeCashFlow.setSecurityId(Long.valueOf(req.getSecuritySymbol())); + fixedIncomeCashFlow.setAccruedCoupon(req.getAccruedCoupon()); + fixedIncomeCashFlow.setNominalValue(req.getNominalValue()); + fixedIncomeCashFlow.setNumber(req.getNumber()); + fixedIncomeCashFlow.setValueDate(req.getValueDate()); + + Long id = fixedIncomeCashFlowImdg.insert(fixedIncomeCashFlow); + log.debug("successfully processed, id {}", id); + + return null; + } +} +