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); } } }