diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java index ba6cf7025..06cbac207 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf20Executor.java @@ -5,6 +5,7 @@ import java.time.Instant; import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; +import java.util.Map; import java.util.Optional; import java.util.function.Function; import org.slf4j.Logger; @@ -14,6 +15,7 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.sdf.SDf20; @@ -40,6 +42,7 @@ import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryStatus; import ru.spcex.platform.enumeration.RegistryUnit; import ru.spcex.platform.enumeration.Sender; +import ru.spcex.platform.enumeration.SessionStatus; import ru.spcex.platform.enumeration.StatementType; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -47,14 +50,15 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.number.BigDecimalUtil; -import ru.spcex.platform.utils.validation.IValidator; import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; +import ru.spcex.platform.utils.validation.IValidator; @Service public class Sdf20Executor { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg sDf20Imdg; private final Imdg sDf21Imdg; + private final Imdg sessionImdg; private final Imdg rgsImdg; private final Imdg stmtImdg; private final Function validation; @@ -72,6 +76,7 @@ public class Sdf20Executor { this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.stmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); this.sDf21Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf21, SDf21.class); + this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.validation = validation; this.msgRslv = msgRslv; this.kafka = kafka; @@ -151,6 +156,15 @@ public class Sdf20Executor { ); if (sdf21 == null) { as_t.setBalance(safeBD(as_t.getBalance()).add(quantity)); + boolean sessionIsPresent = sessionImdg.getFirstObjectByFieldValues(Map.of( + "workflowStatus", SessionStatus.ACTV.getKey() + )) != null; + if (sessionIsPresent) { + BigDecimal planBalance = safeBD(as_t.getPlanBalance()); + BigDecimal dsiBalance = safeBD(ds_i.getBalance()); + as_t.setPlanBalance(planBalance.add(dsiBalance)); + } + //тут меняем if (direction.equals(InOutDirection.in)) { as_t.setCredit(safeBD(as_t.getCredit()).add(quantity.abs())); } else {