### 数据模型

***

1. 任务配置，用于描述一个具体的任务配置信息

1. 执行记录，用于描述一个任务的具体的一次执行过程

### 系统说明

***

1. 任务调度的最小时间间隔是5秒，暂不支持频率要求快于5秒的场景

1. 任务配置完成后，满足以下条件的任务会被触发：

    1. 状态为待执行且达到下次执行时间的

    1. 状态为执行中且达到上次执行的过期时间的

1. 任务触发后更新任务的下次执行时间、本次任务的过期时间，然后生成执行记录

1. 根据执行方式的配置来调起相关的服务，同时会将集团编码、应用编码、项目ID、任务编码、调起参数，执行记录ID~~等~~作为参数

1. 被调度方根据执行结果和执行记录ID来更新执行记录

执行方式说明及对应的约束和配置参数说明：

http方式的约束条件

```text
被调度方需保证url对应接口在200毫秒内执行完毕
若不能保证，需要被调用方做异步处理，待异步执行完成后根据执行记录id更新执行记录结果
```

http方式的配置参数说明

```json
{
	"url": "被调度方提供的访问地址，POST方式，参数会放在requestbody里面"
}
```

jms方式说明

```text
根据配置信息，将参数封装为消息对象采用topic方式发送到rabitmq
被调度方监听配置的rabitmq队列
```

jms方式的配置参数说明

```json
{
	"exchange": "",
	"routingKey": ""
}
```

### 数据结构

***

| 任务配置        |             |              |     |                        |
| ----------- | ----------- | ------------ | --- | ---------------------- |
| 字段          | 字段名称        | 类型           | 非空  | 备注                     |
| id          | ID          | varchar(40)  | Y   | 全局唯一                   |
| group_code  | 所属集团编码      | varchar(20)  |     |                        |
| app_code    | 应用编码        | varchar(40)  |     |                        |
| project_id  | 项目ID        | varchar(40)  |     |                        |
| code        | 任务编码        | varchar(20)  | Y   |                        |
| name        | 任务名称        | varchar(40)  | Y   |                        |
| remark      | 备注          | varchar(200) |     |                        |
| status      | 状态          | bit          | Y   | 任务状态：0停用，1待执行，2执行中，3暂停 |
| type        | 执行方式        | varchar(20)  | Y   | 调起方式：http，jms          |
| config      | 执行方式配置参数    | json         | Y   |                        |
| params      | 调起参数        | json         | Y   |                        |
| cron        | cron表达式     | varchar(40)  | Y   |                        |
| next_time   | 下次执行时间      | datetime     | Y   |                        |
| time_out    | 超时时间（秒）     | int          | Y   |                        |
| expire_time | 上次执行任务的过期时间 | datetime     |     |                        |
|             |             |              |     |                        |

| 任务执行记录     |        |             |     |                |
| ---------- | ------ | ----------- | --- | -------------- |
| 字段         | 字段名称   | 类型          | 非空  | 备注             |
| id         | ID     | varchar(40) | Y   | 全局唯一           |
| task_id    | 任务ID   | varchar(40) | Y   |                |
| start_time | 开始时间   | datetime    |     |                |
| end_time   | 结束时间   | datetime    |     |                |
| success    | 是否正常结束 | bit         | Y   | 1是，0否，否表示发生了异常 |
| error_info | 错误信息   | json        | Y   |                |
|            |        |             |     |                |



### 接口清单

1.保存任务配置（创建、更新）

2.保存执行记录（更新）

