当前位置: 首页 > 知识库问答 >
问题:

设置Spring StateMachine的当前状态

贾骏
2023-03-14

我开始使用Spring Statemachine,但在管理对象的状态时遇到了一些麻烦。

    null
@Service
public class StateMachineServiceImpl implements IStateMachineService {

    @Autowired
    private IShipmentService shipmentService;

    @Override
    public StateMachine<ShipmentState, ShipmentEvent> getShipmentStateMachine(Shipment aShipment) throws Exception {

        Builder<ShipmentState, ShipmentEvent> builder = StateMachineBuilder.builder();

        builder.configureStates().withStates()
            .state(ShipmentState.S1)
            .state(ShipmentState.S2)
            .state(ShipmentState.S3)
            .initial(shipmentService.getState())
            .end(ShipmentState.S4);

        builder.configureTransitions().withExternal().source(ShipmentState.S1).target(ShipmentState.S1)
                .event(ShipmentEvent.S3).action(shipmentService.updateAction()).and().withExternal()
                .source(ShipmentState.S1).target(ShipmentState.S2).event(ShipmentEvent.S3)
                .action(shipmentService.finalizeAction()).and().withExternal().source(ShipmentState.S3)
                .target(ShipmentEvent.S4).action(shipmentService.closeAction()).event(ShipmentEvent.S5);

        return builder.build();
    }

}

你觉得我的做法怎么样?

共有1个答案

杜元明
2023-03-14

这种方法没有问题。您可以使用以下代码将状态机重置为特定状态。

stateMachine.getStateMachineAccessor().doWithAllRegions(access -> access
          .resetStateMachine(new DefaultStateMachineContext<>(state, null, null,null)));

您可以根据您的用例将参数传递给DefaultStateMachineContext

 类似资料:
  • 返回当前日期: .fullCalendar('getDate') 点击按钮显示当前时间的例子: $('#my-button').click(function() { var d = $('#calendar').fullCalendar('getDate'); alert("The current date of the calendar is " + d); }); 官方英文文档

  • 日程表前进或者后退任意的时间: .fullCalendar('incrementDate', years [, months, [ days ]]) 举例,日程表前进3个月: $('#calendar').fullCalendar('incrementDate', 0, 3, 0); 日程表后退2个月 $('#calendar').fullCalendar('incrementDate', 0,

  • 日程表跳转到任意日期: .fullCalendar('gotoDate', year [, month, [ date ]]) 需要注意,月是从0开始的。此方法也可以使用一个参数,一个Date对象(版本大于1.3.2) 官方英文文档:http://arshaw.com/fullcalendar/docs/current_date/gotoDate/

  • 日程表跳到今天: .fullCalendar('today') 外部按钮跳转到今天的例子: $('#my-today-button').click(function() { $('#calendar').fullCalendar('today'); }); 官方英文文档:http://arshaw.com/fullcalendar/docs/current_date/today/

  • 日程表前进一年: .fullCalendar('nextYear') 1.3.x版本没有此方法,可以使用 .fullCalendar(‘incrementDate’, 1) 代替 官方英文文档:http://arshaw.com/fullcalendar/docs/current_date/nextYear/

  • 日程表后退一年: .fullCalendar('prevYear') 1.3.x版本的FullCalendar没有此方法,可以使用 .fullCalendar(‘incrementDate’, -1) 代替。 官方英文文档:http://arshaw.com/fullcalendar/docs/current_date/prevYear/