diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/IRegistryBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/IRegistryBuilder.java index e3d107e6d..3d8d44661 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/IRegistryBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/IRegistryBuilder.java @@ -10,5 +10,6 @@ public interface IRegistryBuilder { IRegistryBuilder imdg(ImdgProvider imdgProvider); IRegistryBuilder exec(ExecutionCommon exec); IRegistryBuilder registryDesignation(RegistryDesignation registryDesignation); + IRegistryBuilder returnDeposit(boolean returnDeposit); Registry build(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java index 543f3f2bf..71280d243 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java @@ -36,6 +36,7 @@ public class RegistryDepoBuilder implements IRegistryBuilder { private Imdg currencyImdg; private ExecutionCommon exec; private RegistryDesignation regDsgn; + private boolean secondLeg; private RegistryDepoBuilder() { } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java index b7e335e40..7e18a9389 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java @@ -70,6 +70,14 @@ public class RegistryFondBuilder implements IRegistryBuilder { return this; } + @Override + public IRegistryBuilder returnDeposit(boolean returnDep) { + if (returnDep) { + throw new IllegalStateException("cannot create second leg registry for ExecutionFond"); + } + return this; + } + @Override public Registry build() { ISide side = getSide(exec); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java index fc648b54a..af8b4a935 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java @@ -29,7 +29,6 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; -import java.util.function.BiConsumer; import java.util.function.BiFunction; @Service @@ -74,7 +73,7 @@ public class RequirementsAndObligationCreation implements ISessionStage { AtomicReference>> regSearchMethod = new AtomicReference<>(); //обычный поиск regSearchMethod.set(this::findReg); - BiConsumer findAndUpdateOrCreate = (exec, regDsgn) -> + TriConsumer findAndUpdateOrCreate = (exec, regDsgn, returnedDep) -> regSearchMethod.get().apply(exec, regDsgn) .ifPresentOrElse(registry -> { RegistryUpdater.updater() @@ -88,20 +87,21 @@ public class RequirementsAndObligationCreation implements ISessionStage { .imdg(imdgProvider) .exec(exec) .registryDesignation(regDsgn) + .returnDeposit(returnedDep) .build(); registryImdg.insert(newRegister); }); - findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.O); - findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.T); - findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O); - findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T); + findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.O, false); + findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.T, false); + findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O, false); + findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T, false); if (partyExec.type().equals(ExecutionType.ExecutionDeposit) && ((ExecutionDeposit) partyExec).getSecondLegSettlementDate() != null) { //поиск по дате расчетов ExecutionDeposit.secondLegSettlementDt regSearchMethod.set(this::findRegBySettlementDt); - findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.T); - findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.O); - findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T); - findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O); + findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.T, true); + findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.O, true); + findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T, true); + findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O, true); } } return new StageResult<>(null, true); @@ -234,4 +234,9 @@ public class RequirementsAndObligationCreation implements ISessionStage { case ExecutionDeposit -> RegistryDepoBuilder.builder(); }; } + + @FunctionalInterface + private static interface TriConsumer { + void accept(T1 t1, T2 t2, T3 t3); + } }