You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.8 KiB
76 lines
2.8 KiB
package com.iflytop.gd.app.config;
|
|
|
|
import com.iflytop.gd.common.enums.CraftEvents;
|
|
import com.iflytop.gd.common.enums.CraftStates;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.statemachine.config.EnableStateMachineFactory;
|
|
import org.springframework.statemachine.config.StateMachineConfigurerAdapter;
|
|
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
|
|
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;
|
|
|
|
import java.util.EnumSet;
|
|
|
|
@Configuration
|
|
@EnableStateMachineFactory
|
|
public class CraftsStateMachineConfig
|
|
extends StateMachineConfigurerAdapter<CraftStates, CraftEvents> {
|
|
|
|
@Override
|
|
public void configure(StateMachineStateConfigurer<CraftStates, CraftEvents> states) throws Exception {
|
|
states
|
|
.withStates()
|
|
.initial(CraftStates.READY)
|
|
.states(EnumSet.allOf(CraftStates.class));
|
|
}
|
|
|
|
@Override
|
|
public void configure(StateMachineTransitionConfigurer<CraftStates, CraftEvents> trans) throws Exception {
|
|
trans
|
|
// 启动
|
|
.withExternal()
|
|
.source(CraftStates.READY)
|
|
.target(CraftStates.RUNNING)
|
|
.event(CraftEvents.START)
|
|
.and()
|
|
// 单步完成(保持 RUNNING)
|
|
.withInternal()
|
|
.source(CraftStates.RUNNING)
|
|
.event(CraftEvents.STEP_COMPLETE)
|
|
.and()
|
|
// 暂停
|
|
.withExternal()
|
|
.source(CraftStates.RUNNING)
|
|
.target(CraftStates.PAUSED)
|
|
.event(CraftEvents.PAUSE)
|
|
.and()
|
|
// 恢复
|
|
.withExternal()
|
|
.source(CraftStates.PAUSED)
|
|
.target(CraftStates.RUNNING)
|
|
.event(CraftEvents.RESUME)
|
|
.and()
|
|
// 用户手动停止:RUNNING → STOPPED
|
|
.withExternal()
|
|
.source(CraftStates.RUNNING)
|
|
.target(CraftStates.STOPPED)
|
|
.event(CraftEvents.STOP)
|
|
.and()
|
|
// 用户手动停止:PAUSED → STOPPED
|
|
.withExternal()
|
|
.source(CraftStates.PAUSED)
|
|
.target(CraftStates.STOPPED)
|
|
.event(CraftEvents.STOP)
|
|
.and()
|
|
// 出错
|
|
.withExternal()
|
|
.source(CraftStates.RUNNING)
|
|
.target(CraftStates.ERROR)
|
|
.event(CraftEvents.ERROR_OCCUR)
|
|
.and()
|
|
// 正常完成
|
|
.withExternal()
|
|
.source(CraftStates.RUNNING)
|
|
.target(CraftStates.FINISHED)
|
|
.event(CraftEvents.FINISH);
|
|
}
|
|
}
|