diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/session/StateBnConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/session/StateBnConfig.java index e8adad924..006393491 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/session/StateBnConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/session/StateBnConfig.java @@ -74,6 +74,7 @@ public class StateBnConfig extends EnumStateMachineConfigurerAdapter registryImdg; private KafkaSender kafkaSender; private final List registryConditions = new ArrayList<>(); + private SessionType sessionType; + private final ImdgPredicateBuilder rgsPb; @Autowired public InclusionObligations(ImdgProvider imdgProvider) { this.imdgProvider = imdgProvider; this.idGenerator = imdgProvider.getImdgIdGenerator(); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.rgsPb = registryImdg.predicateBuilder(); } /** @@ -65,7 +65,7 @@ public class InclusionObligations implements ISessionStage { InclusionToPoolPayload payload = (InclusionToPoolPayload) task.getData(); switch (task.getTaskType()) { case InclusionToPool -> { - return inclusionToPool(payload.getSessionId(), payload.getSessionType(), payload.getCounterPartyId()); + return inclusionToPool(payload.getSessionId(), payload.getCounterPartyId()); } default -> { throw new IllegalStateException("Unknown task type: " + task.getTaskType()); @@ -74,7 +74,7 @@ public class InclusionObligations implements ISessionStage { } - private StageResult inclusionToPool(Long sessionId, String sessionType, Long counterPartyId) { + private StageResult inclusionToPool(Long sessionId, Long counterPartyId) { String sqlCondition = String.format("registryDesignation in ('%s', '%s') and " + "registryInstrumentType in ('%s', '%s') and " + "registryUnit = '%s'", @@ -85,7 +85,7 @@ public class InclusionObligations implements ISessionStage { ImdgPredicate defaultCondition = prdctBuilder.sql(sqlCondition); if (sessionType != null) { //не всегда нужное условие - defaultCondition = prdctBuilder.and(defaultCondition, prdctBuilder.equals("sessionType", sessionType)); + defaultCondition = prdctBuilder.and(defaultCondition, sessionTypePredicate()); } ImdgPredicate registryPredicate; if (registryConditions.size() > 0) { @@ -116,4 +116,23 @@ public class InclusionObligations implements ISessionStage { return new StageResult(null, true); } + + public void setSessionType(SessionType sessionType) { + this.sessionType = sessionType; + } + + private ImdgPredicate sessionTypePredicate() { + if (this.sessionType != null) { + if (SessionType.FINL.equals(sessionType)) { + return rgsPb.or( + rgsPb.equals("sessionType", sessionType.getKey()), + rgsPb.equals("sessionType", SessionType.MEDM.getKey()) + ); + } else { + return rgsPb.equals("sessionType", sessionType.getKey()); + } + } else { + return rgsPb.alwaysTrue(); + } + } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java index 28c782dbc..744a352bf 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java @@ -3,6 +3,8 @@ package ru.spcex.clearing.session.stage.impl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -26,6 +28,7 @@ import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; @Service +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class InspectionObligationsDepositReturn implements ISessionStage { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg registryImdg;