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 0cb4c69b7..afa056312 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 @@ -134,10 +134,8 @@ public class ValidationConfig { addImdg.accept(IMDGDistributedNames.Map_Account); addImdg.accept(IMDGDistributedNames.Map_Company); return new ValidatorImpl<>(context, - Sdf57ValidationRule.CompanyDebPresent, - Sdf57ValidationRule.CompanyCredPresent, - Sdf57ValidationRule.AccountDebPresent, - Sdf57ValidationRule.AccountCredPresent, + Sdf57ValidationRule.CompanyDebOrCredPresent, + Sdf57ValidationRule.AccountDebOrCredPresent, Sdf57ValidationRule.CurrencyCode ); }; 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 b39c990bc..b5c2414ae 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 @@ -14,65 +14,51 @@ import ru.spcex.platform.utils.validation.IValidationRule; import java.util.Optional; public enum Sdf57ValidationRule implements IValidationRule> { - CompanyDebPresent() { + CompanyDebOrCredPresent() { @Override public Optional validate(ImdgValidationContext context) { SDf57 sdf57 = context.getValidatedObject(); - if (TextUtil.isEmpty(sdf57.getDeal_deb())) { - return of(ClearingError.CompanyNotFound, sdf57.getDeal_deb()); - } Imdg companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class); - Company found = companyImdg.getSingleObjectBySQL("tradingCode = '" + sdf57.getDeal_deb() + "'"); - if (found == null) { - return of(ClearingError.CompanyNotFound, sdf57.getDeal_deb()); - } - context.storeObject(ValidationStored.Sdf57CompanyDeb, found); - return empty(); - } - }, CompanyCredPresent() { - @Override - public Optional validate(ImdgValidationContext context) { - SDf57 sdf57 = context.getValidatedObject(); - if (TextUtil.isEmpty(sdf57.getDeal_cred())) { - return of(ClearingError.CompanyNotFound, sdf57.getDeal_cred()); - } - Imdg companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class); - Company found = companyImdg.getSingleObjectBySQL("tradingCode = '" + sdf57.getDeal_cred() + "'"); - if (found == null) { - return of(ClearingError.CompanyNotFound, sdf57.getDeal_cred()); - } - context.storeObject(ValidationStored.Sdf57CompanyCred, found); - return empty(); - } - }, AccountDebPresent() { - @Override - public Optional validate(ImdgValidationContext context) { - SDf57 sdf57 = context.getValidatedObject(); - if (TextUtil.isEmpty(sdf57.getC_acc_deb())) { - return of(ClearingError.AccountNotPresent, sdf57.getC_acc_deb()); - } - Imdg accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class); - Account found = accountImdg.getSingleObjectBySQL("account = '" + sdf57.getC_acc_deb() + "'"); - if (found == null) { - return of(ClearingError.AccountNotPresent, sdf57.getC_acc_deb()); - } - context.storeObject(ValidationStored.Sdf57AccountDeb, found); - return empty(); - } - }, AccountCredPresent() { + Optional companyDebFound = Optional.empty(); + Optional companyCredFound = Optional.empty(); + + if (!TextUtil.isEmpty(sdf57.getDeal_deb())) { + companyDebFound = Optional.ofNullable(companyImdg.getSingleObjectBySQL("tradingCode = '" + sdf57.getDeal_deb() + "'")); + companyDebFound.ifPresent(companyDeb -> context.storeObject(ValidationStored.Sdf57CompanyDeb, companyDeb)); + } + if (!TextUtil.isEmpty(sdf57.getDeal_cred())) { + companyCredFound = Optional.ofNullable(companyImdg.getSingleObjectBySQL("tradingCode = '" + sdf57.getDeal_cred() + "'")); + companyCredFound.ifPresent(companyCred -> context.storeObject(ValidationStored.Sdf57CompanyCred, companyCred)); + } + + if (companyDebFound.isEmpty() && companyCredFound.isEmpty()) { + return of(ClearingError.CompanyNotFound, String.format("dealDeb = '%s'/ deal_cred = '%s'", + sdf57.getDeal_deb(), sdf57.getDeal_cred())); + } + return empty(); + } + }, AccountDebOrCredPresent() { @Override public Optional validate(ImdgValidationContext context) { SDf57 sdf57 = context.getValidatedObject(); - if (TextUtil.isEmpty(sdf57.getC_acc_cred())) { - return of(ClearingError.AccountNotPresent, sdf57.getC_acc_cred()); - } Imdg accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class); - Account found = accountImdg.getSingleObjectBySQL("account = '" + sdf57.getC_acc_cred() + "'"); - if (found == null) { - return of(ClearingError.AccountNotPresent, sdf57.getC_acc_cred()); + + Optional accountDebFound = Optional.empty(); + Optional accountCredFound = Optional.empty(); + if (!TextUtil.isEmpty(sdf57.getC_acc_deb())) { + accountDebFound = Optional.ofNullable(accountImdg.getSingleObjectBySQL("account = '" + sdf57.getC_acc_deb() + "'")); + accountDebFound.ifPresent(accountDeb -> context.storeObject(ValidationStored.Sdf57AccountDeb, accountDeb)); + } + + if (!TextUtil.isEmpty(sdf57.getC_acc_cred())) { + accountCredFound = Optional.ofNullable(accountImdg.getSingleObjectBySQL("account = '" + sdf57.getC_acc_cred() + "'")); + accountCredFound.ifPresent(accountCred -> context.storeObject(ValidationStored.Sdf57AccountCred, accountCred)); + } + if (accountDebFound.isEmpty() && accountCredFound.isEmpty()) { + return of(ClearingError.AccountNotPresent, String.format("accDeb = '%s'/ accDred = '%s'", + sdf57.getC_acc_deb(), sdf57.getC_acc_cred())); } - context.storeObject(ValidationStored.Sdf57AccountCred, found); return empty(); }