fond/deposit registry builder
This commit is contained in:
parent
46d87a046e
commit
d26ee55b55
4 changed files with 25 additions and 10 deletions
|
|
@ -10,5 +10,6 @@ public interface IRegistryBuilder {
|
||||||
IRegistryBuilder imdg(ImdgProvider imdgProvider);
|
IRegistryBuilder imdg(ImdgProvider imdgProvider);
|
||||||
IRegistryBuilder exec(ExecutionCommon exec);
|
IRegistryBuilder exec(ExecutionCommon exec);
|
||||||
IRegistryBuilder registryDesignation(RegistryDesignation registryDesignation);
|
IRegistryBuilder registryDesignation(RegistryDesignation registryDesignation);
|
||||||
|
IRegistryBuilder returnDeposit(boolean returnDeposit);
|
||||||
Registry build();
|
Registry build();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ public class RegistryDepoBuilder implements IRegistryBuilder {
|
||||||
private Imdg<Currency> currencyImdg;
|
private Imdg<Currency> currencyImdg;
|
||||||
private ExecutionCommon exec;
|
private ExecutionCommon exec;
|
||||||
private RegistryDesignation regDsgn;
|
private RegistryDesignation regDsgn;
|
||||||
|
private boolean secondLeg;
|
||||||
|
|
||||||
private RegistryDepoBuilder() {
|
private RegistryDepoBuilder() {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,14 @@ public class RegistryFondBuilder implements IRegistryBuilder {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IRegistryBuilder returnDeposit(boolean returnDep) {
|
||||||
|
if (returnDep) {
|
||||||
|
throw new IllegalStateException("cannot create second leg registry for ExecutionFond");
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Registry build() {
|
public Registry build() {
|
||||||
ISide side = getSide(exec);
|
ISide side = getSide(exec);
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
import java.util.function.BiFunction;
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
|
@ -74,7 +73,7 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
AtomicReference<BiFunction<ExecutionCommon, RegistryDesignation, Optional<Registry>>> regSearchMethod = new AtomicReference<>();
|
AtomicReference<BiFunction<ExecutionCommon, RegistryDesignation, Optional<Registry>>> regSearchMethod = new AtomicReference<>();
|
||||||
//обычный поиск
|
//обычный поиск
|
||||||
regSearchMethod.set(this::findReg);
|
regSearchMethod.set(this::findReg);
|
||||||
BiConsumer<ExecutionCommon, RegistryDesignation> findAndUpdateOrCreate = (exec, regDsgn) ->
|
TriConsumer<ExecutionCommon, RegistryDesignation, Boolean> findAndUpdateOrCreate = (exec, regDsgn, returnedDep) ->
|
||||||
regSearchMethod.get().apply(exec, regDsgn)
|
regSearchMethod.get().apply(exec, regDsgn)
|
||||||
.ifPresentOrElse(registry -> {
|
.ifPresentOrElse(registry -> {
|
||||||
RegistryUpdater.updater()
|
RegistryUpdater.updater()
|
||||||
|
|
@ -88,20 +87,21 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
.imdg(imdgProvider)
|
.imdg(imdgProvider)
|
||||||
.exec(exec)
|
.exec(exec)
|
||||||
.registryDesignation(regDsgn)
|
.registryDesignation(regDsgn)
|
||||||
|
.returnDeposit(returnedDep)
|
||||||
.build();
|
.build();
|
||||||
registryImdg.insert(newRegister);
|
registryImdg.insert(newRegister);
|
||||||
});
|
});
|
||||||
findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.O);
|
findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.O, false);
|
||||||
findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.T);
|
findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.T, false);
|
||||||
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O);
|
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O, false);
|
||||||
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T);
|
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T, false);
|
||||||
if (partyExec.type().equals(ExecutionType.ExecutionDeposit) && ((ExecutionDeposit) partyExec).getSecondLegSettlementDate() != null) {
|
if (partyExec.type().equals(ExecutionType.ExecutionDeposit) && ((ExecutionDeposit) partyExec).getSecondLegSettlementDate() != null) {
|
||||||
//поиск по дате расчетов ExecutionDeposit.secondLegSettlementDt
|
//поиск по дате расчетов ExecutionDeposit.secondLegSettlementDt
|
||||||
regSearchMethod.set(this::findRegBySettlementDt);
|
regSearchMethod.set(this::findRegBySettlementDt);
|
||||||
findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.T);
|
findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.T, true);
|
||||||
findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.O);
|
findAndUpdateOrCreate.accept(partyExec, RegistryDesignation.O, true);
|
||||||
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T);
|
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T, true);
|
||||||
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O);
|
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new StageResult<>(null, true);
|
return new StageResult<>(null, true);
|
||||||
|
|
@ -234,4 +234,9 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
case ExecutionDeposit -> RegistryDepoBuilder.builder();
|
case ExecutionDeposit -> RegistryDepoBuilder.builder();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
private static interface TriConsumer<T1, T2, T3> {
|
||||||
|
void accept(T1 t1, T2 t2, T3 t3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue