dengjunjie
5 天以前 fd073a00f6813eada92b08f1884b115295ac1177
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
 
namespace WIDESEAWCS_TaskInfoService
{
    public partial class TaskService
    {
        /// <summary>
        /// 穿梭车任务完成
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="TaskTypeComplete">完成类型</param>
        /// <returns></returns>
        public WebResponseContent ShuttleCarTaskCompleted(int taskNum, short TaskTypeComplete)
        {
            WebResponseContent content = new WebResponseContent().OK();
            try
            {
                var task = GetTaskInfo(taskNum);
                if (task != null)
                {
                    switch (TaskTypeComplete)
                    {
                        case 1://入库完成
                            {
                                if (TaskInboundTypes.Contains(task.TaskType) && task.TaskState == TaskInStatusEnum.Car_InExecuting.ObjToInt())
                                {
                                    task.TaskState = TaskInStatusEnum.InFinish.ObjToInt();
                                    AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车入库完成");
                                }
                                else if (TaskRelocationTypes.Contains(task.TaskType) && task.TaskState == TaskRelocationStatusEnum.CarTarget_Executing.ObjToInt())
                                {
                                    task.TaskState = TaskRelocationStatusEnum.RelocationFinish.ObjToInt();
                                    AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车移库完成");
                                }
                            }
                            break;
                        case 2://出库完成
                            {
                                if (TaskOutboundTypes.Contains(task.TaskType) && task.TaskState == TaskOutStatusEnum.Car_OutExecuting.ObjToInt())
                                {
                                    task.TaskState = TaskOutStatusEnum.Car_OutFinish.ObjToInt();
                                    UpdateData(task);
                                }
                                else if (TaskRelocationTypes.Contains(task.TaskType) && task.TaskState == TaskRelocationStatusEnum.CarSource_Executing.ObjToInt())
                                {
                                    task.TaskState = TaskRelocationStatusEnum.CarSource_Finish.ObjToInt();
                                    UpdateData(task);
                                }
                            }
                            break;
                        case 10://充电完成
                            {
                                if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt() && task.TaskState == (int)CarChargingTaskEnum.CarCharging_Charging)//移车充电
                                {
                                    task.TaskState = CarChargingTaskEnum.CarChargingFinish.ObjToInt();
                                    AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"穿梭车充电完成");
                                }
                            }
                            break;
                        case 13://A侧回零完成
                        case 14://B侧回零完成
                            {
                                if (task.TaskType == TaskOtherTypeEnum.RelocationCar.ObjToInt() && task.TaskState == TaskCarStatusEnum.ShuttleCar_Executing.ObjToInt())//移车任务
                                {
                                    task.TaskState = TaskCarStatusEnum.ShuttleCar_Finish.ObjToInt();
                                    UpdateData(task);
                                }
                                else if (task.TaskType == TaskOtherTypeEnum.RelocationCarCharging.ObjToInt() && task.TaskState == CarChargingTaskEnum.CarCharging_Executing.ObjToInt())//移车充电
                                {
                                    task.TaskState = CarChargingTaskEnum.CarCharging_Finish.ObjToInt();
                                    UpdateData(task);
                                }
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
 
        /// <summary>
        /// 添加历史任务
        /// </summary>
        /// <param name="task"></param>
        /// <param name="operateType"></param>
        /// <returns></returns>
        public WebResponseContent AddTask_Hty(Dt_Task task, TaskOperateTypeEnum operateType)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Db.Ado.BeginTran();
                content = _taskHtyService.AddTask_Hty(task, operateType);//添加历史任务删除任务
                if (!content.Status) throw new Exception(content.Message);
                content = DeleteData(task);
                if (!content.Status) throw new Exception(content.Message);
                Db.Ado.CommitTran();
            }
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        public static int tasktype = 0;
        /// <summary>
        /// 查询穿梭车出入库任务
        /// </summary>
        /// <param name="deviceNo">穿梭车编号</param>
        /// <param name="currentAddress">当前位置</param>
        /// <returns></returns>
        public Dt_Task QueryShuttleCarTask(string deviceNo, string currentAddress = "")
        {
            Dt_Task? _Task = null;
            if (tasktype == 0)
            {
                if (string.IsNullOrEmpty(currentAddress))
                    _Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                else
                    _Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
            }
            else
            {
                if (TaskInboundTypes.Contains(tasktype))
                {
                    _Task = BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy) ?? BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish, TaskOrderBy);
                }
                else if (TaskOutboundTypes.Contains(tasktype))
                {
                    _Task = BaseDal.QueryFirst(x => x.ShuttleCarCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InFinish, TaskOrderBy) ?? BaseDal.QueryFirst(x => TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
                }
            }
            if (_Task != null) tasktype = _Task.TaskType;
            return _Task;
        }
        /// <summary>
        /// 获取移库任务
        /// </summary>
        /// <param name="deviceNo"></param>
        /// <param name="currentAddress"></param>
        /// <returns></returns>
        public Dt_Task ShuttleCarRelocationTask(string deviceNo, string currentAddress = "")
        {
            List<Dt_Task> tasks = null;
            Dt_Task? task = null;
            if (string.IsNullOrEmpty(currentAddress))
                tasks = BaseDal.QueryData(x => /*x.ShuttleCarCode == deviceNo &&*/ TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew).OrderBy(x => x.TaskNum).ToList();
            else
                tasks = BaseDal.QueryData(x => /*x.ShuttleCarCode == deviceNo &&*/ x.CurrentAddress == currentAddress && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew).OrderBy(x => x.TaskNum).ToList();
            if (tasks != null && tasks.Count > 0)
            {
                task = tasks[0];
            }
            return task;
        }
    }
}