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;
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
);
};

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.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,

View file

@ -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<Imdg
public Optional<EnumMessage> 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<ClearingMemberCategory> categoryImdg = context.obtainMap(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
ImdgPredicateBuilder predicateBuilder = categoryImdg.predicateBuilder();

View file

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

View file

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

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