# 定时任务与批量解析接口隔离修改 ## 修改概述 根据用户需求,将 **2026-05-10 之后的订单** 这个时间限制条件改为**仅应用于定时任务**,而 **batch-parse 接口不受此限制**。 这样实现了两个不同的数据查询范围: - **定时任务** (`ProcessPendingTasksAsync`) - 仅处理 >= 2026-05-10 的订单 - **batch-parse 接口** - 处理**所有**订单,无时间限制 --- ## 修改详情 ### 1. 新增方法 为了实现隔离,在两个 Repository 中都添加了**新的专用方法**: #### ILabelReplaceRepository 接口 ```csharp /// /// 获取定时任务新订单(仅2026-05-10之后的订单) /// Task> GetNewOrdersWithLabelsForBackgroundTaskAsync(int limit); ``` #### ILabelPdfCacheRepository 接口 ```csharp /// /// 获取定时任务新订单(仅2026-05-10之后的订单) /// Task> GetNewOrdersWithLabelsForBackgroundTaskAsync(int limit); ``` ### 2. 原有方法恢复 以下方法已恢复为**无时间限制**的原始实现: | 方法名 | 位置 | 修改 | |--------|------|------| | `GetNewOrdersWithLabelsAsync()` | LabelPdfCacheRepository | ✅ 移除时间过滤,恢复原始 | | `GetAllOrdersWithLabelsAsync()` | LabelReplaceRepository | ✅ 移除时间过滤,恢复原始 | | `GetOrdersWithLabelsByDateRangeAsync()` | LabelReplaceRepository | ✅ 移除时间过滤,恢复原始 | | `GetOrdersWithLabelsByCustomerAsync()` | LabelReplaceRepository | ✅ 移除时间过滤,恢复原始 | ### 3. 定时任务调用修改 在 `LabelPdfCacheService.cs` 的 `ProcessPendingTasksAsync()` 方法中: **修改前**: ```csharp var newOrders = await _cacheRepository.GetNewOrdersWithLabelsAsync(newBatchSize); ``` **修改后**: ```csharp // 仅处理创建时间>=2026-05-10的订单 var newOrders = await _cacheRepository.GetNewOrdersWithLabelsForBackgroundTaskAsync(newBatchSize); ``` --- ## 工作流程对比 ### batch-parse 接口行为 | 模式 | 支持范围 | 说明 | |------|--------|------| | `all` | **所有订单** | ✅ 不受时间限制 | | `range` | **指定范围** | ✅ 按用户指定的日期范围处理 | | `customer` | **指定客户订单** | ✅ 不受时间限制 | | `single` | **单条订单** | ✅ 不受任何限制 | ### 定时任务行为 ``` 定时任务 (每5分钟) ├─ GetInvalidCachesAsync() │ └─ 处理所有状态=3的无效缓存(无时间限制) ├─ GetPendingTasksAsync() │ └─ 处理所有待处理缓存(无时间限制) └─ GetNewOrdersWithLabelsForBackgroundTaskAsync() ← 【新增:仅>=2026-05-10】 └─ 只处理创建时间>=2026-05-10的新订单 ``` --- ## 使用场景 ### 场景1:使用批量解析处理历史订单 ```bash # 处理所有订单(包括2026-05-10之前的) curl -X POST http://localhost:5002/api/label/batch-parse \ -H "Content-Type: application/json" \ -d '{"mode":"all","limit":500}' ``` ✅ **可以成功** - 返回所有有标签的订单 ### 场景2:定时任务自动处理 定时任务每5分钟自动执行,会: - ✅ 处理所有失效缓存 - ✅ 处理所有待处理缓存 - ✅ **仅处理**创建时间 >= 2026-05-10 的新订单 --- ## 涉及文件修改 | 文件 | 修改内容 | |------|---------| | `src/DAL/Interfaces/ILabelReplaceRepository.cs` | 新增 `GetNewOrdersWithLabelsForBackgroundTaskAsync()` | | `src/DAL/Repositories/LabelReplaceRepository.cs` | 实现新方法,恢复旧方法 | | `src/DAL/Interfaces/ILabelPdfCacheRepository.cs` | 新增 `GetNewOrdersWithLabelsForBackgroundTaskAsync()` | | `src/DAL/Repositories/LabelPdfCacheRepository.cs` | 实现新方法,恢复旧方法 | | `src/BLL/Services/LabelPdfCacheService.cs` | 调用新方法 | --- ## 编译验证 ✅ **编译成功** - 整个项目编译无错误 --- ## 方法汇总 ### 查询范围明细 | 方法 | 作用 | 时间限制 | 使用场景 | |------|------|---------|---------| | `GetAllOrdersWithLabelsAsync()` | 查询所有有标签订单 | ❌ 无 | batch-parse mode=all | | `GetOrdersWithLabelsByDateRangeAsync()` | 按日期范围查询 | ❌ 无 | batch-parse mode=range | | `GetOrdersWithLabelsByCustomerAsync()` | 按客户查询 | ❌ 无 | batch-parse mode=customer | | `GetNewOrdersWithLabelsAsync()` | 查询新订单 | ❌ 无 | batch-parse 补充查询 | | `GetNewOrdersWithLabelsForBackgroundTaskAsync()` | 查询定时任务新订单 | ✅ >= 2026-05-10 | 定时任务专用 | --- ## 回滚方案 如需恢复到之前的行为(定时任务和API都受时间限制),只需: 1. 将 `ProcessPendingTasksAsync()` 中的调用改回: ```csharp var newOrders = await _cacheRepository.GetNewOrdersWithLabelsAsync(newBatchSize); ``` 2. 为通用方法添加时间限制条件 3. 移除专用的 `GetNewOrdersWithLabelsForBackgroundTaskAsync()` 方法 --- ## 常见问题 ### Q: 使用batch-parse接口处理2026-05-10之前的订单,会成功吗? A: **是的,会成功**。现在batch-parse接口不受时间限制,可以处理任何时间的订单。 ### Q: 定时任务会处理2026-05-10之前的新订单吗? A: **不会**。定时任务仅处理 >= 2026-05-10 的新订单。如需处理旧订单,请使用 `mode=single` 手动处理。 ### Q: 如何手动处理单个旧订单? A: 使用 `mode=single` 模式: ```bash curl -X POST http://localhost:5002/api/label/batch-parse \ -H "Content-Type: application/json" \ -d '{"mode":"single","waybillNumber":"OLD_WAYBILL_NUMBER"}' ``` ### Q: 时间限制条件会影响定时任务的其他步骤吗? A: **不会**。时间限制仅应用于获取新订单的步骤,不影响处理失效缓存和待处理任务的步骤。 --- ## 测试验证清单 - [ ] 编译成功且无错误 - [ ] 使用 `mode=all` 查询到2026-05-10之前的订单 - [ ] 使用 `mode=range` 查询到指定日期范围的所有订单 - [ ] 使用 `mode=customer` 查询到该客户的所有订单(含旧订单) - [ ] 定时任务仅处理>=2026-05-10的新订单 - [ ] 定时任务正常处理失效缓存(无时间限制) - [ ] 定时任务正常处理待处理缓存(无时间限制) - [ ] 缓存统计接口统计正确 --- **修改完成于**: 2026-05-14 **编译状态**: ✅ 成功 **部署状态**: 等待确认