# 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>, 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 Repository => BaseDal; // 常量 public List TaskTypes => typeof(TaskTypeEnum).GetEnumIndexList(); public List 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**:保证编译后类型完全合并