diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/interceptor/SessionStatusChangingInterceptor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/interceptor/SessionStatusChangingInterceptor.java index c3a64147f..e8c6e7a37 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/interceptor/SessionStatusChangingInterceptor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/interceptor/SessionStatusChangingInterceptor.java @@ -4,10 +4,14 @@ import java.time.Instant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; import org.springframework.statemachine.StateContext; import org.springframework.statemachine.StateMachine; +import org.springframework.statemachine.state.PseudoState; +import org.springframework.statemachine.state.PseudoStateKind; import org.springframework.statemachine.state.State; import org.springframework.statemachine.support.StateMachineInterceptorAdapter; +import org.springframework.statemachine.transition.Transition; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.misc.Session; import ru.spcex.clearing.error.ClearingRuntimeException; @@ -39,6 +43,28 @@ public class SessionStatusChangingInterceptor extends StateMachineInterceptorAda this.messageResolver = messageResolver; } + @Override + public void postStateChange(State state, Message message, Transition transition, StateMachine stateMachine, StateMachine rootStateMachine) { + try { + if (state == null) { + return; + } + PseudoState pseudo = state.getPseudoState(); + if (pseudo == null || pseudo.getKind() != PseudoStateKind.END) { + return; + } + Session session = stateMachine.getExtendedState().get(DataEnum.session, Session.class); + session.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); + session.setSessionStatus(SessionStatus.CLOS.getKey()); + session.setUpdated(Instant.now()); + ssnImdg.update(session); + } catch (Exception e) { + if (!stateMachine.hasStateMachineError()) { + stateMachine.setStateMachineError(e); + } + log.error("{} {}", stateMachine.getId(), ExceptionUtils.getStackTrace(e)); + } + } @Override public StateContext preTransition(StateContext ctx) {