From dd272858f8b247e3d4da1b1369a10ef1a9587aaf Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 23 Aug 2023 14:18:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA?= =?UTF-8?q?=D0=B0=20sdf21=20=D0=BD=D0=B0=20=D0=BD=D0=B0=D0=BB=D0=B8=D1=87?= =?UTF-8?q?=D0=B8=D0=B5=20DS*T=20transactionNumber?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/validation/Sdf21ValidationRule.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf21ValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf21ValidationRule.java index 55319d349..233805996 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf21ValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf21ValidationRule.java @@ -6,8 +6,10 @@ import ru.clearing.classes.statics.data.sdf.SDf21; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.OperationCode; import ru.spcex.platform.enumeration.RegistryTradingParams; 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.validation.ImdgValidationContext; @@ -15,6 +17,7 @@ import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.text.TextUtil; import ru.spcex.platform.utils.validation.IValidationRule; +import java.math.BigDecimal; import java.util.Collection; import java.util.Optional; @@ -44,12 +47,16 @@ public enum Sdf21ValidationRule implements IValidationRule rgsImdg = context.obtainMap(IMDGDistributedNames.Map_Registry, Registry.class); ImdgPredicateBuilder pb = rgsImdg.predicateBuilder(); - Registry ds_t = rgsImdg.getFirstObjectByPredicate( - pb.and( - pb.sql(RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.DS_T).build()), - pb.equals("comment", sdf21.getTransactionNumber()) - ) + ImdgPredicate prdct = pb.and( + pb.sql(RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.DS_T).build()), + pb.equals("comment", sdf21.getTransactionNumber()) ); + if (OperationCode.DELFREE.equalsByKey(sdf21.getOperationCode())) { + prdct = pb.and(prdct, pb.lessEqual("balance", BigDecimal.ZERO)); + } else if (OperationCode.RECFREE.equalsByKey(sdf21.getOperationCode())) { + prdct = pb.and(prdct, pb.greatEqual("balance", BigDecimal.ZERO)); + } + Registry ds_t = rgsImdg.getFirstObjectByPredicate(prdct); if (ds_t != null) { return of(ClearingError.SuchRecordAlreadyExists); }