From e8232caf2b317f1e0d3954b10df4026899a86967 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 31 Jul 2023 15:51:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20sdf04/sdf13=20=D0=B8=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20balance=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/executors/Sdf04Executor.java | 5 +-- .../service/executors/Sdf13Executor.java | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java index 42d6f5ad1..0957171e4 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java @@ -97,7 +97,7 @@ public class Sdf04Executor extends AbstractExecutor { //todo переписать логику поиска на аналогичную по счетам(TRAN) Session activeSession = sessionImdg.getSingleObjectByFieldValues(Map.of("workflowStatus", Status.Active.getKey())); if (activeSession != null) { - Collection registriesByActiveSessionId = selectABRegistryBySessionId(activeSession.getId()); + Collection registriesByActiveSessionId = selectAMBRegistryBySessionId(activeSession.getId()); registriesByActiveSessionId.stream().filter(registry -> registry.getBalance().compareTo(BigDecimal.ZERO) < 0) .forEach(registry -> { registry.setBalance(BigDecimal.ZERO); @@ -125,11 +125,12 @@ public class Sdf04Executor extends AbstractExecutor { return result; } - protected Collection selectABRegistryBySessionId(Long sessionId) { + protected Collection selectAMBRegistryBySessionId(Long sessionId) { ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); ImdgPredicate query = pb.and( pb.and( pb.equals("registryDesignation", RegistryDesignation.A.getKey()), + pb.equals("registryInstrumentType", RegistryInstrumentType.M.getKey()), pb.equals("registryUnit", RegistryUnit.B.getKey()) ), pb.equals("sessionId", sessionId) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java index b5aabca39..d88020fca 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf13Executor.java @@ -3,6 +3,7 @@ package ru.spcex.clearing.service.executors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.sdf.SDf12; import ru.clearing.classes.statics.data.sdf.SDf13; @@ -13,12 +14,14 @@ import ru.spcex.clearing.service.model.Result; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryInstrumentType; import ru.spcex.platform.enumeration.RegistryUnit; +import ru.spcex.platform.enumeration.Status; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.math.BigDecimal; +import java.time.Instant; import java.util.Collection; import java.util.Map; @@ -29,11 +32,13 @@ public class Sdf13Executor extends AbstractExecutor { private final Imdg sdf12Imdg; private final ImdgProvider imdgProvider; private final Imdg registryImdg; + protected final Imdg sessionImdg; public Sdf13Executor(ImdgProvider imdgProvider) { this.imdgProvider = imdgProvider; this.sdf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); } @Override @@ -61,6 +66,32 @@ public class Sdf13Executor extends AbstractExecutor { Collection registries = selectRegistryForSDF12(sDf12.getDepoCodeSender(), sDf12.getSecurityCode()); registries.forEach(registry -> unlockRegistry(registry, new BigDecimal(sDf12.getQuantity()))); } + Session activeSession = sessionImdg.getSingleObjectByFieldValues(Map.of("workflowStatus", Status.Active.getKey())); + if (activeSession != null) { + Collection registriesByActiveSessionId = selectASBRegistryBySessionId(activeSession.getId()); + registriesByActiveSessionId.stream().filter(registry -> registry.getBalance().compareTo(BigDecimal.ZERO) < 0) + .forEach(registry -> { + registry.setBalance(BigDecimal.ZERO); + registry.setUpdated(Instant.now()); + registryImdg.update(registry); + }); + } + return result; + } + + protected Collection selectASBRegistryBySessionId(Long sessionId) { + ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + ImdgPredicate query = pb.and( + pb.and( + pb.equals("registryDesignation", RegistryDesignation.A.getKey()), + pb.equals("registryInstrumentType", RegistryInstrumentType.S.getKey()), + pb.equals("registryUnit", RegistryUnit.B.getKey()) + ), + pb.equals("sessionId", sessionId) + ); + + Collection result = registryImdg.getCollectionObjectsByPredicate(query); + log.trace("Selected {} registry's by sql: {}", result.size(), query); return result; }