From 24fe8346d3ebe8b6fd90523c8e0bb2ca016b9f9f Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 3 Jul 2024 12:52:52 +0300 Subject: [PATCH] UNIT session sdf14 - sdf12 condition --- .../clearing/session/stage/UnitedSession.java | 14 +++++++++++++- .../session/stage/impl/FinishingSession.java | 17 +++++++++++------ .../session/stage/monitor/Condition.java | 2 +- .../session/stage/monitor/SdfCondition.java | 6 +++++- .../session/stage/monitor/SessionMonitor.java | 13 +++++++++---- .../stage/task/FinishingSessionPayload.java | 10 ++++++++++ 6 files changed, 49 insertions(+), 13 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/UnitedSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/UnitedSession.java index a6372e482..b7840372c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/UnitedSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/UnitedSession.java @@ -28,6 +28,7 @@ import ru.spcex.clearing.session.stage.impl.PaymentInfo; import ru.spcex.clearing.session.stage.impl.RequirementsAndObligationCreationCompound; import ru.spcex.clearing.session.stage.impl.UnlockResources; import ru.spcex.clearing.session.stage.impl.compound.CompoundStageDealsPrepare; +import ru.spcex.clearing.session.stage.monitor.SdfCondition; import ru.spcex.clearing.session.stage.monitor.SessionMonitor; import ru.spcex.clearing.session.stage.monitor.SessionMonitorFactory; import ru.spcex.clearing.session.stage.task.DealsPreparePayload; @@ -39,6 +40,7 @@ import ru.spcex.clearing.session.stage.task.InspectionPoolPayload; import ru.spcex.clearing.session.stage.task.RequirementsAndObligationCreationCompoundPayload; import ru.spcex.clearing.session.stage.task.result.DealsPrepareCompoundResult; import ru.spcex.platform.classes.base.interfaces.ExecutionType; +import ru.spcex.platform.enumeration.SdfTable; import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.SessionStatus; import ru.spcex.platform.enumeration.SessionType; @@ -170,9 +172,14 @@ public class UnitedSession extends AbstractSession implements InitializingBean { return; } if (afterPaymentsSdf4And13Monitor != null && isMonitorPassed(afterPaymentsSdf4And13Monitor, req.getRequestPayload())) { + boolean wasDf12 = afterPaymentsSdf4And13Monitor.getAllConditions() + .stream() + .filter(c -> c instanceof SdfCondition) + .map(c -> (SdfCondition) c) + .anyMatch(c -> SdfTable.SDF_13.equals(c.sdf())); afterPaymentsSdf4And13Monitor = null; checkStageAndThrow(TaskType.FormingPaymentInstruction); - finishPart(); + finishPart(wasDf12); return; } if (afterReviseErrorMonitor != null && isMonitorPassed(afterReviseErrorMonitor, req.getRequestPayload())) { @@ -261,6 +268,10 @@ public class UnitedSession extends AbstractSession implements InitializingBean { } public void finishPart() { + finishPart(null); + } + + public void finishPart(Boolean was12) { try { //stage 9 continue revision { @@ -278,6 +289,7 @@ public class UnitedSession extends AbstractSession implements InitializingBean { FinishingSessionPayload payload = new FinishingSessionPayload(); payload.setSessionId(currSession.getId()); payload.setPr("1"); + payload.setWasDf12(was12); runStage(TaskType.FinishingSession, payload, finishingSession); } //stage 11 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 e703eddfd..7593df46c 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 @@ -22,7 +22,6 @@ import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; -import ru.clearing.classes.statics.data.sdf.SDf05; import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -64,7 +63,6 @@ public class FinishingSession implements ISessionStage { private final Imdg executionDepositImdg; private final Imdg executionCurrencyImdg; private final Imdg sessionImdg; - private final Imdg sDf05Imdg; private final KafkaSender kafkaSender; private final IMessageResolver msgResolver; private final Sdf05Sender sdf05Sender; @@ -80,7 +78,6 @@ public class FinishingSession implements ISessionStage { this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); this.executionCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionCurrency, ExecutionCurrency.class); - this.sDf05Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf05, SDf05.class); this.kafkaSender = kafkaSender; this.msgResolver = msgResolver; this.sdf05Sender = sdf05Sender; @@ -99,7 +96,7 @@ public class FinishingSession implements ISessionStage { FinishingSessionPayload payload = (FinishingSessionPayload) task.getData(); switch (task.getTaskType()) { case FinishingSession -> { - return finishingSession(payload.getSessionId(), payload.getPr()); + return finishingSession(payload.getSessionId(), payload.getPr(), payload.getWasDf12()); } default -> { throw new IllegalStateException("Unknown task type: " + task.getTaskType()); @@ -107,7 +104,7 @@ public class FinishingSession implements ISessionStage { } } - protected StageResult finishingSession(Long sessionId, String pr) { + protected StageResult finishingSession(Long sessionId, String pr, Boolean wasDf12) { Instant now = Instant.now(); //установка CLRD для обработанных регистров Collection claimsAndLiabilities = selectClaimsAndLiabilities(sessionId); @@ -230,13 +227,21 @@ public class FinishingSession implements ISessionStage { } } sdf05Sender.sendSdf05(pr); - if (Section.FOND.equals(section) || Section.MULT.equals(section)) { + if (df14condition(wasDf12)) { sdf14Sender.sendSdf14(sessionId); } StageResult> res = new StageResult<>(null, true); return res; } + private boolean df14condition(Boolean wasDf12) { + if (Section.FOND.equals(section)) return true; + if (Section.MULT.equals(section) && wasDf12 != null && wasDf12) { + return true; + } + return false; + } + /** * формирование операционного отчета об обязательствах **/ diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/Condition.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/Condition.java index a6325e0eb..71346789b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/Condition.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/Condition.java @@ -14,7 +14,7 @@ public abstract class Condition { this.metOnce = true; } - public abstract void event(SessionContinueEvent req); + abstract void event(SessionContinueEvent req); public abstract String logName(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/SdfCondition.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/SdfCondition.java index c7deb6a51..9df6fed5c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/SdfCondition.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/SdfCondition.java @@ -11,8 +11,12 @@ public class SdfCondition extends Condition { this.targetSdf = targetSdf; } + public SdfTable sdf() { + return targetSdf; + } + @Override - public void event(SessionContinueEvent req) { + void event(SessionContinueEvent req) { if (req.getSdfType() != null && req.getSdfType().stream().anyMatch(t -> t.equals(targetSdf))) { isMet(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/SessionMonitor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/SessionMonitor.java index e914561e0..cfc9dfda3 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/SessionMonitor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/monitor/SessionMonitor.java @@ -1,13 +1,13 @@ package ru.spcex.clearing.session.stage.monitor; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.spcex.clearing.platform.messaging.domain.cud.clearing.SessionContinueEvent; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - public class SessionMonitor { private final Logger log = LoggerFactory.getLogger(getClass()); private final List conditions = new ArrayList<>(); @@ -37,6 +37,11 @@ public class SessionMonitor { return isMonitorPassed(); } + + public Collection getAllConditions() { + return conditions; + } + public String allConditions() { return conditions.stream().map(Condition::logName).collect(Collectors.joining(",", "[", "]")); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/FinishingSessionPayload.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/FinishingSessionPayload.java index 49657ef5a..dc2cfe951 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/FinishingSessionPayload.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/FinishingSessionPayload.java @@ -3,6 +3,8 @@ package ru.spcex.clearing.session.stage.task; public class FinishingSessionPayload { private Long sessionId; private String pr; + //nullable + private Boolean wasDf12; public Long getSessionId() { return sessionId; @@ -19,4 +21,12 @@ public class FinishingSessionPayload { public void setPr(String pr) { this.pr = pr; } + + public Boolean getWasDf12() { + return wasDf12; + } + + public void setWasDf12(Boolean wasDf12) { + this.wasDf12 = wasDf12; + } }