package com.chinaztt.mes.common.handler;
|
|
import com.baomidou.mybatisplus.extension.activerecord.Model;
|
import com.chinaztt.mes.common.util.StateResult;
|
import lombok.AllArgsConstructor;
|
import org.springframework.messaging.Message;
|
import org.springframework.statemachine.StateMachine;
|
import org.springframework.statemachine.config.StateMachineFactory;
|
import org.springframework.statemachine.persist.StateMachinePersister;
|
|
/**
|
* @Author: zhangxy
|
* @Date: 2020-08-31 15:42
|
*/
|
@AllArgsConstructor
|
public class StateMachineHandler {
|
|
public static final String ERROR_KEY = "error";
|
|
private StateMachineFactory stateMachineFactory;
|
|
private StateMachinePersister persister;
|
|
private String machineId;
|
|
private Model model;
|
|
public StateResult sendEvent(Message message, Object syncKey) {
|
boolean result = false;
|
synchronized (String.valueOf(syncKey).intern()) {
|
StateMachine stateMachine = stateMachineFactory.getStateMachine(machineId);
|
try {
|
persister.restore(stateMachine, model);
|
result = stateMachine.sendEvent(message);
|
if (stateMachine.getExtendedState().getVariables().containsKey(ERROR_KEY)) {
|
return StateResult.failed((String) stateMachine.getExtendedState().getVariables().get(ERROR_KEY));
|
}
|
} catch (Exception e) {
|
return StateResult.failed(e.getMessage());
|
} finally {
|
stateMachine.stop();
|
}
|
return StateResult.build(result);
|
}
|
}
|
}
|