From 4505cbf929abf706ba1ee75da3b6555f71a5445f Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 16 Mar 2026 12:12:47 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-927 --- ...learingMemberCategoryValidationConfig.java | 29 ++++++++++++----- .../validation/RelationValidationConfig.java | 10 +++++- .../ProviderMemberCategoryValidationRule.java | 6 ++++ .../clearing/company/error/CompanyErrors.java | 1 + .../company/service/RelationService.java | 31 ++++++------------- .../src/main/resources/db/DICTIONARIES.sql | 2 ++ 6 files changed, 49 insertions(+), 30 deletions(-) diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ClearingMemberCategoryValidationConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ClearingMemberCategoryValidationConfig.java index 4d64a2bfe..a691aa2eb 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ClearingMemberCategoryValidationConfig.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/ClearingMemberCategoryValidationConfig.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.company.config.validation; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; @@ -15,17 +18,17 @@ import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule; import ru.spcex.clearing.validation.common.rules.IdPresentRule; import ru.spcex.clearing.validation.common.rules.specific.IdPresentSpecificRule; import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.enumeration.ClearingCategory; +import static ru.spcex.platform.enumeration.ClearingCategory.K; +import static ru.spcex.platform.enumeration.ClearingCategory.T; import ru.spcex.platform.enumeration.WorkflowStatus; 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.enumeration.IEnumKey; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; -import java.util.Map; -import java.util.function.Consumer; -import java.util.function.Function; - @Configuration public class ClearingMemberCategoryValidationConfig { @@ -52,7 +55,11 @@ public class ClearingMemberCategoryValidationConfig { IMDGDistributedNames.Map_ClearingCategoryDictionary, ClearingCategoryDictionary.class, CompanyErrors.RequiredFieldEmpty, - CompanyErrors.DictionaryNotFound), + CompanyErrors.DictionaryNotFound, + category -> { + ClearingCategory enumVal = IEnumKey.getEnumByKey(ClearingCategory.class, category.getCode()); + return IEnumKey.contains(enumVal, T, K) ? CompanyErrors.CategoryIsNotSupported : null; + }), ProviderMemberCategoryValidationRule.NEW ); }; @@ -91,7 +98,11 @@ public class ClearingMemberCategoryValidationConfig { ClearingCategoryDictionary.class, CompanyErrors.RequiredFieldEmpty, CompanyErrors.DictionaryNotFound, - false), + false, + category -> { + ClearingCategory enumVal = IEnumKey.getEnumByKey(ClearingCategory.class, category.getCode()); + return IEnumKey.contains(enumVal, T, K) ? CompanyErrors.CategoryIsNotSupported : null; + }), ProviderMemberCategoryValidationRule.UPDATE ); }; @@ -114,7 +125,11 @@ public class ClearingMemberCategoryValidationConfig { IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class, CompanyErrors.RequiredFieldEmpty, - CompanyErrors.CategoryNotFound), + CompanyErrors.CategoryNotFound, + category -> { + ClearingCategory enumVal = IEnumKey.getEnumByKey(ClearingCategory.class, category.getClearingMemberCategory()); + return IEnumKey.contains(enumVal, T, K) ? CompanyErrors.CategoryIsNotSupported : null; + }), ProviderMemberCategoryValidationRule.DELETE ); }; diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/RelationValidationConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/RelationValidationConfig.java index 50eac7ce2..10947c988 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/RelationValidationConfig.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/RelationValidationConfig.java @@ -14,8 +14,12 @@ import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationUpdateReq import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule; import ru.spcex.clearing.validation.common.rules.IdPresentRule; import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.enumeration.ClearingCategory; +import static ru.spcex.platform.enumeration.ClearingCategory.K; +import static ru.spcex.platform.enumeration.ClearingCategory.T; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; @@ -51,7 +55,11 @@ public class RelationValidationConfig { ClearingCategoryDictionary.class, CompanyErrors.RequiredFieldEmpty, CompanyErrors.DictionaryNotFound, - false), + false, + category -> { + ClearingCategory enumVal = IEnumKey.getEnumByKey(ClearingCategory.class, category.getCode()); + return IEnumKey.contains(enumVal, T, K) ? CompanyErrors.CategoryIsNotSupported : null; + }), DictionaryPresentRule.instance("serviceStatus", RelationNewRequest::getServiceStatus, IMDGDistributedNames.Map_ServiceStatusDictionary, diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/rules/ProviderMemberCategoryValidationRule.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/rules/ProviderMemberCategoryValidationRule.java index c47ddfe1d..d082ae231 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/rules/ProviderMemberCategoryValidationRule.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/validation/rules/ProviderMemberCategoryValidationRule.java @@ -1,6 +1,7 @@ package ru.spcex.clearing.company.config.validation.rules; import java.time.LocalDate; +import java.util.Arrays; import java.util.Collection; import java.util.Optional; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; @@ -27,6 +28,11 @@ public enum ProviderMemberCategoryValidationRule implements IValidationRule validate(ImdgValidationContext context) { ClearingMemberCategoryNewRequest categoryReq = (ClearingMemberCategoryNewRequest) context.getValidatedObject(); ClearingCategory category = IEnumKey.getEnumByKey(ClearingCategory.class, categoryReq.getClearingMemberCategory()); + + if (Arrays.asList(ClearingCategory.T, + ClearingCategory.K).contains(category)) { + return Optional.of(new EnumMessage(CompanyErrors.CategoryIsNotSupported, category.getKey())); + } Imdg categoryImdg = context.obtainMap(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); Imdg companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class); ImdgPredicateBuilder predicateBuilder = categoryImdg.predicateBuilder(); diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/error/CompanyErrors.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/error/CompanyErrors.java index 6e3c50367..6e76c521b 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/error/CompanyErrors.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/error/CompanyErrors.java @@ -35,6 +35,7 @@ public enum CompanyErrors implements IErrorEnumId { ProviderCompanyAlreadyExist(3035L), ToManyProviderCompany(3036L), FoundUnfulfilledLiabilities(3037L), + CategoryIsNotSupported(3038L), ; private final Long id; diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java index 7bba570a9..0445220d0 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java @@ -184,8 +184,9 @@ public class RelationService extends QueueConsumer implements InitializingBean { relation.setServiceStatus(toStatus); } } - String service = serviceForCMC(req.getClearingMemberCategory()); - relation.setService(service); // MKR + ClearingCategory clearingCategory = IEnumKey.getEnumByKey(ClearingCategory.class, req.getClearingMemberCategory()); + ru.spcex.platform.enumeration.Service service = serviceForCMC(clearingCategory); + relation.setService(service.getKey()); // MKR relation.setServiceProduct(ServiceProduct.ZERO.getKey()); relation.setComment(req.getComment()); @@ -218,8 +219,9 @@ public class RelationService extends QueueConsumer implements InitializingBean { company.getId(), company.getWorkflowStatus(), relation.getId(), toStatus); relation.setServiceStatus(toStatus); } - String service = serviceForCMC(clearingMemberCategory); - relation.setService(service); // MKR + ClearingCategory clearingCategory = IEnumKey.getEnumByKey(ClearingCategory.class, clearingMemberCategory); + ru.spcex.platform.enumeration.Service service = serviceForCMC(clearingCategory); + relation.setService(service.getKey()); // MKR relation.setServiceProduct(ServiceProduct.ZERO.getKey()); relation.setComment(req.getComment()); @@ -229,22 +231,6 @@ public class RelationService extends QueueConsumer implements InitializingBean { return null; } - String serviceForCMC(String clearingMemberCategory) { - String svc = null; - if (ClearingCategory.B.equalsByKey(clearingMemberCategory) - || ClearingCategory.I.equalsByKey(clearingMemberCategory) - || ClearingCategory.V.equalsByKey(clearingMemberCategory) - || ClearingCategory.P.equalsByKey(clearingMemberCategory) - ) { - svc = MKR.getKey(); - } else if (ClearingCategory.C.equalsByKey(clearingMemberCategory) - || ClearingCategory.F.equalsByKey(clearingMemberCategory) - ) { - svc = ru.spcex.platform.enumeration.Service.FOND.getKey(); - } - return svc; - } - ru.spcex.platform.enumeration.Service serviceForCMC(ClearingCategory clearingCategory) { switch (Objects.requireNonNull(clearingCategory)) { case B, I, V, P: @@ -257,7 +243,8 @@ public class RelationService extends QueueConsumer implements InitializingBean { } private Relation searchRelation(ImdgTransaction tx, String clearingMemberCategory, Long consumerId) { - String svc = serviceForCMC(clearingMemberCategory); + ClearingCategory clearingCategory = IEnumKey.getEnumByKey(ClearingCategory.class, clearingMemberCategory); + ru.spcex.platform.enumeration.Service svc = serviceForCMC(clearingCategory); if (svc == null) { log.warn("Unexpected relation clearingMemberCategory={}", clearingMemberCategory); return null; @@ -265,7 +252,7 @@ public class RelationService extends QueueConsumer implements InitializingBean { Imdg currentRelationMap = tx == null ? relationMap : tx.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); Relation existRelation = currentRelationMap.getFirstObjectByFieldValues(Map.of( "consumerId", consumerId, - "service", svc + "service", svc.getKey() )); if (existRelation == null) log.trace("Relation with consumerId={} and service={} not exist.", consumerId, svc); diff --git a/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql b/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql index ebe03ada7..ba92183bf 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql @@ -1095,6 +1095,8 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3036, 'CMPN', 'Нев INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3037, 'CMPN', 'Компания %s имеет неисполненные обязательства.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3038, 'CMPN', 'Категория %s не поддерживается.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (4000, 'RPRT', 'Общая ошибка модуля report-serivce.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5000, 'ACNT', 'Общая ошибка модуля account-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;