5 шаг по сессиям

This commit is contained in:
ialbert 2023-07-19 18:10:29 +03:00
parent 7660f88387
commit 828ba91ba0
9 changed files with 36 additions and 7 deletions

View file

@ -74,6 +74,7 @@ public class StateBnConfig extends EnumStateMachineConfigurerAdapter<TaskType, S
ImdgPredicateBuilder execFondPb = executionFondImdg.predicateBuilder();
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B\\d{2}$"));
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
inclusionObligations.setSessionType(SessionType.IPOB);
imdgProvider.waitAvailable();
//настройка адаптеров для State Machine

View file

@ -100,6 +100,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean
rgsPrctBuilder.lessEqual("valueDate", LocalDate.now())
)
);
inclusionObligations.setSessionType(sessionType());
inspectionObligationsReturn.setSessionType(sessionType());
inspectionObligations.setSessionType(sessionType());
imdgProvider.waitAvailable();

View file

@ -100,6 +100,7 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ
rgsPrctBuilder.lessEqual("valueDate", LocalDate.now())
)
);
inclusionObligations.setSessionType(sessionType());
inspectionObligationsReturn.setSessionType(sessionType());
inspectionObligations.setSessionType(sessionType());
imdgProvider.waitAvailable();

View file

@ -87,6 +87,7 @@ public class PrimaryAuctionB0Session extends AbstractSession implements Initiali
ImdgPredicateBuilder execFondPb = executionFondImdg.predicateBuilder();
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B0.*$"));
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
inclusionObligations.setSessionType(sessionType());
imdgProvider.waitAvailable();
initSessionIfPresent();
}

View file

@ -87,6 +87,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali
ImdgPredicateBuilder execFondPb = executionFondImdg.predicateBuilder();
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B\\d{2}$"));
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
inclusionObligations.setSessionType(sessionType());
imdgProvider.waitAvailable();
initSessionIfPresent();
}

View file

@ -86,6 +86,7 @@ public class PrimaryAuctionT0Session extends AbstractSession implements Initiali
ImdgPredicateBuilder execFondPb = executionFondImdg.predicateBuilder();
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^T0.*$"));
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
inclusionObligations.setSessionType(sessionType());
imdgProvider.waitAvailable();
initSessionIfPresent();
}

View file

@ -88,6 +88,7 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia
ImdgPredicateBuilder execFondPb = executionFondImdg.predicateBuilder();
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^T0.*$"));
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
inclusionObligations.setSessionType(sessionType());
imdgProvider.waitAvailable();
initSessionIfPresent();
}

View file

@ -13,10 +13,7 @@ import ru.spcex.clearing.session.stage.ISessionStage;
import ru.spcex.clearing.session.stage.StageResult;
import ru.spcex.clearing.session.stage.Task;
import ru.spcex.clearing.session.stage.task.InclusionToPoolPayload;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryInstrumentType;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.RegistryUnit;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -41,12 +38,15 @@ public class InclusionObligations implements ISessionStage {
private Imdg<Registry> registryImdg;
private KafkaSender kafkaSender;
private final List<ImdgPredicate> 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();
}
}
}

View file

@ -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<Registry> registryImdg;