状态流程框架(cola-component-statemachine)

maven依赖

xml 复制代码
        <dependency>
            <groupId>com.alibaba.cola</groupId>
            <artifactId>cola-component-statemachine</artifactId>
            <version>4.3.2</version>
        </dependency>

示例

java 复制代码
        String ORDER_STATE_MACHINE = "orderStateMachine";
        // 第一步:生成一个状态机builder
        StateMachineBuilder<StatusEnum, EventEnum, DataContext> builder = StateMachineBuilderFactory.create();
        // 第二步:定义状态
        // 外部流转,状态从 A 到 B 执行 OPERATE1 事件,当满足checkCondition()的时候执行doAction(),成功返回状态B,否则返回状态A
        builder.externalTransition() // 外部流转
                .from(StatusEnum.A)  // 起始状态
                .to(StatusEnum.B)  // 目标状态
                .on(EventEnum.OPERATE1)  // 事件
                .when(checkCondition()) // 流转需要校验的条件,校验不通过不会进行doAction
                .perform(doAction());  //执行流转操作 这个action 我们可以按自己所需修改

        // 内部流转,在 A 状态下,执行 OPERATE1 事件,当满足checkCondition()时,执行doAction,执行成功则返回状态 A
        builder.internalTransition()
                .within(StatusEnum.A)
                .on(EventEnum.OPERATE1)
                .when(checkCondition())
                .perform(doAction());

        // 外部流转(多初始状态),状态从 A或B 到 C 执行 OPERATE1 事件,当满足checkCondition()的时候执行doAction(),成功返回状态C,否则返回原初始状态
        builder.externalTransitions()
                .fromAmong(StatusEnum.A, StatusEnum.B)
                .to(StatusEnum.C)
                .on(EventEnum.OPERATE1)
                .when(checkCondition())
                .perform(doAction());

        // 创建状态机
        StateMachine<StatusEnum, EventEnum, DataContext> orderStateMachine = builder.build(ORDER_STATE_MACHINE);

        
        //状态流转,当前状态 A,执行 OPERATE1 操作,DataContext为传递的数据
        orderStateMachine.fireEvent(StatusEnum.A, EventEnum.OPERATE1,new DataContext());

StateMachineBuilderFactory相关API

复制代码
create()                                        创建状态机构造器对象(StateMachineBuilder)

StateMachineBuilder<S, E, C> 相关API

复制代码
三个泛型(状态枚举、事件枚举、流转数据对象)
externalTransition()                            创建一个外部流转的构建器(ExternalTransitionBuilder)
externalTransitions()                           创建多个外部流转的构建器(ExternalTransitionsBuilder)
internalTransition()                            创建内部流转的构建器(InternalTransitionBuilder)
setFailCallback(FailCallback<S, E, C> var1)     配置失败回处理逻辑
build(String var1)                              对状态机开始构建(StateMachine),并在StateMachineFactory中注册

StateMachine<S, E, C> 相关API

复制代码
verify(S var1, E var2)                          验证一个事件E是否可以从当前状态S触发
fireEvent(S var1, E var2, C var3)               向状态机发送一个事件E,触发状态机,并返回目标状态
getMachineId()                                  获取状态机的标识符MachineId
showStateMachine()                              显示状态机的结构
generatePlantUML()                              获取状态流程的 PlantUML 字符串

StateMachineFactory 相关API

复制代码
register(StateMachine<S, E, C> stateMachine)    注册状态机
get(String machineId)                           获取状态机

ExternalTransitionBuilder 相关API

复制代码
from(S var1)                                   设置起始状态

ExternalTransitionsBuilder 相关API

复制代码
fromAmong(S... var1)                           设置起始状态(多值)

InternalTransitionBuilder 相关API

复制代码
within(S var1)                                  设置当前状态

From<S, E, C> 相关API

复制代码
to(S var1)                                      设置目标状态

To<S, E, C> 相关API

复制代码
on(E var1)                                      设置事件

On<S, E, C> 相关API

复制代码
when(Condition<C> var1)                         设置流转需要校验的条件

When<S, E, C> 相关API

复制代码
perform(Action<S, E, C> var1)                   设置流转的业务流程