diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java index 112c41203..3feebd8ac 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java @@ -122,6 +122,9 @@ public class Sdf20Executor { ds_t.setRegistryDesignation(RegistryDesignation.D.getKey()); ds_t.setRegistryCode(RegistryUtil.clearingCode(ds_t)); rgsImdg.insert(ds_t); + } else { + log.debug("DS*T.id={} found for sdf20.id={}", ds_t.getId(), sDf20.getId()); + return; } Registry as_t = assets.a__t(); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java index c8b43c884..afda6e946 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf20ValidationRule.java @@ -15,6 +15,9 @@ import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.OperationCode; import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector; import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; @@ -128,16 +131,24 @@ public enum Sdf20ValidationRule implements IValidationRule validate(ImdgValidationContext context) { SDf20 sDf20 = context.getValidatedObject(); - String inDocument = sDf20.getInDocument(); + String transactionNumber = sDf20.getTransactionNumber(); String security = sDf20.getSecurity(); Account acc = context.getStoredObject(ValidationStored.Sdf20Account); - if (TextUtil.isEmpty(inDocument) || TextUtil.isEmpty(security) || acc == null) { + if (TextUtil.isEmpty(transactionNumber) || TextUtil.isEmpty(security) || acc == null) { return of(ClearingError.RecordNotFound, "DS*T"); } Imdg rgsImdg = context.obtainMap(IMDGDistributedNames.Map_Registry, Registry.class); - RegistryManager rgsMng = new RegistryManager(rgsImdg); - Optional ds_t = rgsMng.searchByAccSecContract(acc.getId(), security, inDocument, DS_T); - ds_t.ifPresent(registry -> context.storeObject(ValidationStored.Sdf20Dst, registry)); + ImdgPredicateBuilder pb = rgsImdg.predicateBuilder(); + ImdgPredicate dstPrdct = pb.and( + pb.sql(RegistryCodeSqlBuilder.getInstance(DS_T).build()), + pb.equals("accountId", acc.getId()), + pb.equals("securitySymbol", security), + pb.equals("comment", transactionNumber) + ); + Registry ds_t = rgsImdg.getFirstObjectByPredicate(dstPrdct); + if (ds_t != null) { + context.storeObject(ValidationStored.Sdf20Dst, ds_t); + } return empty(); } },