TaskService.cs 当前超过 1500 行,包含三个职责差异明显的功能模块:
- WCS 逻辑处理:入库/出库/移库/机械手/自动出库任务
- 分容柜接口:化成分容柜状态同步和出库请求
- 极卷库 AGV 接口:AGV 出入库申请、输送线申请、取放货完成
文件过大导致:
- 难以定位和修改特定功能
- 代码审查困难
- 并行开发冲突率高
将 TaskService.cs 拆分为 partial class 文件,**不改变任何业务逻辑**,**不修改控制器调用方式**。
| 文件 | 职责 | 预估行数 |
|---|---|---|
TaskService.cs |
partial class 声明、字段定义、构造函数 | ~100行 |
TaskService_WCS.cs |
WCS 逻辑处理(入库/出库/移库/空托盘/机械手/自动出库) | ~550行 |
TaskService_AGV.cs |
极卷库 AGV 任务(出入库申请/输送线申请/取放货完成/任务取消) | ~280行 |
TaskService_GradingMachine.cs |
分容柜接口(状态通知/出库请求/电芯查询) | ~140行 |
// 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 = ...;
}
以下方法因被多个模块调用,采用**复制方式**保持完全独立:
| 方法 | 复制到 |
|---|---|
CompleteTaskAsync |
TaskService_WCS.cs |
GetTaskByPalletCodeAsync |
TaskService_WCS.cs |
DetermineTargetAddress |
TaskService_WCS.cs |
#region 保持不变TaskService_WCS.csTaskService_AGV.csAGV_OutTaskComplete 和 WCS_ReceiveTask 的访问TaskService_GradingMachine.csTaskService.cs