diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java index 00a2091f4..fc809e234 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java @@ -61,7 +61,7 @@ public class ExecutionDepositComponent { private final IMessageResolver msgResolver; private final Function stradesValidator; private final KafkaSender kafkaSender; - private static final DateTimeFormatter contractFormatter = DateTimeFormatter.ofPattern("ddMMyyyy"); + private static final DateTimeFormatter contractFormatter = DateTimeFormatter.ofPattern("ddMMyy"); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java index d5d60b7ca..a46759c15 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java @@ -47,6 +47,7 @@ import java.util.Map; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; +import java.util.regex.Pattern; @Service public class Sdf57Executor extends AbstractExecutor { @@ -66,7 +67,7 @@ public class Sdf57Executor extends AbstractExecutor { private final Imdg securityImdg; private final Imdg currencyImdg; private final IMessageResolver messageResolver; -// private final Pair<> + private final Pattern pattern = Pattern.compile("№\\w*/\\d{6}/\\d*/\\d*"); public Sdf57Executor(@Qualifier("sdf57Validator") Function sDf57Validator, LoggingService errorLogger, @@ -182,7 +183,7 @@ public class Sdf57Executor extends AbstractExecutor { } registryImdg.update(rgs); }; - Consumer create = (dsgn) -> { + Consumer createRegA = (dsgn) -> { Registry registry = createRegistryByStatement(stmt, company, account, dsgn); Registry registryB = copyRegB(registry); Registry registryF = copyRegF(registry, registryB.getBalance()); @@ -192,11 +193,17 @@ public class Sdf57Executor extends AbstractExecutor { registryImdg.insert(registryB); }; - //todo понять что происходит со инициатором/контрагентом, особенно если у нас только один Statement - findRegByDesignation(stmt, RegistryDesignation.A).ifPresentOrElse(update, () -> create.accept(RegistryDesignation.A)); - if (!StringUtils.isEmpty(sdf57.getSpecif()) && sdf57.getSpecif().contains("№")) { + Consumer createRegD = (dsgn) -> { + findRegByDesignation(stmt, RegistryDesignation.O).ifPresent(registry -> { + Registry registryD = copyRegD(registry); + registryImdg.insert(registryD); + }); + }; + + findRegByDesignation(stmt, RegistryDesignation.A).ifPresentOrElse(update, () -> createRegA.accept(RegistryDesignation.A)); + if (!StringUtils.isEmpty(sdf57.getSpecif()) && pattern.matcher(sdf57.getSpecif()).find()) { //todo доделать 11. Идентификация средств УК на клиринговом счете - findRegByDesignation(stmt, RegistryDesignation.D).ifPresentOrElse(update, () -> create.accept(RegistryDesignation.D)); + findRegByDesignation(stmt, RegistryDesignation.D).ifPresentOrElse(update, () -> createRegD.accept(RegistryDesignation.D)); } stmt.setOperationStatus(OperationStatus.Executed.getKey()); } else { @@ -230,6 +237,13 @@ public class Sdf57Executor extends AbstractExecutor { return rgsF; } + private Registry copyRegD(Registry rgs) { + Registry rgsB = rgs.clone(); + rgsB.setRegistryDesignation(RegistryDesignation.D.getKey()); + rgsB.setRegistryCode(RegistryUtil.clearingCode(rgsB)); + return rgsB; + } + private record StmtCmpAcc(Statement statement, Company company, Account account) { }