diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java index 84fc9c2ac..15c4245f1 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java @@ -199,6 +199,7 @@ public class ValidationConfig { return new ValidatorImpl<>(context, Sdf57ValidationRule.CompanyDebOrCredPresent, Sdf57ValidationRule.AccountDebOrCredPresent, + Sdf57ValidationRule.AccountAndCompanyMatch, Sdf57ValidationRule.CurrencyCodeCheck ); }; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/error/ClearingError.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/error/ClearingError.java index 7e7ac687a..7741ef6c1 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/error/ClearingError.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/error/ClearingError.java @@ -29,6 +29,7 @@ public enum ClearingError implements IErrorEnumId { IdentifiedFundsExceedObligations(5424L), ObligationsAlreadyCalculated(5425L), ActiveSessionIsPresent(5428L), + AccountIsNotMatchedWithCompany(5429L), //ошибки "перенесенные" из balance-service, CompanyNotFoundB(5211L), CurrencyNotFound(5213L), diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf57ValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf57ValidationRule.java index c73a0a88a..4da40da59 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf57ValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf57ValidationRule.java @@ -13,7 +13,9 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.text.TextUtil; import ru.spcex.platform.utils.validation.IValidationRule; +import java.util.Objects; import java.util.Optional; +import java.util.function.BiFunction; public enum Sdf57ValidationRule implements IValidationRule> { CompanyDebOrCredPresent() { @@ -64,7 +66,27 @@ public enum Sdf57ValidationRule implements IValidationRule validate(ImdgValidationContext context) { + Company companyDeb = context.getStoredObject(ValidationStored.Sdf57CompanyDeb); + Company companyCred = context.getStoredObject(ValidationStored.Sdf57CompanyCred); + Account accountDeb = context.getStoredObject(ValidationStored.Sdf57AccountDeb); + Account accountCred = context.getStoredObject(ValidationStored.Sdf57AccountCred); + BiFunction> check = (cmp, acc) -> { + if (cmp == null || acc == null) return empty(); + if (!Objects.equals(cmp.getId(), acc.getCompanyId())) { + return of(ClearingError.AccountIsNotMatchedWithCompany, acc.getAccount(), cmp.getClearingCode()); + } else { + return empty(); + } + }; + return check.apply(companyDeb, accountDeb).or(() -> + check.apply(companyCred, accountCred)); + } + }, + CurrencyCodeCheck() { @Override public Optional validate(ImdgValidationContext context) { SDf57 sdf57 = context.getValidatedObject();