# 执行解析任务 API 接口说明

## 1. 接口基本信息

- **接口路径**：`/api/data_parse/execute_parse_task`
- **请求方法**：`POST`
- **请求类型**：`application/json`

---

## 2. 输入参数说明

| 参数名        | 类型    | 是否必填 | 说明                                                         |
| ------------- | ------- | -------- | ------------------------------------------------------------ |
| task_type     | string  | 是       | 任务类型。可选值：`名片`、`简历`、`新任命`、`招聘`、`杂项`   |
| data          | array   | 是       | 任务数据列表。每种任务类型的数据结构不同，见下文            |
| publish_time  | string  | 否（新任命必填） | 发布时间，仅`新任命`任务需要                                  |
| process_type  | string  | 否       | 杂项任务时的处理类型，默认为`table`                          |
| id            | int     | 是       | 解析任务ID（所有任务都必须传递，用于唯一标识任务）           |

> **注意：** `id` 字段为所有任务类型必填。

### 2.1 data 字段结构

- **名片**：图片文件的MinIO路径或Base64字符串等（具体由后端约定）
- **简历**：简历文件的MinIO路径或Base64字符串等
- **新任命**：Markdown文本内容数组
- **招聘**：招聘数据对象数组
- **杂项**：图片或表格等文件的MinIO路径或Base64字符串等

---

## 3. 请求示例

### 3.1 名片任务
```json
{
  "task_type": "名片",
  "data": [
    "minio/path/to/card1.jpg",
    "minio/path/to/card2.jpg"
  ],
  "id": 123
}
```

### 3.2 简历任务
```json
{
  "task_type": "简历",
  "data": [
    "minio/path/to/resume1.pdf",
    "minio/path/to/resume2.pdf"
  ],
  "id": 124
}
```

### 3.3 新任命任务
```json
{
  "task_type": "新任命",
  "data": [
    "# 张三\n\n职位：总经理\n公司：XX酒店",
    "# 李四\n\n职位：市场总监\n公司：YY酒店"
  ],
  "publish_time": "2025-01-15",
  "id": 125
}
```

### 3.4 招聘任务
```json
{
  "task_type": "招聘",
  "data": [
    {"name": "王五", "position": "销售经理"},
    {"name": "赵六", "position": "前台主管"}
  ],
  "id": 126
}
```

### 3.5 杂项任务
```json
{
  "task_type": "杂项",
  "data": [
    "minio/path/to/image1.png",
    "minio/path/to/image2.png"
  ],
  "process_type": "table",
  "id": 127
}
```

---

## 4. 前端调用样例代码（JavaScript/axios）

```js
import axios from 'axios';

async function executeParseTask() {
  const payload = {
    task_type: '名片',
    data: ['minio/path/to/card1.jpg', 'minio/path/to/card2.jpg'],
    id: 123
  };
  try {
    const response = await axios.post('/api/data_parse/execute_parse_task', payload);
    if (response.data.success) {
      console.log('解析成功:', response.data.data);
    } else {
      console.error('解析失败:', response.data.message);
    }
  } catch (error) {
    console.error('请求异常:', error);
  }
}
```

---

## 5. 输出结果说明

- **success**：布尔值，表示是否处理成功
- **message**：字符串，处理结果说明
- **data**：处理结果数据，结构依赖于任务类型

### 5.1 返回示例（成功）
```json
{
  "success": true,
  "message": "批量名片解析成功",
  "data": {
    "summary": {
      "total_count": 2,
      "success_count": 2,
      "failed_count": 0
    },
    "results": [
      {"name": "张三", "mobile": "13800138000", ...},
      {"name": "李四", "mobile": "13900139000", ...}
    ]
  }
}
```

### 5.2 返回示例（部分成功）
```json
{
  "success": true,
  "message": "部分数据处理失败",
  "data": {
    "summary": {
      "total_count": 2,
      "success_count": 1,
      "failed_count": 1
    },
    "results": [
      {"name": "张三", "mobile": "13800138000", ...},
      {"error": "文件格式不支持"}
    ]
  }
}
```

### 5.3 返回示例（失败）
```json
{
  "success": false,
  "message": "task_type参数不能为空",
  "data": null
}
```

---

## 6. 状态码说明

| 状态码 | 说明                       |
| ------ | -------------------------- |
| 200    | 处理成功                   |
| 206    | 部分数据处理成功           |
| 400    | 请求参数错误               |
| 500    | 服务器内部错误/处理失败    |

---

## 7. 备注

- `task_type` 必须为后端支持的类型，否则会返回 400 错误。
- `data` 字段结构需与任务类型匹配。
- `publish_time` 仅在 `新任命` 任务时必填。
- 返回的 `data` 字段结构会根据任务类型和处理结果有所不同。
- `id` 字段为所有任务类型必填，用于唯一标识和更新任务状态。 