From d1122476280b46cd65672e96ab34e4659f6831c0 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 27 May 2026 16:35:19 +0300 Subject: [PATCH 1/3] http://jira.mfd.msk:8088/browse/CLS-1038 --- .../clearing/dflt/management/config/ValidationConfig.java | 3 +++ 1 file changed, 3 insertions(+) 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 b81d54cb0..4d2bdcaa5 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 @@ -335,6 +335,7 @@ public class ValidationConfig { ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg); ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, tcrImdg); ctx.addImdg(IMDGDistributedNames.Map_CompanyRoleSet, cmpRoleImdg); + ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg); var orderCurrencyPresent = PresentByPredicate .builder(new IdEqualPredicate<>(orderCurrencyImdg.predicateBuilder(), OrderCompanyNewRequest::getOrderId)) .mapName(IMDGDistributedNames.Map_OrderCurrency) @@ -398,6 +399,8 @@ public class ValidationConfig { ctx.addImdg(IMDGDistributedNames.Map_OrderCurrency, orderCurrencyImdg); ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg); ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, tcrImdg); + ctx.addImdg(IMDGDistributedNames.Map_CompanyRoleSet, cmpRoleImdg); + ctx.addImdg(IMDGDistributedNames.Map_Company, companyImdg); var orderCurrencyPresent = PresentByPredicate .builder(byId(orderCurrencyImdg.predicateBuilder(), req)) From 89cad0d718ecb4d0fa748621df6040193ec4ff43 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Thu, 28 May 2026 11:50:15 +0300 Subject: [PATCH 2/3] 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, From d5b5272bb37227f29bd5d9355a42a93ea1489a56 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Thu, 28 May 2026 13:48:54 +0300 Subject: [PATCH 3/3] http://jira.mfd.msk:8088/browse/CLS-1038 --- .../validation/OrderCurrencyOnlyLccCompany.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyOnlyLccCompany.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyOnlyLccCompany.java index fc643fde7..505b6716e 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyOnlyLccCompany.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/component/validation/OrderCurrencyOnlyLccCompany.java @@ -10,6 +10,7 @@ import ru.clearing.classes.statics.data.misc.OrderCurrency; 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.OrderCompanyNewRequest; import ru.spcex.platform.enumeration.CompanyRole; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; @@ -18,7 +19,7 @@ import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidationRule; public class OrderCurrencyOnlyLccCompany - implements IValidationRule> { + implements IValidationRule> { private static final Logger log = LoggerFactory.getLogger(ValidationConfig.class); public static OrderCurrencyOnlyLccCompany getInstance() { @@ -26,7 +27,7 @@ public class OrderCurrencyOnlyLccCompany } @Override - public Optional validate(ImdgValidationContext ctx) { + 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(); @@ -42,6 +43,11 @@ public class OrderCurrencyOnlyLccCompany log.error("couldn't find company CLCC"); return of(DefaultManagementErrors.RecordNotFound, "company[CLCC]"); } + OrderCompanyNewRequest companyNewRequest = ctx.getValidatedObject(); + if (Objects.equals(companyNewRequest.getCompanyId(), clccCmp.getId())) { + return of(DefaultManagementErrors.OperationNotAllowed); + } + OrderCurrency order = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency); if (!Objects.equals(order.getCounterPartyId(), clccCmp.getId())) { return of(DefaultManagementErrors.OperationNotAllowed);