示例1: getTask 使用示例
2025年12月21日 上午12:41:16
通过对比,加深了解。
1、基础示例
getTask 一般用于审批场景。下面的示例一般没必要,这里只作展示。
public class NotBlockStateFlowTest2 {
NotBlockStateController stateController = new NotBlockStateController();
InMemoryStateRepository stateRepository = new InMemoryStateRepository() {
@Override
public void statePut(FlowContext context, Node node, TaskState state) {
super.statePut(context, node, state);
//todo: 打印放这儿,顺序更真实
if (state == TaskState.COMPLETED) {
log.info("{} 完成", node.getId());
}
}
};
@Test
public void demo() {
//计算后,可获取最新状态
WorkflowService workflow = WorkflowService.of(FlowEngine.newInstance(), stateController, stateRepository);
Graph graph = getGraph();
FlowContext context = FlowContext.of("3")
.put("tag", "");
Task task = workflow.getTask(graph, context);
System.out.println("--------------------");
Assertions.assertNotNull(task);
Assertions.assertEquals("n3", task.getNode().getId());
Assertions.assertEquals(TaskState.COMPLETED, task.getState());
context = FlowContext.of("4")
.put("tag", "n1");
task = workflow.getTask(graph, context);
System.out.println("--------------------");
Assertions.assertNotNull(task);
Assertions.assertEquals("n1", task.getNode().getId());
Assertions.assertEquals(TaskState.WAITING, task.getState());
//再跑(仍在原位、原状态)
task = workflow.getTask(graph, context);
System.out.println("--------------------");
Assertions.assertNotNull(task);
Assertions.assertEquals("n1", task.getNode().getId());
Assertions.assertEquals(TaskState.WAITING, task.getState());
context.put("tag", "n2");
task = workflow.getTask(graph, context);
System.out.println("--------------------");
Assertions.assertNotNull(task);
Assertions.assertEquals("n2", task.getNode().getId());
Assertions.assertEquals(TaskState.WAITING, task.getState());
context.put("tag", "");
task = workflow.getTask(graph, context);
System.out.println("--------------------");
Assertions.assertNotNull(task);
Assertions.assertEquals("n3", task.getNode().getId());
Assertions.assertEquals(TaskState.COMPLETED, task.getState());
}
private Graph getGraph() {
String task = "if(tag.equals(node.getId())){exchanger.interrupt();}";
Graph graph = Graph.create("tmp-" + System.currentTimeMillis(),decl->{
decl.addStart("s").linkAdd("n0");
decl.addActivity("n0").task(task).linkAdd("n1");
decl.addActivity("n1").task(task).linkAdd("n2");
decl.addActivity("n2").task(task).linkAdd("n3");
decl.addActivity("n3").task(task).linkAdd("e");
decl.addEnd("e");
});
return graph;
}
}
打印样列
INFO 2025-08-17 17:33:40.711 #15134 [-main] features.workflow.NotBlockStateFlowTest2#console:
n0 完成
INFO 2025-08-17 17:33:40.712 #15134 [-main] features.workflow.NotBlockStateFlowTest2#console:
n1 完成
INFO 2025-08-17 17:33:40.712 #15134 [-main] features.workflow.NotBlockStateFlowTest2#console:
n2 完成
INFO 2025-08-17 17:33:40.712 #15134 [-main] features.workflow.NotBlockStateFlowTest2#console:
n3 完成
--------------------
INFO 2025-08-17 17:33:40.716 #15134 [-main] features.workflow.NotBlockStateFlowTest2#console:
n0 完成
--------------------
--------------------
INFO 2025-08-17 17:33:40.716 #15134 [-main] features.workflow.NotBlockStateFlowTest2#console:
n1 完成
--------------------
INFO 2025-08-17 17:33:40.717 #15134 [-main] features.workflow.NotBlockStateFlowTest2#console:
n2 完成
INFO 2025-08-17 17:33:40.717 #15134 [-main] features.workflow.NotBlockStateFlowTest2#console:
n3 完成
--------------------