wanshenmean
2026-03-31 96c9142944da3b9f6ebfc63e17451b9b330e5a72
docs: 添加 TaskService 重构设计文档

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
已添加1个文件
106 ■■■■■ 文件已修改
Code/WMS/docs/superpowers/specs/2026-03-31-taskService-refactor-design.md 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/docs/superpowers/specs/2026-03-31-taskService-refactor-design.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,106 @@
# TaskService.cs é‡æž„设计
## 1. èƒŒæ™¯
`TaskService.cs` å½“前超过 1500 è¡Œï¼ŒåŒ…含三个职责差异明显的功能模块:
- **WCS é€»è¾‘处理**:入库/出库/移库/机械手/自动出库任务
- **分容柜接口**:化成分容柜状态同步和出库请求
- **极卷库 AGV æŽ¥å£**:AGV å‡ºå…¥åº“申请、输送线申请、取放货完成
文件过大导致:
- éš¾ä»¥å®šä½å’Œä¿®æ”¹ç‰¹å®šåŠŸèƒ½
- ä»£ç å®¡æŸ¥å›°éš¾
- å¹¶è¡Œå¼€å‘冲突率高
## 2. ç›®æ ‡
将 `TaskService.cs` æ‹†åˆ†ä¸º partial class æ–‡ä»¶ï¼Œ**不改变任何业务逻辑**,**不修改控制器调用方式**。
## 3. æ‹†åˆ†æ–¹æ¡ˆ
### 3.1 æ–‡ä»¶ç»“æž„
| æ–‡ä»¶ | èŒè´£ | é¢„估行数 |
|------|------|----------|
| `TaskService.cs` | partial class å£°æ˜Žã€å­—段定义、构造函数 | ~100行 |
| `TaskService_WCS.cs` | WCS é€»è¾‘处理(入库/出库/移库/空托盘/机械手/自动出库) | ~550行 |
| `TaskService_AGV.cs` | æžå·åº“ AGV ä»»åŠ¡ï¼ˆå‡ºå…¥åº“ç”³è¯·/输送线申请/取放货完成/任务取消) | ~280行 |
| `TaskService_GradingMachine.cs` | åˆ†å®¹æŸœæŽ¥å£ï¼ˆçŠ¶æ€é€šçŸ¥/出库请求/电芯查询) | ~140行 |
### 3.2 ä¿ç•™åœ¨ä¸»æ–‡ä»¶çš„内容
```csharp
// TaskService.cs
public partial class TaskService : ServiceBase<Dt_Task, IRepository<Dt_Task>>, ITaskService
{
    // å­—段
    private readonly IMapper _mapper;
    private readonly IStockInfoService _stockInfoService;
    private readonly ILocationInfoService _locationInfoService;
    private readonly HttpClientHelper _httpClientHelper;
    private readonly IConfiguration _configuration;
    private readonly RoundRobinService _roundRobinService;
    private readonly IMesService _mesService;
    private readonly ITask_HtyService _task_HtyService;
    private readonly IStockInfo_HtyService _stockInfo_HtyService;
    private readonly IUnitOfWorkManage _unitOfWorkManage;
    // æž„造函数
    public TaskService(...) : base(BaseDal) { ... }
    // Repository å±žæ€§
    public IRepository<Dt_Task> Repository => BaseDal;
    // å¸¸é‡
    public List<int> TaskTypes => typeof(TaskTypeEnum).GetEnumIndexList();
    public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
    // é…ç½®å­—段(AGV URL)
    public string AGV_OutTaskComplete = ...;
    public string WCS_ReceiveTask = ...;
}
```
### 3.3 å…¬å…±æ–¹æ³•处理
以下方法因被多个模块调用,采用**复制方式**保持完全独立:
| æ–¹æ³• | å¤åˆ¶åˆ° |
|------|--------|
| `CompleteTaskAsync` | `TaskService_WCS.cs` |
| `GetTaskByPalletCodeAsync` | `TaskService_WCS.cs` |
| `DetermineTargetAddress` | `TaskService_WCS.cs` |
### 3.4 ä¸æ‹†åˆ†çš„内容
- æ‰€æœ‰ `#region` ä¿æŒä¸å˜
- æ‰€æœ‰æžšä¸¾å¼•用保持不变
- æ‰€æœ‰ using è¯­å¥åœ¨å„文件中重复
## 4. å®žæ–½æ­¥éª¤
1. **创建 `TaskService_WCS.cs`**
   - ä»ŽåŽŸæ–‡ä»¶æå– WCS é€»è¾‘处理相关方法
   - æ·»åŠ  partial class å£°æ˜Žå’Œå¿…要 using
2. **创建 `TaskService_AGV.cs`**
   - ä»ŽåŽŸæ–‡ä»¶æå–æžå·åº“ AGV ç›¸å…³æ–¹æ³•
   - ä¿ç•™ `AGV_OutTaskComplete` å’Œ `WCS_ReceiveTask` çš„访问
3. **创建 `TaskService_GradingMachine.cs`**
   - ä»ŽåŽŸæ–‡ä»¶æå–åˆ†å®¹æŸœæŽ¥å£ç›¸å…³æ–¹æ³•
4. **精简 `TaskService.cs`**
   - åˆ é™¤å·²è¿ç§»çš„æ–¹æ³•实现
   - ä¿ç•™ partial class å£°æ˜Žã€å­—段、构造函数
5. **验证编译通过**
   - ç¡®ä¿æ‰€æœ‰æ–¹æ³•签名不变
   - ç¡®ä¿æŽ§åˆ¶å™¨è°ƒç”¨æ­£å¸¸
## 5. çº¦æŸ
- **不修改任何业务逻辑**:只搬移代码,不改实现
- **不修改接口 ITaskService**:控制器依赖接口,不感知实现拆分
- **不修改 DI æ³¨å†Œ**:Autofac æ‰«æä¿æŒä¸å˜
- **使用 partial class**:保证编译后类型完全合并