etreschenkov 2026-03-16 12:12:47 +03:00
parent 1be60f8eb0
commit 4505cbf929
6 changed files with 49 additions and 30 deletions

View file

@ -1,5 +1,8 @@
package ru.spcex.clearing.company.config.validation; 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.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory; 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.IdPresentRule;
import ru.spcex.clearing.validation.common.rules.specific.IdPresentSpecificRule; import ru.spcex.clearing.validation.common.rules.specific.IdPresentSpecificRule;
import ru.spcex.platform.classes.base.SpcexObjectBase; 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.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage; 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.IValidator;
import ru.spcex.platform.utils.validation.ValidatorImpl; import ru.spcex.platform.utils.validation.ValidatorImpl;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
@Configuration @Configuration
public class ClearingMemberCategoryValidationConfig { public class ClearingMemberCategoryValidationConfig {
@ -52,7 +55,11 @@ public class ClearingMemberCategoryValidationConfig {
IMDGDistributedNames.Map_ClearingCategoryDictionary, IMDGDistributedNames.Map_ClearingCategoryDictionary,
ClearingCategoryDictionary.class, ClearingCategoryDictionary.class,
CompanyErrors.RequiredFieldEmpty, 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 ProviderMemberCategoryValidationRule.NEW
); );
}; };
@ -91,7 +98,11 @@ public class ClearingMemberCategoryValidationConfig {
ClearingCategoryDictionary.class, ClearingCategoryDictionary.class,
CompanyErrors.RequiredFieldEmpty, CompanyErrors.RequiredFieldEmpty,
CompanyErrors.DictionaryNotFound, CompanyErrors.DictionaryNotFound,
false), false,
category -> {
ClearingCategory enumVal = IEnumKey.getEnumByKey(ClearingCategory.class, category.getCode());
return IEnumKey.contains(enumVal, T, K) ? CompanyErrors.CategoryIsNotSupported : null;
}),
ProviderMemberCategoryValidationRule.UPDATE ProviderMemberCategoryValidationRule.UPDATE
); );
}; };
@ -114,7 +125,11 @@ public class ClearingMemberCategoryValidationConfig {
IMDGDistributedNames.Map_ClearingMemberCategory, IMDGDistributedNames.Map_ClearingMemberCategory,
ClearingMemberCategory.class, ClearingMemberCategory.class,
CompanyErrors.RequiredFieldEmpty, 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 ProviderMemberCategoryValidationRule.DELETE
); );
}; };

View file

@ -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.DictionaryPresentRule;
import ru.spcex.clearing.validation.common.rules.IdPresentRule; import ru.spcex.clearing.validation.common.rules.IdPresentRule;
import ru.spcex.platform.classes.base.SpcexObjectBase; 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.api.Imdg;
import ru.spcex.platform.imdg.validation.ImdgValidationContext; 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.IValidator;
import ru.spcex.platform.utils.validation.ValidatorImpl; import ru.spcex.platform.utils.validation.ValidatorImpl;
@ -51,7 +55,11 @@ public class RelationValidationConfig {
ClearingCategoryDictionary.class, ClearingCategoryDictionary.class,
CompanyErrors.RequiredFieldEmpty, CompanyErrors.RequiredFieldEmpty,
CompanyErrors.DictionaryNotFound, 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", DictionaryPresentRule.instance("serviceStatus",
RelationNewRequest::getServiceStatus, RelationNewRequest::getServiceStatus,
IMDGDistributedNames.Map_ServiceStatusDictionary, IMDGDistributedNames.Map_ServiceStatusDictionary,

View file

@ -1,6 +1,7 @@
package ru.spcex.clearing.company.config.validation.rules; package ru.spcex.clearing.company.config.validation.rules;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Optional; import java.util.Optional;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
@ -27,6 +28,11 @@ public enum ProviderMemberCategoryValidationRule implements IValidationRule<Imdg
public Optional<EnumMessage> validate(ImdgValidationContext<?> context) { public Optional<EnumMessage> validate(ImdgValidationContext<?> context) {
ClearingMemberCategoryNewRequest categoryReq = (ClearingMemberCategoryNewRequest) context.getValidatedObject(); ClearingMemberCategoryNewRequest categoryReq = (ClearingMemberCategoryNewRequest) context.getValidatedObject();
ClearingCategory category = IEnumKey.getEnumByKey(ClearingCategory.class, categoryReq.getClearingMemberCategory()); 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<ClearingMemberCategory> categoryImdg = context.obtainMap(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); Imdg<ClearingMemberCategory> categoryImdg = context.obtainMap(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class); Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
ImdgPredicateBuilder predicateBuilder = categoryImdg.predicateBuilder(); ImdgPredicateBuilder predicateBuilder = categoryImdg.predicateBuilder();

View file

@ -35,6 +35,7 @@ public enum CompanyErrors implements IErrorEnumId {
ProviderCompanyAlreadyExist(3035L), ProviderCompanyAlreadyExist(3035L),
ToManyProviderCompany(3036L), ToManyProviderCompany(3036L),
FoundUnfulfilledLiabilities(3037L), FoundUnfulfilledLiabilities(3037L),
CategoryIsNotSupported(3038L),
; ;
private final Long id; private final Long id;

View file

@ -184,8 +184,9 @@ public class RelationService extends QueueConsumer implements InitializingBean {
relation.setServiceStatus(toStatus); relation.setServiceStatus(toStatus);
} }
} }
String service = serviceForCMC(req.getClearingMemberCategory()); ClearingCategory clearingCategory = IEnumKey.getEnumByKey(ClearingCategory.class, req.getClearingMemberCategory());
relation.setService(service); // MKR ru.spcex.platform.enumeration.Service service = serviceForCMC(clearingCategory);
relation.setService(service.getKey()); // MKR
relation.setServiceProduct(ServiceProduct.ZERO.getKey()); relation.setServiceProduct(ServiceProduct.ZERO.getKey());
relation.setComment(req.getComment()); relation.setComment(req.getComment());
@ -218,8 +219,9 @@ public class RelationService extends QueueConsumer implements InitializingBean {
company.getId(), company.getWorkflowStatus(), relation.getId(), toStatus); company.getId(), company.getWorkflowStatus(), relation.getId(), toStatus);
relation.setServiceStatus(toStatus); relation.setServiceStatus(toStatus);
} }
String service = serviceForCMC(clearingMemberCategory); ClearingCategory clearingCategory = IEnumKey.getEnumByKey(ClearingCategory.class, clearingMemberCategory);
relation.setService(service); // MKR ru.spcex.platform.enumeration.Service service = serviceForCMC(clearingCategory);
relation.setService(service.getKey()); // MKR
relation.setServiceProduct(ServiceProduct.ZERO.getKey()); relation.setServiceProduct(ServiceProduct.ZERO.getKey());
relation.setComment(req.getComment()); relation.setComment(req.getComment());
@ -229,22 +231,6 @@ public class RelationService extends QueueConsumer implements InitializingBean {
return null; 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) { ru.spcex.platform.enumeration.Service serviceForCMC(ClearingCategory clearingCategory) {
switch (Objects.requireNonNull(clearingCategory)) { switch (Objects.requireNonNull(clearingCategory)) {
case B, I, V, P: 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) { 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) { if (svc == null) {
log.warn("Unexpected relation clearingMemberCategory={}", clearingMemberCategory); log.warn("Unexpected relation clearingMemberCategory={}", clearingMemberCategory);
return null; return null;
@ -265,7 +252,7 @@ public class RelationService extends QueueConsumer implements InitializingBean {
Imdg<Relation> currentRelationMap = tx == null ? relationMap : tx.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); Imdg<Relation> currentRelationMap = tx == null ? relationMap : tx.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
Relation existRelation = currentRelationMap.getFirstObjectByFieldValues(Map.of( Relation existRelation = currentRelationMap.getFirstObjectByFieldValues(Map.of(
"consumerId", consumerId, "consumerId", consumerId,
"service", svc "service", svc.getKey()
)); ));
if (existRelation == null) if (existRelation == null)
log.trace("Relation with consumerId={} and service={} not exist.", consumerId, svc); log.trace("Relation with consumerId={} and service={} not exist.", consumerId, svc);

View file

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