Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
ialbert 2026-05-28 17:16:40 +03:00
commit 9b5f0657a8
3 changed files with 68 additions and 3 deletions

View file

@ -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<ImdgValidationContext<OrderCompanyUpdateRequest>> {
private static final Logger log = LoggerFactory.getLogger(ValidationConfig.class);
public static OrderCurrencyChangeOnlyLccCompany getInstance() {
return new OrderCurrencyChangeOnlyLccCompany();
}
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCompanyUpdateRequest> ctx) {
Imdg<CompanyRoleSet> cmpRoleImdg = ctx.obtainMap(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class);
Imdg<Company> 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";
}
}

View file

@ -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<ImdgValidationContext<?>> {
implements IValidationRule<ImdgValidationContext<OrderCompanyNewRequest>> {
private static final Logger log = LoggerFactory.getLogger(ValidationConfig.class);
public static
OrderCurrencyOnlyLccCompany getInstance() {
@ -26,7 +27,7 @@ public class OrderCurrencyOnlyLccCompany
}
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<?> ctx) {
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCompanyNewRequest> ctx) {
Imdg<CompanyRoleSet> cmpRoleImdg = ctx.obtainMap(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class);
Imdg<Company> 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);

View file

@ -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;
@ -335,6 +336,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 +400,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))
@ -441,7 +445,7 @@ public class ValidationConfig {
//fixme проверить что tcr.getCompanyId() = companyId из запроса?
return new ValidatorImpl<>(ctx,
orderCurrencyPresent,
OrderCurrencyOnlyLccCompany.getInstance(),
OrderCurrencyChangeOnlyLccCompany.getInstance(),
companyPresentRule,
tcrPresent,
QuantityLotGreaterThanZero.INSTANCE,