wanshenmean
2026-03-26 8e42d0c1b7ae36cff2e7c69999117911a4b6f300
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTaskFilter.cs
@@ -1,30 +1,79 @@
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_Tasks
{
    /// <summary>
    /// 输送线任务访问器:统一封装任务查询与 WMS 请求。
    /// 输送线任务过滤器 - 统一封装任务查询与 WMS 请求
    /// </summary>
    /// <remarks>
    /// 核心职责:
    /// 1. 查询输送线的待处理任务
    /// 2. 查询正在执行的任务
    /// 3. 向 WMS 请求新任务
    ///
    /// 该类作为业务层与任务服务之间的中间层,
    /// 封装了常用的任务查询操作,提供简洁的接口给调用方。
    /// </remarks>
    public class ConveyorLineTaskFilter
    {
        /// <summary>
        /// 任务服务实例
        /// </summary>
        /// <remarks>
        /// 用于访问数据库中的任务数据,以及与 WMS 系统交互。
        /// </remarks>
        private readonly ITaskService _taskService;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="taskService">任务服务实例</param>
        public ConveyorLineTaskFilter(ITaskService taskService)
        {
            _taskService = taskService;
        }
        /// <summary>
        /// 查询待处理的输送线任务
        /// </summary>
        /// <remarks>
        /// 根据设备编码和子设备编码查询状态为"待处理"的任务。
        /// 用于当 PLC 请求任务时,WCS 向数据库查询可下发的任务。
        /// </remarks>
        /// <param name="deviceCode">设备编码(主设备)</param>
        /// <param name="childDeviceCode">子设备编码(位置编码)</param>
        /// <returns>待处理的任务对象,如果没有则返回 null</returns>
        public Dt_Task? QueryPendingTask(string deviceCode, string childDeviceCode)
        {
            return _taskService.QueryConveyorLineTask(deviceCode, childDeviceCode);
        }
        /// <summary>
        /// 查询正在执行的输送线任务
        /// </summary>
        /// <remarks>
        /// 根据任务号和子设备编码查询状态为"执行中"的任务。
        /// 用于跟踪任务的执行进度。
        /// </remarks>
        /// <param name="taskNo">任务号</param>
        /// <param name="childDeviceCode">子设备编码</param>
        /// <returns>执行中的任务对象,如果没有则返回 null</returns>
        public Dt_Task? QueryExecutingTask(int taskNo, string childDeviceCode)
        {
            return _taskService.QueryExecutingConveyorLineTask(taskNo, childDeviceCode);
        }
        /// <summary>
        /// 向 WMS 请求新任务
        /// </summary>
        /// <remarks>
        /// 当输送线有货物到达时,向 WMS 请求新的任务。
        /// WMS 会根据仓库情况和调度策略返回合适的任务。
        /// </remarks>
        /// <param name="barcode">货物/托盘条码</param>
        /// <param name="childDeviceCode">请求的子设备编码</param>
        /// <returns>请求是否成功</returns>
        public bool RequestWmsTask(string barcode, string childDeviceCode)
        {
            return _taskService.RequestWMSTask(barcode, childDeviceCode).Status;