# 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 "
```