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; }