### 1、新建项目

新建项目之后，添加依赖

```xml
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon-flow-workflow</artifactId>
</dependency>
```

### 2、添加配置

添加应用配置：

```yaml
solon.flow:
  - "classpath:flow/*.yml"
```

添加流处理配置（支持 json 或 yml 格式），例： `flow/demo1.yml`

```yaml
id: "c1"
layout: 
  - { id: "n1", type: "start", link: "n2"}
  - { id: "n2", type: "activity", link: "n3", task: "System.out.println(\"hello world!\");"}
  - { id: "n3", type: "end"}
```

示意图：

<img src="/img/ebddfbb4c2e843c5919da57d844c0646.png" width="300" />

### 3、代码应用

注解模式

```java
@Configuration
public class DemoCom {
    //构建工作流执行器
    @Bean
    public WorkflowExecutor workflowOf(FlowEngine engine) {
        return WorkflowExecutor.of(engine,
                new NotBlockStateController(), //或 BlockStateController, ActorStateController
                new InMemoryStateRepository()); //或 RedisStateRepository

    }


    @Bean
    public void test(WorkflowExecutor workflow) throws Throwable {
        //查询任务：查找下一个待处理节点，或者完结的节点
        Task task = workflow.findTask("c1", FlowContext.of("i-1"));
        System.out.println(task);

        //认领任务：权限匹配 + 状态激活（自动前进的会跳过）
        //Task task = workflow.claimTask("c1", FlowContext.of("i-1"));
    }
}
```

原生 Java 模式

```java
FlowEngine engine = FlowEngine.newInstance();
WorkflowExecutor workflow = WorkflowExecutor.of(engine,
                new NotBlockStateController(), //或 BlockStateController, ActorStateController
                new InMemoryStateRepository()); //或 RedisStateRepository

//加载配置
engine.load("classpath:flow/*.yml");

//查询任务
Task task = workflow.claimTask("c1", FlowContext.of("i-1"));
System.out.println(task);
```