# 文件上传 API 文档

## 1. 批量上传文件

### 接口地址
POST /ccdi/file-upload/batch

### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| projectId | Long | 是 | 项目ID |
| files | File[] | 是 | 文件数组（最多100个，单个最大50MB） |

### 请求示例
```bash
curl -X POST "http://localhost:8080/ccdi/file-upload/batch" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "projectId=1" \
  -F "files=@/path/to/file1.xlsx" \
  -F "files=@/path/to/file2.xlsx"
```

### 返回示例
```json
{
  "code": 200,
  "msg": "上传任务已提交",
  "data": "a1b2c3d4e5f6g7h8"
}
```

### 返回字段说明
| 字段 | 类型 | 说明 |
|------|------|------|
| code | Integer | 状态码，200表示成功 |
| msg | String | 提示信息 |
| data | String | 批次ID，用于追踪上传任务 |

### 错误码说明
| code | msg | 说明 |
|------|-----|------|
| 500 | 项目ID不能为空 | 缺少必填参数 |
| 500 | 请选择要上传的文件 | 文件数组为空 |
| 500 | 单次最多上传100个文件 | 文件数量超限 |
| 500 | 文件 xxx 超过50MB限制 | 文件大小超限 |
| 500 | 文件 xxx 格式不支持，仅支持Excel文件 | 文件格式错误 |
| 500 | 系统繁忙，请稍后再试 | 线程池已满 |

---

## 2. 查询上传记录列表

### 接口地址
GET /ccdi/file-upload/list

### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| projectId | Long | 否 | 项目ID |
| fileStatus | String | 否 | 文件状态：uploading/parsing/parsed_success/parsed_failed |
| fileName | String | 否 | 文件名称（模糊查询） |
| uploadUser | String | 否 | 上传人 |
| pageNum | Integer | 否 | 页码，默认1 |
| pageSize | Integer | 否 | 每页数量，默认10 |

### 请求示例
```bash
curl -X GET "http://localhost:8080/ccdi/file-upload/list?projectId=1&fileStatus=parsed_success&pageNum=1&pageSize=10" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

### 返回示例
```json
{
  "code": 200,
  "msg": "查询成功",
  "rows": [
    {
      "id": 1,
      "projectId": 1,
      "lsfxProjectId": 100,
      "logId": 123456,
      "fileName": "流水1.xlsx",
      "fileSize": 2621440,
      "fileStatus": "parsed_success",
      "enterpriseNames": "张三,李四",
      "accountNos": "622xxx,623xxx",
      "uploadTime": "2026-03-05 10:30:00",
      "uploadUser": "admin"
    }
  ],
  "total": 100
}
```

### 返回字段说明
| 字段 | 类型 | 说明 |
|------|------|------|
| rows | Array | 记录列表 |
| total | Long | 总记录数 |

---

## 3. 查询上传统计

### 接口地址
GET /ccdi/file-upload/statistics/{projectId}

### 路径参数
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| projectId | Long | 是 | 项目ID |

### 请求示例
```bash
curl -X GET "http://localhost:8080/ccdi/file-upload/statistics/1" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

### 返回示例
```json
{
  "code": 200,
  "msg": "查询成功",
  "data": {
    "uploading": 2,
    "parsing": 3,
    "parsedSuccess": 15,
    "parsedFailed": 1,
    "total": 21
  }
}
```

### 返回字段说明
| 字段 | 类型 | 说明 |
|------|------|------|
| uploading | Long | 上传中数量 |
| parsing | Long | 解析中数量 |
| parsedSuccess | Long | 解析成功数量 |
| parsedFailed | Long | 解析失败数量 |
| total | Long | 总数量 |

---

## 4. 查询记录详情

### 接口地址
GET /ccdi/file-upload/detail/{id}

### 路径参数
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 是 | 记录ID |

### 请求示例
```bash
curl -X GET "http://localhost:8080/ccdi/file-upload/detail/1" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

### 返回示例
```json
{
  "code": 200,
  "msg": "查询成功",
  "data": {
    "id": 1,
    "projectId": 1,
    "lsfxProjectId": 100,
    "logId": 123456,
    "fileName": "流水1.xlsx",
    "fileSize": 2621440,
    "fileStatus": "parsed_success",
    "enterpriseNames": "张三,李四",
    "accountNos": "622xxx,623xxx",
    "errorMessage": null,
    "uploadTime": "2026-03-05 10:30:00",
    "uploadUser": "admin"
  }
}
```

---

## 5. 文件状态说明

| 状态 | 说明 |
|------|------|
| uploading | 文件上传中 |
| parsing | 文件解析中 |
| parsed_success | 文件解析成功 |
| parsed_failed | 文件解析失败 |

---

## 6. 通用说明

### 认证方式
所有接口需要在请求头中携带 Token：
```
Authorization: Bearer YOUR_TOKEN
```

### 获取 Token
```bash
POST /login/test?username=admin&password=admin123
```

### 响应格式
所有接口统一返回格式：
```json
{
  "code": 200,
  "msg": "操作成功",
  "data": {}
}
```

### 错误处理
当发生错误时，返回格式：
```json
{
  "code": 500,
  "msg": "错误信息"
}
```
