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 d9c0b0547..60e1bb2b9 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 @@ -192,6 +192,7 @@ public class Sdf57Executor extends AbstractExecutor { registryF.setRegistryUnit(RegistryUnit.F.getKey()); registryF.setRegistryCode(RegistryUtil.clearingCode(registryF)); registryF.setBalance(registry.getBalance().subtract(registryB.getBalance())); + registryF.setBalance(BigDecimal.ZERO); registryF.setId(imdgProvider.getImdgIdGenerator().nextId()); registryImdg.insert(registry); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java index 03ae1b4ea..2461ee207 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java @@ -171,6 +171,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali { EndStageNotificationPayload payload = new EndStageNotificationPayload(); payload.setSection(currSession.getSection()); + payload.setSessionId(currSession.getId()); runStage(TaskType.EndStageNotification, payload, endStageNotification); } } catch (StageException e) { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/EndStageNotification.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/EndStageNotification.java index 89bf8da24..8a27ff254 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/EndStageNotification.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/EndStageNotification.java @@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -17,11 +18,13 @@ import ru.spcex.clearing.session.stage.Task; import ru.spcex.clearing.session.stage.task.EndStageNotificationPayload; import ru.spcex.platform.enumeration.RegistryStatus; import ru.spcex.platform.enumeration.Section; +import ru.spcex.platform.enumeration.SessionStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IMessageResolver; +import java.time.Instant; import java.util.Collection; import java.util.Objects; import java.util.stream.Collectors; @@ -34,12 +37,14 @@ public class EndStageNotification implements ISessionStage { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg registryImdg; + private final Imdg sessionImdg; private final KafkaSender kafkaSender; private final IMessageResolver msgResolver; @Autowired public EndStageNotification(ImdgProvider imdgProvider, KafkaSender kafkaSender, IMessageResolver msgResolver) { this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.kafkaSender = kafkaSender; this.msgResolver = msgResolver; } @@ -49,7 +54,7 @@ public class EndStageNotification implements ISessionStage { EndStageNotificationPayload payload = (EndStageNotificationPayload) task.getData(); switch (task.getTaskType()) { case EndStageNotification -> { - return endStageNotification(payload.getSection()); + return endStageNotification(payload.getSection(), payload.getSessionId()); } default -> { throw new IllegalStateException("Unknown task type: " + task.getTaskType()); @@ -64,7 +69,19 @@ public class EndStageNotification implements ISessionStage { return result; } - protected StageResult endStageNotification(String section) { + protected StageResult endStageNotification(String section, Long sessionId) { + // 1. Изменить статус + Session theSession = sessionImdg.getSingleObjectByID(sessionId); + if (theSession == null) { + log.warn("Session {} not found", sessionId); + } else { + log.info("Finish status for session {}", sessionId); + theSession.setUpdated(Instant.now()); + theSession.setSessionStatus(SessionStatus.CLOS.getKey()); + sessionImdg.update(theSession); + log.trace("Session {} was updated", theSession.getId()); + } + Collection forRegistries = selectRegistry(); Collection groups = forRegistries.stream() .map(Registry::getGroupId) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java index f40635de5..65e1138f4 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java @@ -6,7 +6,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; -import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -19,7 +18,6 @@ import ru.spcex.clearing.session.stage.Task; import ru.spcex.clearing.session.stage.task.FinishingSessionPayload; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryTradingParams; -import ru.spcex.platform.enumeration.SessionStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; @@ -28,7 +26,6 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import java.time.Instant; import java.util.Collection; import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError; @@ -39,14 +36,12 @@ public class FinishingSession implements ISessionStage { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg registryImdg; - private final Imdg sessionImdg; private final KafkaSender kafkaSender; private final IMessageResolver msgResolver; @Autowired public FinishingSession(ImdgProvider imdgProvider, KafkaSender kafkaSender, IMessageResolver msgResolver) { this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); - this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.kafkaSender = kafkaSender; this.msgResolver = msgResolver; } @@ -64,31 +59,7 @@ public class FinishingSession implements ISessionStage { } } - protected Collection selectRegistry(Long sessionId) { - RegistryCodeSqlBuilder registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance( - new RegistryTradingParams(RegistryDesignation.A, null, null, null) - ); - ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); - ImdgPredicate condition = registryCodeSqlBuilder.buildPredicate(pb); - condition = pb.and(condition, pb.equals("sessionId", sessionId)); - Collection result = registryImdg.getCollectionObjectsByPredicate(condition); - log.trace("Selected {} registry's by sql: {}", result.size(), condition); - return result; - } - protected StageResult finishingSession(Long sessionId) { - // 1. Изменить статус - Session theSession = sessionImdg.getSingleObjectByID(sessionId); - if (theSession == null) { - log.warn("Session {} not found", sessionId); - } else { - log.info("Finish status for session {}", sessionId); - theSession.setUpdated(Instant.now()); - theSession.setSessionStatus(SessionStatus.CLOS.getKey()); - sessionImdg.update(theSession); - log.trace("Session {} was updated", theSession.getId()); - } - // 2. Отправка сообщений Collection forRegistries = selectRegistry(sessionId); log.debug("Found {} registries for sessionId={}", forRegistries.size(), sessionId); @@ -142,4 +113,15 @@ public class FinishingSession implements ISessionStage { return new StageResult<>(null, true); } + protected Collection selectRegistry(Long sessionId) { + RegistryCodeSqlBuilder registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance( + new RegistryTradingParams(RegistryDesignation.A, null, null, null) + ); + ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + ImdgPredicate condition = registryCodeSqlBuilder.buildPredicate(pb); + condition = pb.and(condition, pb.equals("sessionId", sessionId)); + Collection result = registryImdg.getCollectionObjectsByPredicate(condition); + log.trace("Selected {} registry's by sql: {}", result.size(), condition); + return result; + } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/EndStageNotificationPayload.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/EndStageNotificationPayload.java index ba2b3836c..d72547499 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/EndStageNotificationPayload.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/EndStageNotificationPayload.java @@ -2,6 +2,7 @@ package ru.spcex.clearing.session.stage.task; public class EndStageNotificationPayload { private String section; + private Long sessionId; public String getSection() { return section; @@ -10,4 +11,12 @@ public class EndStageNotificationPayload { public void setSection(String section) { this.section = section; } + + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } }