using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_TaskInfoService;
///
/// TaskService 查询相关方法
///
public partial class TaskService
{
///
/// 根据设备编号、当前地址查询输送线未执行的任务
///
/// 设备编号
/// 当前地址
///
public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress)
{
return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
}
///
/// 根据任务号、下一地址查询输送线执行中的任务
///
/// 任务号
/// 下一地址
///
public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress)
{
if (string.IsNullOrEmpty(nextAddress))
throw new ArgumentNullException(nameof(nextAddress), "下一地址不能为空");
return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskStatus == (int)TaskInStatusEnum.Line_InExecuting || x.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
}
///
/// 根据任务号、当前地址查询输送线完成的任务
///
/// 任务号
/// 当前地址
///
public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress)
{
if (string.IsNullOrEmpty(currentAddress))
throw new ArgumentNullException(nameof(currentAddress), "当前地址不能为空");
return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || x.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
}
///
/// 根据设备编号、任务类型分组(可选)按照优先级以及创建时间排序查询任务池新增的任务
///
/// 设备编号
/// 任务类型分组(可选)
///
public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
{
if (taskTypeGroup == null)
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
if (taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
return null;
}
///
/// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池新增的任务
///
/// 设备编号
/// 当前地址
/// 返回任务实体对象,可能为null
public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "")
{
if (string.IsNullOrEmpty(currentAddress))
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew || TaskRelocationTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskRelocationStatusEnum.RelocationNew), TaskOrderBy);
else
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew || TaskRelocationTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskRelocationStatusEnum.RelocationNew), TaskOrderBy);
}
///
/// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池入库类型的新增的任务
///
/// 设备编号
/// 当前地址
/// 返回任务实体对象,可能为null
public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "")
{
if (string.IsNullOrEmpty(currentAddress))
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
else
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
}
///
/// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
///
/// 设备编号
/// 当前地址
/// 返回任务实体对象,可能为null
public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "")
{
if (string.IsNullOrEmpty(currentAddress))
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
else
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
}
///
/// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
///
/// 设备编号
/// 当前地址
/// 返回任务实体对象集合,可能为null
public List QueryStackerCraneOutTasks(string deviceNo, List outStationCodes)
{
return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && outStationCodes.Contains(x.CurrentAddress), TaskOrderBy);
}
///
/// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池新增的任务
///
/// 设备编号
/// 当前地址
/// 返回任务实体对象,可能为null
public Dt_Task QueryRobotCraneTask(string deviceNo, string currentAddress = "")
{
if (string.IsNullOrEmpty(currentAddress))
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskRobotTypes.Contains(x.TaskType) && x.TaskStatus <= (int)TaskRobotStatusEnum.RobotExecuting), TaskOrderBy);
else
return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskRobotTypes.Contains(x.TaskType) && x.CurrentAddress == currentAddress && x.TaskStatus <= (int)TaskRobotStatusEnum.RobotExecuting, TaskOrderBy);
}
///
/// 获取与指定任务编号关联的任务。
///
/// 要获取的任务的唯一标识符。
/// 表示指定编号任务的对象,如果不存在该任务则返回null。
public Dt_Task QueryByTaskNum(int taskNum)
{
return BaseDal.QueryFirst(x => x.TaskNum == taskNum);
}
///
/// 查询指定起点地址的新建手动入库任务
///
/// 起点地址
/// 任务实体
public Dt_Task QueryManualInboundTask(string sourceAddress)
{
return BaseDal.QueryFirst(x =>
x.TaskType == (int)TaskInboundTypeEnum.Inbound &&
x.TaskStatus == (int)TaskInStatusEnum.InNew &&
x.SourceAddress == sourceAddress);
}
}