wanshenmean
8 小时以前 ba9c1994b95624b88ef606ec00394990d8f2009f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Model.Models;
 
namespace WIDESEAWCS_TaskInfoService;
 
/// <summary>
/// TaskService 查询相关方法
/// </summary>
public partial class TaskService
{
    /// <summary>
    /// 根据设备编号、当前地址查询输送线未执行的任务
    /// </summary>
    /// <param name="deviceNo">设备编号</param>
    /// <param name="currentAddress">当前地址</param>
    /// <returns></returns>
    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);
    }
 
    /// <summary>
    /// 根据任务号、下一地址查询输送线执行中的任务
    /// </summary>
    /// <param name="taskNum">任务号</param>
    /// <param name="nextAddress">下一地址</param>
    /// <returns></returns>
    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);
    }
 
    /// <summary>
    /// 根据任务号、当前地址查询输送线完成的任务
    /// </summary>
    /// <param name="taskNum">任务号</param>
    /// <param name="currentAddress">当前地址</param>
    /// <returns></returns>
    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);
    }
 
    /// <summary>
    /// 根据设备编号、任务类型分组(可选)按照优先级以及创建时间排序查询任务池新增的任务
    /// </summary>
    /// <param name="deviceNo">设备编号</param>
    /// <param name="taskTypeGroup">任务类型分组(可选)</param>
    /// <returns></returns>
    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;
    }
 
    /// <summary>
    /// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池新增的任务
    /// </summary>
    /// <param name="deviceNo">设备编号</param>
    /// <param name="currentAddress">当前地址</param>
    /// <returns>返回任务实体对象,可能为null</returns>
    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);
    }
 
    /// <summary>
    /// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池入库类型的新增的任务
    /// </summary>
    /// <param name="deviceNo">设备编号</param>
    /// <param name="currentAddress">当前地址</param>
    /// <returns>返回任务实体对象,可能为null</returns>
    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);
    }
 
    /// <summary>
    /// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
    /// </summary>
    /// <param name="deviceNo">设备编号</param>
    /// <param name="currentAddress">当前地址</param>
    /// <returns>返回任务实体对象,可能为null</returns>
    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);
    }
 
    /// <summary>
    /// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
    /// </summary>
    /// <param name="deviceNo">设备编号</param>
    /// <param name="currentAddress">当前地址</param>
    /// <returns>返回任务实体对象集合,可能为null</returns>
    public List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo, List<string> outStationCodes)
    {
        return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && outStationCodes.Contains(x.CurrentAddress), TaskOrderBy);
    }
 
    /// <summary>
    /// 根据设备编号、当前地址按照优先级以及创建时间排序查询任务池新增的任务
    /// </summary>
    /// <param name="deviceNo">设备编号</param>
    /// <param name="currentAddress">当前地址</param>
    /// <returns>返回任务实体对象,可能为null</returns>
    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);
    }
 
    /// <summary>
    /// 获取与指定任务编号关联的任务。
    /// </summary>
    /// <param name="taskNum">要获取的任务的唯一标识符。</param>
    /// <returns>表示指定编号任务的<see cref="Dt_Task"/>对象,如果不存在该任务则返回<c>null</c>。</returns>
    public Dt_Task QueryByTaskNum(int taskNum)
    {
        return BaseDal.QueryFirst(x => x.TaskNum == taskNum);
    }
 
    /// <summary>
    /// 查询指定起点地址的新建手动入库任务
    /// </summary>
    /// <param name="sourceAddress">起点地址</param>
    /// <returns>任务实体</returns>
    public Dt_Task QueryManualInboundTask(string sourceAddress)
    {
        return BaseDal.QueryFirst(x =>
            x.TaskType == (int)TaskInboundTypeEnum.Inbound &&
            x.TaskStatus == (int)TaskInStatusEnum.InNew &&
            x.SourceAddress == sourceAddress);
    }
}