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行:分容柜接口
Files:
- Create: WIDESEA_TaskInfoService/TaskService_WCS.cs
- Modify: WIDESEA_TaskInfoService/TaskService.cs(删除已迁移方法)
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逻辑处理
/// <summary>
/// 创建任务(组盘入库任务、空托盘回库任务)
/// </summary>
public async Task<WebResponseContent> CreateTaskInboundAsync(CreateTaskDto taskDto)
{
// ... 保持原有实现不变
}
/// <summary>
/// 根据指定的任务详情异步创建新的出库任务
/// </summary>
public async Task<WebResponseContent> 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逻辑处理
}
}
Run: dotnet build WIDESEA_WMSServer.sln
Expected: 无编译错误(WCS 方法暂时重复定义,下一步删除原文件中的实现)
Files:
- Create: WIDESEA_TaskInfoService/TaskService_AGV.cs
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 极卷库任务模块
/// <summary>
/// 出入库申请
/// </summary>
public async Task<AGVResponse> ApplyInOutAsync(ApplyInOutDto applyInOutDto)
{
// ... 保持原有实现不变(见原文件 1132-1245 行)
}
/// <summary>
/// 手动出库完成反馈给AGV
/// </summary>
public async Task<WebResponseContent> OutTaskComplete(OutTaskCompleteDto outTaskCompleteDto)
{
// ... 保持原有实现不变(见原文件 1252-1306 行)
}
/// <summary>
/// 输送线申请进入
/// </summary>
public async Task<AGVResponse> ApplyEnterAsync(ApplyEnterDto applyEnterDto)
{
// ... 保持原有实现不变(见原文件 1339-1383 行)
}
/// <summary>
/// 取放货完成
/// </summary>
public async Task<AGVResponse> TaskCompleteAsync(TaskCompleteDto taskCompleteDto)
{
// ... 保持原有实现不变(见原文件 1390-1463 行)
}
/// <summary>
/// 任务取消
/// </summary>
public async Task<AGVResponse> TaskCancelAsync(TaskCancelDto taskCancelDto)
{
// ... 保持原有实现不变(见原文件 1470-1519 行)
}
#endregion 极卷库任务模块
}
}
Run: dotnet build WIDESEA_WMSServer.sln
Expected: 无编译错误
Files:
- Create: WIDESEA_TaskInfoService/TaskService_GradingMachine.cs
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 分容柜接口
/// <summary>
/// 堆垛机取放货完成后物流通知化成分容柜完成信号
/// </summary>
public async Task<WebResponseContent> InOrOutCompletedAsync(GradingMachineInputDto input)
{
// ... 保持原有实现不变(见原文件 948-986 行)
}
/// <summary>
/// 化成分容柜定时向物流更新分容柜状态信息
/// </summary>
public async Task<WebResponseContent> SendLocationStatusAsync(GradingMachineInputDto input)
{
// ... 保持原有实现不变(见原文件 993-1023 行)
}
/// <summary>
/// 分容柜工作完成后调用此接口通知物流出库
/// </summary>
public async Task<WebResponseContent> RequestOutboundAsync(GradingMachineInputDto input)
{
// ... 保持原有实现不变(见原文件 1030-1082 行)
}
/// <summary>
/// 入库完成分容调用获取托盘上每个通道电芯
/// </summary>
public async Task<WebResponseContent> GetPalletCodeCellAsync(GradingMachineInputDto input)
{
// ... 保持原有实现不变(见原文件 1089-1118 行)
}
#endregion 分容柜接口
}
}
Run: dotnet build WIDESEA_WMSServer.sln
Expected: 无编译错误
Files:
- Modify: WIDESEA_TaskInfoService/TaskService.cs
保留内容:
- 所有 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<Dt_Task, IRepository>, ITaskService
{
// 字段 (~10行)
// 构造函数 (~15行)
// Repository 属性 (1行)
// TaskTypes 属性 (2行)
// AGV 配置字段 (2行)
// 注意:原有的 #region WCS逻辑处理、分容柜接口、极卷库任务模块 region 块全部删除
// 对应的方法实现已迁移到 partial class 文件
}
}
```
Run: dotnet build WIDESEA_WMSServer.sln
Expected: 无编译错误,所有控制器端点正常
Run: dotnet build WIDESEA_WMSServer.sln
Expected: SUCCESS,无警告
Run: wc -l WIDESEA_TaskInfoService/TaskService*.cs
Expected:
- TaskService.cs: ~100行
- TaskService_WCS.cs: ~550行
- TaskService_AGV.cs: ~280行
- TaskService_GradingMachine.cs: ~140行
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 <noreply@anthropic.com>"