上传源代码版本

This commit is contained in:
Im-Jenisson
2026-06-01 16:30:29 +08:00
commit b2a9b7d3c2
462 changed files with 104365 additions and 0 deletions

View File

@@ -0,0 +1,244 @@
# 定时任务文档索引
本文件夹包含所有与 **PDF标签缓存定时任务** 相关的文档说明。
## 📚 文档清单
### 1. 核心文档
| 文档 | 说明 | 最后更新 |
|------|------|---------|
| [定时任务暂停指南](定时任务暂停指南.md) | 如何暂停、恢复定时任务以及API接口管理 | 2026-05-14 |
| [定时任务执行范围修改说明](定时任务执行范围修改说明_2026-05-14.md) | 限制定时任务仅处理2026-05-10之后订单的修改 | 2026-05-14 |
| [定时任务与API隔离修改](定时任务与API隔离修改_2026-05-14.md) | 时间限制条件仅应用于定时任务batch-parse接口无限制 | 2026-05-14 |
| [Background Task Scope Improvement](Background_Task_Scope_Improvement.md) | 定时任务执行范围优化总结 | 2026-05-13 |
### 2. 操作指南
#### 暂停与恢复定时任务
参考:[定时任务暂停指南](定时任务暂停指南.md)
**3种方法**
- 方法1配置文件方式生产环保境
- 方法2环境变量方式Docker
- 方法3API接口方式最灵活
#### 定时任务的执行时间限制
参考:[定时任务与API隔离修改](定时任务与API隔离修改_2026-05-14.md)
**关键点**
- 定时任务:仅处理 >= 2026-05-10 的新订单
- batch-parse 接口:处理所有订单,无时间限制
- 两者完全隔离,互不影响
### 3. 相关配置
#### 定时任务类
- **位置**: `src/CONTROLLER/BackgroundServices/LabelPdfCacheBackgroundService.cs`
- **执行间隔**: 5分钟
- **主要方法**: `ExecuteAsync()``ProcessPendingTasksAsync()`
#### 后台服务管理器
- **位置**: `src/CONTROLLER/BackgroundServices/BackgroundServiceManager.cs`
- **用途**: 提供暂停/恢复定时任务的功能
#### 缓存服务
- **位置**: `src/BLL/Services/LabelPdfCacheService.cs`
- **主要方法**: `ProcessPendingTasksAsync()`, `ProcessSingleCacheTaskAsync()`
---
## 🔄 定时任务工作流程
```
定时任务 (每5分钟)
├─ 第一步:处理失效缓存
│ └─ 获取 Status=3 的缓存记录
│ └─ 重新处理这些订单
├─ 第二步:处理待处理任务
│ └─ 获取 Status=0 或 Status=2 的缓存记录
│ └─ 尝试重新处理
└─ 第三步:处理新订单 ⭐ 时间限制在此
└─ 获取订单表中有标签但缓存表无记录的订单
└─ 仅处理创建时间 >= 2026-05-10 的订单
└─ 创建新的缓存记录
```
---
## ⚙️ 配置参数
### 定时任务执行间隔
**文件**: `src/CONTROLLER/BackgroundServices/LabelPdfCacheBackgroundService.cs` (第18行)
```csharp
private const int TaskIntervalMinutes = 5;
```
### 批处理大小
**文件**: `src/BLL/Services/LabelPdfCacheService.cs` (ProcessPendingTasksAsync方法参数)
```csharp
public async Task<int> ProcessPendingTasksAsync(int maxRetryCount = 3, int batchSize = 100)
```
### 时间截断日期
**文件**: `src/DAL/Repositories/LabelPdfCacheRepository.cs`
```csharp
var cutoffDate = new DateTime(2026, 5, 10, 0, 0, 0);
```
---
## 🚀 常用操作
### 查看定时任务状态
```bash
curl -X GET http://localhost:5002/api/label/background-service/status
```
### 暂停定时任务
```bash
curl -X POST http://localhost:5002/api/label/background-service/pause
```
### 恢复定时任务
```bash
curl -X POST http://localhost:5002/api/label/background-service/resume
```
### 手动触发批量解析
```bash
# 处理所有订单(无时间限制)
curl -X POST http://localhost:5002/api/label/batch-parse \
-H "Content-Type: application/json" \
-d '{"mode":"all","limit":500}'
# 处理单个订单(包括旧订单)
curl -X POST http://localhost:5002/api/label/batch-parse \
-H "Content-Type: application/json" \
-d '{"mode":"single","waybillNumber":"ORDER_NUMBER"}'
```
---
## 📊 监控指标
### 缓存统计信息
```bash
curl -X GET http://localhost:5002/api/label/cache-statistics
```
**返回字段**:
- `totalRecords` - 总缓存记录数
- `successRecords` - 成功处理的记录
- `failedRecords` - 失败的记录
- `invalidRecords` - 无效的记录
- `pendingRecords` - 待处理的记录
- `withBarcodeRecords` - 包含条码的记录
- `averageParseDurationMs` - 平均解析时间
- `maxParseDurationMs` - 最大解析时间
- `minParseDurationMs` - 最小解析时间
---
## 🔧 故障排查
### 定时任务不执行
**可能原因**:
1. 服务未启动
2. 定时任务已暂停
3. 数据库连接失败
**解决方案**:
```bash
# 检查状态
curl -X GET http://localhost:5002/api/label/background-service/status
# 如果已暂停,恢复它
curl -X POST http://localhost:5002/api/label/background-service/resume
# 查看日志
tail -f logs/development_api_log-*.txt
```
### 定时任务处理缓慢
**可能原因**:
1. 待处理任务过多
2. 网络延迟
3. PDF渲染时间过长
**解决方案**:
```bash
# 查看缓存统计
curl -X GET http://localhost:5002/api/label/cache-statistics
# 手动处理部分任务
curl -X POST http://localhost:5002/api/label/batch-parse \
-H "Content-Type: application/json" \
-d '{"mode":"all","limit":100}'
```
### 新订单未被处理
**检查清单**:
1. ✅ 订单是否在 >= 2026-05-10 之后创建
2. ✅ 订单是否有标签数据
3. ✅ 定时任务是否正在运行
4. ✅ 缓存表中是否已有该订单的记录
**手动处理**:
```bash
curl -X POST http://localhost:5002/api/label/batch-parse \
-H "Content-Type: application/json" \
-d '{"mode":"single","waybillNumber":"WAYBILL_NUMBER"}'
```
---
## 📝 修改历史
| 日期 | 修改内容 | 文档 |
|------|--------|------|
| 2026-05-14 | 隔离定时任务和API的时间限制条件 | [定时任务与API隔离修改](定时任务与API隔离修改_2026-05-14.md) |
| 2026-05-14 | 添加定时任务暂停/恢复功能 | [定时任务暂停指南](定时任务暂停指南.md) |
| 2026-05-14 | 限制定时任务仅处理2026-05-10之后订单 | [定时任务执行范围修改说明](定时任务执行范围修改说明_2026-05-14.md) |
| 2026-05-13 | 优化定时任务执行范围 | [Background Task Scope Improvement](Background_Task_Scope_Improvement.md) |
---
## ❓ 常见问题
### Q: 定时任务多久执行一次?
A: 每5分钟执行一次。可以在 `LabelPdfCacheBackgroundService.cs` 中修改 `TaskIntervalMinutes` 常量来改变执行频率。
### Q: 如何手动处理2026-05-10之前的订单
A: 使用 `mode=single` 通过 batch-parse 接口手动处理单个订单,该模式不受时间限制。
### Q: 定时任务会处理失败的订单吗?
A: 会的。定时任务会重试失败的订单最多重试3次可配置
### Q: 能否改变定时任务的执行时间?
A: 可以。修改 `LabelPdfCacheBackgroundService.cs` 中的 `TaskIntervalMinutes` 常量。
### Q: 暂停定时任务后,待处理的任务会丢失吗?
A: 不会。暂停只是停止周期性执行,待处理的任务会保留在数据库中,恢复后继续处理。
---
## 🔗 相关资源
- **API文档**: 根目录下的 `API_Documentation_zh.md`
- **完整系统流程**: 根目录下的 `SystemFlowDocument.md`
- **项目README**: 根目录下的 `README.md`
---
**最后更新**: 2026-05-14
**维护者**: 开发团队
**状态**: ✅ 完整