编辑 | blame | 历史 | 原始文档

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 保留在主文件的内容

// 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
  1. 创建 TaskService_AGV.cs
  • 从原文件提取极卷库 AGV 相关方法
  • 保留 AGV_OutTaskCompleteWCS_ReceiveTask 的访问
  1. 创建 TaskService_GradingMachine.cs
  • 从原文件提取分容柜接口相关方法
  1. 精简 TaskService.cs
  • 删除已迁移的方法实现
  • 保留 partial class 声明、字段、构造函数
  1. 验证编译通过
  • 确保所有方法签名不变
  • 确保控制器调用正常

5. 约束

  • 不修改任何业务逻辑:只搬移代码,不改实现
  • 不修改接口 ITaskService:控制器依赖接口,不感知实现拆分
  • 不修改 DI 注册:Autofac 扫描保持不变
  • 使用 partial class:保证编译后类型完全合并