From 89cad0d718ecb4d0fa748621df6040193ec4ff43 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Thu, 28 May 2026 11:50:15 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-1038 --- .../OrderCurrencyChangeOnlyLccCompany.java | 55 +++++++++++++++++++ .../management/config/ValidationConfig.java | 3 +- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyChangeOnlyLccCompany.java diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyChangeOnlyLccCompany.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyChangeOnlyLccCompany.java new file mode 100644 index 000000000..028ba1656 --- /dev/null +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyChangeOnlyLccCompany.java @@ -0,0 +1,55 @@ +package ru.spcex.clearing.dflt.management.component.validation; + +import java.util.Objects; +import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanyRoleSet; +import ru.spcex.clearing.dflt.management.config.ValidationConfig; +import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.order.OrderCompanyUpdateRequest; +import ru.spcex.platform.enumeration.CompanyRole; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; + +public class OrderCurrencyChangeOnlyLccCompany + implements IValidationRule> { + private static final Logger log = LoggerFactory.getLogger(ValidationConfig.class); + public static OrderCurrencyChangeOnlyLccCompany getInstance() { + return new OrderCurrencyChangeOnlyLccCompany(); + } + + @Override + public Optional validate(ImdgValidationContext ctx) { + Imdg cmpRoleImdg = ctx.obtainMap(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class); + Imdg companyImdg = ctx.obtainMap(IMDGDistributedNames.Map_Company, Company.class); + ImdgPredicateBuilder cmpRolePb = cmpRoleImdg.predicateBuilder(); + CompanyRoleSet companyRoleSet = cmpRoleImdg.getFirstObjectByPredicate( + cmpRolePb.equals("companyRole", CompanyRole.CLCC.getKey()) + ); + if (companyRoleSet == null) { + log.error("couldn't find companyRole CLCC"); + return of(DefaultManagementErrors.RecordNotFound, "companyRole[CLCC]"); + } + Company clccCmp = companyImdg.getSingleObjectByID(companyRoleSet.getCompanyId()); + if (clccCmp == null) { + log.error("couldn't find company CLCC"); + return of(DefaultManagementErrors.RecordNotFound, "company[CLCC]"); + } + OrderCompanyUpdateRequest order = ctx.getValidatedObject(); + if (Objects.equals(order.getCompanyId(), clccCmp.getId())) { + return of(DefaultManagementErrors.OperationNotAllowed); + } + return empty(); + } + + @Override + public String ruleName() { + return "OrderCurrencyOnlyLccCompany"; + } +} diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/ValidationConfig.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/ValidationConfig.java index 4d2bdcaa5..5ea5e96d8 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/ValidationConfig.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/ValidationConfig.java @@ -20,6 +20,7 @@ import ru.clearing.platform.dictionary.OrderStatusDictionary; import ru.clearing.platform.dictionary.OvernightTypeDictionary; import ru.clearing.platform.dictionary.SideDictionary; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyByCompanyAndTcrAlreadyPresent; +import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyChangeOnlyLccCompany; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyCompanyNotChanged; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyOnlyLccCompany; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyPLBLCheck; @@ -444,7 +445,7 @@ public class ValidationConfig { //fixme проверить что tcr.getCompanyId() = companyId из запроса? return new ValidatorImpl<>(ctx, orderCurrencyPresent, - OrderCurrencyOnlyLccCompany.getInstance(), + OrderCurrencyChangeOnlyLccCompany.getInstance(), companyPresentRule, tcrPresent, QuantityLotGreaterThanZero.INSTANCE,