IAgvTaskRepository.cs 1.77 KB
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Rcs.Domain.Entities;
using TaskStatus = Rcs.Domain.Entities.TaskStatus;

namespace Rcs.Domain.Repositories
{
    /// <summary>
    /// AGV任务仓储接口
    /// </summary>
    public interface IAgvTaskRepository : IRepository<AgvTask>
    {
        /// <summary>
        /// 根据任务编码获取任务
        /// </summary>
        Task<AgvTask?> GetByTaskCodeAsync(
            string taskCode,
            CancellationToken cancellationToken = default);

        /// <summary>
        /// 根据主任务GUID获取所有子任务
        /// </summary>
        Task<IEnumerable<AgvTask>> GetByMainTaskGuidAsync(
            string mainTaskGuid,
            CancellationToken cancellationToken = default);

        /// <summary>
        /// 根据机器人ID获取任务列表
        /// </summary>
        Task<IEnumerable<AgvTask>> GetByRobotIdAsync(
            Guid robotId,
            CancellationToken cancellationToken = default);

        /// <summary>
        /// 根据任务状态获取任务列表
        /// </summary>
        Task<IEnumerable<AgvTask>> GetByStatusAsync(
            TaskStatus status,
            CancellationToken cancellationToken = default);

        /// <summary>
        /// 获取待分配的任务(按优先级排序)
        /// </summary>
        Task<IEnumerable<AgvTask>> GetPendingTasksOrderedByPriorityAsync(
            CancellationToken cancellationToken = default);

        /// <summary>
        /// 根据机器人ID和状态获取任务
        /// </summary>
        Task<IEnumerable<AgvTask>> GetByRobotIdAndStatusAsync(
            Guid robotId,
            TaskStatus status,
            CancellationToken cancellationToken = default);
    }
}