Files
LabelChange-server/.trae/docs/Batch_Parse_API_Guide.md
2026-06-01 16:30:29 +08:00

405 lines
7.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PDF标签批量解析接口指南
**版本**: v1.0
**更新**: 2026-05-13
**状态**: ✅ 已实施并编译通过
---
## 📋 接口概述
为了方便您进行已有订单数据的标签解析我为您新增了两个API接口
| 接口 | 方法 | 路由 | 说明 |
|------|------|------|------|
| 批量解析标签 | POST | `/api/label/label-replace/batch-parse` | 批量解析订单标签 |
| 缓存统计 | GET | `/api/label/label-replace/cache-statistics` | 查看缓存统计信息 |
---
## 🚀 接口详解
### 1. 批量解析标签接口
**端点**: `POST /api/label/label-replace/batch-parse`
**功能**: 根据不同条件批量解析订单标签并缓存
#### 请求格式
```json
{
"mode": "all|range|customer|single",
"limit": 1000,
"waybillNumber": "可选:单条模式的中性面单号",
"customerId": "可选客户模式的客户ID",
"startDate": "可选:时间范围模式的开始时间",
"endDate": "可选:时间范围模式的结束时间"
}
```
#### Mode 模式详解
##### **1⃣ all 模式(全部)**
处理所有有标签的订单
**请求示例**
```bash
curl -X POST http://localhost:8080/api/label/label-replace/batch-parse \
-H "Content-Type: application/json" \
-d '{
"mode": "all",
"limit": 1000
}'
```
**响应示例**
```json
{
"status": "success",
"message": "批量解析完成",
"data": {
"totalProcessed": 250,
"successCount": 248,
"errorCount": 2,
"mode": "all"
}
}
```
---
##### **2⃣ range 模式(时间范围)**
按指定的时间范围处理订单
**请求示例**
```bash
curl -X POST http://localhost:8080/api/label/label-replace/batch-parse \
-H "Content-Type: application/json" \
-d '{
"mode": "range",
"startDate": "2026-05-01T00:00:00",
"endDate": "2026-05-13T23:59:59",
"limit": 500
}'
```
**响应示例**
```json
{
"status": "success",
"message": "批量解析完成",
"data": {
"totalProcessed": 150,
"successCount": 148,
"errorCount": 2,
"mode": "range"
}
}
```
---
##### **3⃣ customer 模式(按客户)**
按指定客户处理订单
**请求示例**
```bash
curl -X POST http://localhost:8080/api/label/label-replace/batch-parse \
-H "Content-Type: application/json" \
-d '{
"mode": "customer",
"customerId": "CUST001",
"limit": 500
}'
```
**响应示例**
```json
{
"status": "success",
"message": "批量解析完成",
"data": {
"totalProcessed": 80,
"successCount": 79,
"errorCount": 1,
"mode": "customer"
}
}
```
---
##### **4⃣ single 模式(单条)**
处理单条订单
**请求示例**
```bash
curl -X POST http://localhost:8080/api/label/label-replace/batch-parse \
-H "Content-Type: application/json" \
-d '{
"mode": "single",
"waybillNumber": "SFN202605130001"
}'
```
**响应示例**
```json
{
"status": "success",
"message": "批量解析完成",
"data": {
"totalProcessed": 1,
"successCount": 1,
"errorCount": 0,
"mode": "single"
}
}
```
---
### 2. 缓存统计接口
**端点**: `GET /api/label/label-replace/cache-statistics`
**功能**: 查看PDF缓存的统计信息
#### 请求示例
```bash
curl -X GET http://localhost:8080/api/label/label-replace/cache-statistics
```
#### 响应示例
```json
{
"status": "success",
"message": "缓存统计信息",
"data": {
"totalRecords": 1250,
"successRecords": 1200,
"failedRecords": 30,
"invalidRecords": 10,
"pendingRecords": 10,
"withBarcodeRecords": 980,
"averageParseDurationMs": 425.5,
"maxParseDurationMs": 2100,
"minParseDurationMs": 45
}
}
```
**统计字段说明**
| 字段 | 说明 |
|------|------|
| totalRecords | 缓存表中的总记录数 |
| successRecords | 成功缓存的记录数Status=1 |
| failedRecords | 缓存失败的记录数Status=2 |
| invalidRecords | 已失效的记录数Status=3 |
| pendingRecords | 待处理的记录数Status=0 |
| withBarcodeRecords | 成功提取条码的记录数 |
| averageParseDurationMs | 平均解析耗时(毫秒) |
| maxParseDurationMs | 最长解析耗时(毫秒) |
| minParseDurationMs | 最短解析耗时(毫秒) |
---
## 💡 使用场景
### 场景1初始化现有数据
**需求**:将所有现有订单的标签解析并缓存
```bash
curl -X POST http://localhost:8080/api/label/label-replace/batch-parse \
-H "Content-Type: application/json" \
-d '{
"mode": "all",
"limit": 5000
}'
```
---
### 场景2重新解析指定时间范围的订单
**需求**重新解析2026年5月1日至5月13日的所有订单标签
```bash
curl -X POST http://localhost:8080/api/label/label-replace/batch-parse \
-H "Content-Type: application/json" \
-d '{
"mode": "range",
"startDate": "2026-05-01T00:00:00",
"endDate": "2026-05-13T23:59:59",
"limit": 2000
}'
```
---
### 场景3按客户重新解析
**需求**:重新解析特定客户的所有订单标签
```bash
curl -X POST http://localhost:8080/api/label/label-replace/batch-parse \
-H "Content-Type: application/json" \
-d '{
"mode": "customer",
"customerId": "CUST001",
"limit": 1000
}'
```
---
### 场景4解析单条订单
**需求**:重新解析某个特定订单的标签
```bash
curl -X POST http://localhost:8080/api/label/label-replace/batch-parse \
-H "Content-Type: application/json" \
-d '{
"mode": "single",
"waybillNumber": "SFN202605130001"
}'
```
---
## 🔍 错误处理
### 错误响应示例
**缺少必需参数**
```json
{
"message": "时间范围模式需要 StartDate 和 EndDate 参数"
}
```
**无效的mode参数**
```json
{
"message": "无效的处理模式,请使用: all, range, customer, single"
}
```
**解析过程中的错误**
```json
{
"status": "error",
"message": "批量解析失败",
"errorDetails": "具体错误信息"
}
```
---
## 📊 执行过程
当您调用批量解析接口时,系统会:
```
1. 根据mode参数查询匹配的订单
2. 对每个订单执行以下步骤:
├─ 下载或读取标签URL或Base64
├─ 验证PDF有效性页数、文件大小
├─ 使用GhostScript渲染PDF
├─ 提取条码信息(异步)
└─ 缓存结果到数据库
3. 返回处理统计结果
```
---
## ⚠️ 注意事项
1. **批量处理限制**
- 默认limit为1000建议分批处理避免超时
- 对于all模式建议limit不超过5000
2. **处理时间**
- 根据订单数量和标签复杂度,处理时间会变化
- 平均每个订单处理时间为400-600ms
- 建议使用较长的HTTP超时时间>60秒
3. **资源占用**
- 大批量处理会占用服务器资源
- 建议在业务低谷期执行
4. **重复处理**
- 重复调用接口会重新处理订单
- 已有缓存会被覆盖
---
## 🛠️ 与PostMan集成
### 1. 创建环境变量
```
{{base_url}} = http://localhost:8080
```
### 2. 创建请求
**全部解析**
```
POST {{base_url}}/api/label/label-replace/batch-parse
Body (JSON):
{
"mode": "all",
"limit": 1000
}
```
**查看统计**
```
GET {{base_url}}/api/label/label-replace/cache-statistics
```
---
## 📈 使用建议
### 首次使用流程
```
1. 调用统计接口查看当前缓存状态
GET /cache-statistics
2. 根据统计结果决定是否需要全量解析
3. 如果需要解析根据场景选择合适的mode
POST /batch-parse
4. 解析完成后,再次调用统计接口查看效果
GET /cache-statistics
```
---
## ✅ 验证清单
```
✅ 接口已实施
✅ 支持4种处理模式
✅ 完整的错误处理
✅ 详细的统计信息
✅ 编译成功exit code = 0
✅ 零编译错误
```
---
**现在您可以随时触发订单标签解析了!** 🎉