# TaskService.cs 重构实施计划 > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** 将 1500+ 行的 `TaskService.cs` 拆分为 4 个 partial class 文件,保持业务逻辑不变,控制器调用方式不变。 **Architecture:** 使用 C# partial class 特性,将 TaskService 按功能模块拆分为 WCS、AGV、分容柜三个独立文件,主文件保留字段和构造函数。编译后合并为单一类型,对控制器完全透明。 **Tech Stack:** C# / ASP.NET Core 6.0 / partial class --- ## 文件结构 ``` WIDESEA_TaskInfoService/ ├── TaskService.cs # 精简后 ~100行:字段、构造函数 ├── TaskService_WCS.cs # ~550行:WCS逻辑处理 ├── TaskService_AGV.cs # ~280行:极卷库AGV任务 └── TaskService_GradingMachine.cs # ~140行:分容柜接口 ``` --- ## Task 1: 创建 TaskService_WCS.cs **Files:** - Create: `WIDESEA_TaskInfoService/TaskService_WCS.cs` - Modify: `WIDESEA_TaskInfoService/TaskService.cs`(删除已迁移方法) - [ ] **Step 1: 创建 TaskService_WCS.cs partial class 文件** ```csharp using Mapster; using MapsterMapper; using Microsoft.Extensions.Configuration; using SqlSugar; using System.DirectoryServices.Protocols; using System.Text.Json; using WIDESEA_Common.LocationEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Core; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO.GradingMachine; using WIDESEA_DTO.MES; using WIDESEA_DTO.Stock; using WIDESEA_DTO.Task; using WIDESEA_IBasicService; using WIDESEA_IStockService; using WIDESEA_ITaskInfoService; using WIDESEA_Model.Models; namespace WIDESEA_TaskInfoService { public partial class TaskService { #region WCS逻辑处理 /// /// 创建任务(组盘入库任务、空托盘回库任务) /// public async Task CreateTaskInboundAsync(CreateTaskDto taskDto) { // ... 保持原有实现不变 } /// /// 根据指定的任务详情异步创建新的出库任务 /// public async Task CreateTaskOutboundAsync(CreateTaskDto taskDto) { // ... 保持原有实现不变 } // ... 其他 WCS 相关方法(见原文件 82-939 行) // GetTasksLocationAsync // InboundFinishTaskAsync // OutboundFinishTaskAsync // RelocationFinishTaskAsync // CreateTaskInboundTrayAsync // InboundFinishTaskTrayAsync // GetOutBoundTrayTaskAsync // OutboundFinishTaskTrayAsync // UpdateTaskByStatusAsync // CreateAutoOutboundTasksAsync // CreateRobotGroupPalletTaskAsync // CreateRobotChangePalletTaskAsync // CreateRobotSplitPalletTaskAsync // CreateRobotPalletTaskAsync // GetTaskByPalletCodeAsync (private, 复制到此文件) // CompleteTaskAsync (private, 复制到此文件) // DetermineTargetAddress (private, 复制到此文件) #endregion WCS逻辑处理 } } ``` - [ ] **Step 2: 验证编译** Run: `dotnet build WIDESEA_WMSServer.sln` Expected: 无编译错误(WCS 方法暂时重复定义,下一步删除原文件中的实现) --- ## Task 2: 创建 TaskService_AGV.cs **Files:** - Create: `WIDESEA_TaskInfoService/TaskService_AGV.cs` - [ ] **Step 1: 创建 TaskService_AGV.cs partial class 文件** ```csharp using Mapster; using MapsterMapper; using Microsoft.Extensions.Configuration; using SqlSugar; using System.DirectoryServices.Protocols; using System.Text.Json; using WIDESEA_Common.LocationEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; // ... 其他 using 与原文件一致 namespace WIDESEA_TaskInfoService { public partial class TaskService { #region 极卷库任务模块 /// /// 出入库申请 /// public async Task ApplyInOutAsync(ApplyInOutDto applyInOutDto) { // ... 保持原有实现不变(见原文件 1132-1245 行) } /// /// 手动出库完成反馈给AGV /// public async Task OutTaskComplete(OutTaskCompleteDto outTaskCompleteDto) { // ... 保持原有实现不变(见原文件 1252-1306 行) } /// /// 输送线申请进入 /// public async Task ApplyEnterAsync(ApplyEnterDto applyEnterDto) { // ... 保持原有实现不变(见原文件 1339-1383 行) } /// /// 取放货完成 /// public async Task TaskCompleteAsync(TaskCompleteDto taskCompleteDto) { // ... 保持原有实现不变(见原文件 1390-1463 行) } /// /// 任务取消 /// public async Task TaskCancelAsync(TaskCancelDto taskCancelDto) { // ... 保持原有实现不变(见原文件 1470-1519 行) } #endregion 极卷库任务模块 } } ``` - [ ] **Step 2: 验证编译** Run: `dotnet build WIDESEA_WMSServer.sln` Expected: 无编译错误 --- ## Task 3: 创建 TaskService_GradingMachine.cs **Files:** - Create: `WIDESEA_TaskInfoService/TaskService_GradingMachine.cs` - [ ] **Step 1: 创建 TaskService_GradingMachine.cs partial class 文件** ```csharp using Mapster; using MapsterMapper; using Microsoft.Extensions.Configuration; using SqlSugar; using System.DirectoryServices.Protocols; using System.Text.Json; using WIDESEA_Common.LocationEnum; // ... 其他 using 与原文件一致 namespace WIDESEA_TaskInfoService { public partial class TaskService { #region 分容柜接口 /// /// 堆垛机取放货完成后物流通知化成分容柜完成信号 /// public async Task InOrOutCompletedAsync(GradingMachineInputDto input) { // ... 保持原有实现不变(见原文件 948-986 行) } /// /// 化成分容柜定时向物流更新分容柜状态信息 /// public async Task SendLocationStatusAsync(GradingMachineInputDto input) { // ... 保持原有实现不变(见原文件 993-1023 行) } /// /// 分容柜工作完成后调用此接口通知物流出库 /// public async Task RequestOutboundAsync(GradingMachineInputDto input) { // ... 保持原有实现不变(见原文件 1030-1082 行) } /// /// 入库完成分容调用获取托盘上每个通道电芯 /// public async Task GetPalletCodeCellAsync(GradingMachineInputDto input) { // ... 保持原有实现不变(见原文件 1089-1118 行) } #endregion 分容柜接口 } } ``` - [ ] **Step 2: 验证编译** Run: `dotnet build WIDESEA_WMSServer.sln` Expected: 无编译错误 --- ## Task 4: 精简 TaskService.cs **Files:** - Modify: `WIDESEA_TaskInfoService/TaskService.cs` - [ ] **Step 1: 删除已迁移到 partial 文件的方法实现** 保留内容: - 所有 using 语句 - namespace 声明 - partial class 声明 - 字段定义(_mapper, _stockInfoService 等) - 构造函数 - Repository 属性 - TaskTypes / TaskOutboundTypes 属性 - AGV_OutTaskComplete / WCS_ReceiveTask 配置字段 删除内容: - 所有 #region WCS逻辑处理 的方法实现 - 所有 #region 分容柜接口 的方法实现 - 所有 #region 极卷库任务模块 的方法实现 - CompleteTaskAsync、GetTaskByPalletCodeAsync、DetermineTargetAddress 私有方法 删除后文件结构: ```csharp using Mapster; using MapsterMapper; // ... 所有 using namespace WIDESEA_TaskInfoService { public partial class TaskService : ServiceBase>, ITaskService { // 字段 (~10行) // 构造函数 (~15行) // Repository 属性 (1行) // TaskTypes 属性 (2行) // AGV 配置字段 (2行) // 注意:原有的 #region WCS逻辑处理、分容柜接口、极卷库任务模块 region 块全部删除 // 对应的方法实现已迁移到 partial class 文件 } } ``` - [ ] **Step 2: 验证编译** Run: `dotnet build WIDESEA_WMSServer.sln` Expected: 无编译错误,所有控制器端点正常 --- ## Task 5: 最终验证 - [ ] **Step 1: 完整编译** Run: `dotnet build WIDESEA_WMSServer.sln` Expected: SUCCESS,无警告 - [ ] **Step 2: 检查文件行数** Run: `wc -l WIDESEA_TaskInfoService/TaskService*.cs` Expected: - TaskService.cs: ~100行 - TaskService_WCS.cs: ~550行 - TaskService_AGV.cs: ~280行 - TaskService_GradingMachine.cs: ~140行 - [ ] **Step 3: 提交代码** ```bash git add WIDESEA_TaskInfoService/TaskService*.cs git commit -m "refactor(TaskService): 拆分为partial class模块化 - TaskService_WCS.cs: WCS逻辑处理(入库/出库/移库/机械手/自动出库) - TaskService_AGV.cs: 极卷库AGV任务模块 - TaskService_GradingMachine.cs: 分容柜接口 - TaskService.cs: 保留字段/构造函数/接口声明 Co-Authored-By: Claude Opus 4.6 " ```