# API 参考

| 接口/对象类              | 作用                                                         |
| ------------------------ | ------------------------------------------------------------ |
| IEarlyWarnDataSource     | 数据源插件，该插件定义了预警平台引擎获取数据的相关逻辑。     |
| IEarlyWarnConditionForm  | 自定义预警监控页面，用户可以按需自定义预警监控条件页面，满足复杂场景预警条件录入需求，预警平台通过该接口从用户自定义监控条件配置页面获取所需数据。 |
| IEarlyWarnWriteOut       | 预警数据写出接口，用户可以通过该接口写出预警方案执行过程中产生的数据。 |
| IEarlyWarnMessageHandler | 预警消息后续处理接口，处理预警消息发送到消息中心后的后续操作。 |



## IEarlyWarnDataSource

数据源插件，该插件定义了预警平台引擎获取数据的相关逻辑。主要职责：
1. 定义预警方案过程中的获取数据逻辑
2. 定义预警消息模板页面可以获取的哪些数据源字段信息

### 接口位置

```java
package kd.bos.entity.earlywarn.warn.plugin;
public interface IEarlyWarnDataSource {
```
### 接口子类

- **DefaultEarlyWarnBillDataSource**，提供默认单据、基础资料数据源默认实现。

```java
package kd.bos.service.earlywarn.impl;
public class DefaultEarlyWarnBillDataSource implements IEarlyWarnDataSource {
```

- **KDEarlyWarnDataSource**，KDScript 预警数据源插件基类
```java
package kd.bos.entity.earlywarn.warn.impl;
public class KDEarlyWarnDataSource implements IEarlyWarnDataSource {
```

### 接口详情

```java 
/**
 * 数据源接口
 *  主要职责：
 *  1、定义预警方案过程中的获取数据逻辑
 *  2、定义数据输出可以获取的列，以便后续消息插件可以获取
 */
public interface IEarlyWarnDataSource {

    /**
     * 构建过滤数据
     * @param dataSource 数据源
     * @param filterCondition 过滤条件
     * @param context 引擎执行上下文
     * @return 过滤条件
     */
    List<QFilter> buildFilter(String dataSource, FilterCondition filterCondition, EarlyWarnContext context);

    /**
     * 获取数据
     * @param dataSource 数据源
     * @param filters    过滤条件
     * @param context  引擎执行上下文
     * @return 过滤得到的数据
     */
    DynamicObjectCollection getData(String dataSource, List<QFilter> filters, EarlyWarnContext context);


    /**
     * 监控方案通用过滤获取通用过滤条件展示数据
     * @param dataSource 数据源
     * @return 通用过滤条件,条件格式参照 EntityTypeUtil.getFilterColumns的返回数据
     */
    List<Map<String, Object>> getCommonFilterColumns(String dataSource);

    /**
     * 消息配置页面可选字段树
     * @param dataSource 数据源
     * @return 根节点
     */
    TreeNode getSingleMessageFieldTree(String dataSource);

    /**
     * 消息配置页面可选字段树
     * @param dataSource 数据源
     * @return 根节点
     */
    TreeNode getMergeMessageFieldTree(String dataSource);
}
```

## IEarlyWarnConditionForm

自定义预警监控页面数据处理接口，预警平台通过该接口从用户自定义监控条件配置页面获取所需数据。主要职责：

1. 获取使用者构建的自定义表单参数
2. 检查自定义表单参数是否有效

### 接口位置

```java
package kd.bos.entity.earlywarn.warn.plugin;
public interface IEarlyWarnConditionForm {
```

### 接口详情

```java
/**
 * 自定义预警监控页面数据处理接口
 * 职责描述：
 * 监控方案设置自定义监控页面，需要实现该接口，以便后续获取用户配置的自定义数据存储
 */
public interface IEarlyWarnConditionForm {

    /**
     * 获取自定义表单参数
     * @return 自定义表单参数
     */
    Map<String,Object> getCustomParams();

    /**
     * 检查自定义表单参数是否有效
     * @return 错误信息
     */
    EarlyWarnConditionCheckResult checkCustomParams();
}

```

## IEarlyWarnWriteOut

预警数据写出接口，用户可以通过该接口写出预警方案执行过程中产生的数据。

### 接口位置


```java
package kd.bos.entity.earlywarn.warn.plugin;
public interface IEarlyWarnWriteOut {
```

### 接口子类

- **KDEarlyWarnWriteOut**，KDScript 预警数据写出插件基类

```java
package kd.bos.entity.earlywarn.warn.impl;
public class KDEarlyWarnWriteOut implements IEarlyWarnWriteOut {
```

### 接口详情

```java
/**
 * 数据写出接口
 */
public interface IEarlyWarnWriteOut {
    /**
     * 用户写出数据
     * @param list 过滤之后的数据
     * @param context 预警执行上下文
     */
    void writeOut(DynamicObjectCollection list, EarlyWarnContext context);
}
```



## IEarlyWarnMessageCompiler

预警消息编译接口，将监控方案中配置的消息模板转换为实际发送的消息。

### 接口位置

```java
package kd.bos.entity.earlywarn.warn.plugin;
public interface IEarlyWarnMessageCompiler{
```

### 接口子类

- **DefaultBillMessageCompiler**，提供默认单据、基础资料数据源消息模板解析默认实现。

```java
package kd.bos.service.earlywarn.impl;
public class DefaultBillMessageCompiler implements IEarlyWarnDataSource {
```

- **KDEarlyWarnMessageCompiler**，KDScript 预警消息编译插件基类

```java
package kd.bos.entity.earlywarn.warn.impl;
public class KDEarlyWarnMessageCompiler implements IEarlyWarnMessageCompiler {
```

### 接口详情

```java
/**
 * 预警消息编译接口
 */
public interface IEarlyWarnMessageCompiler {
    /**
     * 构建单个消息
     * @param expression 表达式
     * @param fields 参数列表
     * @param data 数据
     * @param context 预警引擎执行上下文
     * @return 转换后的消息
     */
    String getSingleMessage(String expression, List<String> fields, DynamicObject data, EarlyWarnContext context);

    /**
     * 构建合并消息
     * @param expression 表达式
     * @param fields 参数列表
     * @param context 预警引擎执行上下文
     * @return 转换后合并消息
     */
    String getMergeMessage(String expression, List<String> fields, EarlyWarnContext context);

}
```


## IEarlyWarnMessageHandler

预警消息后续处理接口，处理预警消息发送到消息中心后的后续操作。

### 接口位置

```java
package kd.bos.entity.earlywarn.warn.plugin;
public interface IEarlyWarnMessageHandler{
```

### 接口子类

- **KDEarlyWarnMessageHandler**，KDScript 预警消息后续处理插件基类

```java
package kd.bos.entity.earlywarn.warn.impl;
public class KDEarlyWarnMessageHandler implements IEarlyWarnMessageHandler {
```

### 接口详情

```java 
/**
 * 预警消息处理接口
 */
public interface IEarlyWarnMessageHandler {
    /**
     * 构建单条消息PC端处理链接
     * @param data 数据
     * @param context 预警引擎执行上下文
     * @return 转换后的消息
     */
    EarlyWarnMessageInfo singleMessageBuilder(DynamicObject data, EarlyWarnContext context);

    /**
     * 构建单个消息移动端处理链接
     * @param context 预警引擎执行上下文
     * @return 转换后的消息
     */
    EarlyWarnMessageInfo mergeMessageBuilder(EarlyWarnContext context);
}
```



## IEarlyWarnCustomReceiver

自定义预警消息接收人接口，自定义设置消息接收人。

### 接口位置

```java
package kd.bos.entity.earlywarn.warn.plugin;
public interface IEarlyWarnCustomReceiver {
```

### 接口子类

- **KDEarlyWarnCustomReceiver**，提供默认情况下自定义消息接收人的实现。

```java
package kd.bos.entity.earlywarn.warn.impl;
public class KDEarlyWarnCustomReceiver implements IEarlyWarnCustomReceiver {
```
### 接口详情

```java
/**
 * 预警消息自定义消息接收人
 */
public interface IEarlyWarnCustomReceiver {    
    /**
    * 获取消息接收人的id，此id必须在“人员”基础资料中存在
    * @param context 上下文
    * @param dynamicObjects 表单动态对象
    * @return 返回消息接收人的id，可以设置多条，逐条放入List中
    */
    List<Long> getReceiverIds(EarlyWarnContext context, DynamicObject[] dynamicObjects);
}
```