active session check
This commit is contained in:
parent
3e804be783
commit
627f8caf27
1 changed files with 27 additions and 0 deletions
|
|
@ -2,6 +2,7 @@ package ru.spcex.clearing.session.state.factory;
|
|||
|
||||
import java.util.AbstractMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
|
@ -11,6 +12,7 @@ import org.springframework.statemachine.StateMachine;
|
|||
import org.springframework.statemachine.config.StateMachineFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.misc.Session;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
|
||||
import ru.spcex.clearing.session.stage.TaskType;
|
||||
|
|
@ -20,6 +22,10 @@ import ru.spcex.clearing.session.state.interceptor.SessionStatusChangingIntercep
|
|||
import ru.spcex.clearing.session.state.listener.MachineStopListener;
|
||||
import ru.spcex.platform.enumeration.Section;
|
||||
import ru.spcex.platform.enumeration.SessionType;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
@Component
|
||||
|
|
@ -29,9 +35,11 @@ public class SessionStateMachineWrapper {
|
|||
private final Map<SessionType, StateMachineFactory<TaskType, SsnEvent>> factories;
|
||||
private final SessionStatusChangingInterceptor statusChangingInterceptor;
|
||||
private StateMachine<TaskType, SsnEvent> currentSession;
|
||||
private final Imdg<Session> ssnImdg;
|
||||
|
||||
@Autowired
|
||||
public SessionStateMachineWrapper(
|
||||
ImdgProvider imdgProvider,
|
||||
Map<String, StateMachineFactory<TaskType, SsnEvent>> factories,
|
||||
SessionStatusChangingInterceptor statusChangingInterceptor
|
||||
) {
|
||||
|
|
@ -45,6 +53,7 @@ public class SessionStateMachineWrapper {
|
|||
})
|
||||
.collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue));
|
||||
this.statusChangingInterceptor = statusChangingInterceptor;
|
||||
this.ssnImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||
}
|
||||
|
||||
public synchronized void defineAndStartSession(BaseRequest<LauncherCommandRequest> r) {
|
||||
|
|
@ -69,6 +78,13 @@ public class SessionStateMachineWrapper {
|
|||
log.warn("Session already running: type={} id={}", ssnType, id);
|
||||
return;
|
||||
}
|
||||
Session activeSession = getActiveSession().orElse(null);
|
||||
if (activeSession != null) {
|
||||
log.warn("Session already running: type={} id={}",
|
||||
activeSession.getSessionType(),
|
||||
activeSession.getId());
|
||||
return;
|
||||
}
|
||||
this.currentSession = build(factory);
|
||||
this.currentSession.addStateListener(new MachineStopListener(
|
||||
this::clearCurrentMachine
|
||||
|
|
@ -115,4 +131,15 @@ public class SessionStateMachineWrapper {
|
|||
);
|
||||
return stateMachine;
|
||||
}
|
||||
|
||||
private Optional<Session> getActiveSession() {
|
||||
ImdgPredicateBuilder pb = ssnImdg.predicateBuilder();
|
||||
Session existActiveSession = ssnImdg.getSingleObjectByPredicate(
|
||||
pb.or(
|
||||
pb.equals("workflowStatus", WorkflowStatus.Active.getKey()),
|
||||
pb.equals("workflowStatus", WorkflowStatus.Pause.getKey())
|
||||
)
|
||||
);
|
||||
return Optional.ofNullable(existActiveSession);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue