helongyang
昨天 b7796f5e4d6594976ea948905af769eca863f27c
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
using HslCommunication.WebSocket;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SqlSugar.Extensions;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_TaskInfoRepository;
using WIDESEAWCS_TaskInfoService;
using WIDESEAWCS_Tasks;
 
namespace WIDESEAWCS_WCSServer.Controllers.Task
{
    [Route("api/Task")]
    [ApiController]
    public class TaskController : ApiBaseController<ITaskService, Dt_Task>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        private readonly IRouterExtension _routerExtension;
        //private readonly WebSocketServer _webSocketServer;
        private readonly ITaskService _taskService;
        private readonly ITaskRepository _taskRepository;
        public TaskController(ITaskService service, IHttpContextAccessor httpContextAccessor, IRouterExtension routerExtension ,ITaskService taskService,ITaskRepository taskRepository /*, WebSocketServer webSocketServer*/) : base(service)
        {
            _httpContextAccessor = httpContextAccessor;
            _routerExtension = routerExtension;
            _taskService = taskService;
            _taskRepository = taskRepository;
            //_webSocketServer = webSocketServer;
        }
 
        [HttpPost, Route("ReceiveTask"), AllowAnonymous]
        public WebResponseContent ReceiveWMSTask([FromBody] List<WMSTaskDTO> taskDTOs)
        {
            return Service.ReceiveWMSTask(taskDTOs);
        }
 
        [HttpPost, HttpGet, Route("RequestAssignLocation"), AllowAnonymous]
        public string? RequestAssignLocation(int taskNum, string roadwayNo)
        {
            return Service.RequestAssignLocation(taskNum, roadwayNo);
        }
 
        [HttpPost, HttpGet, Route("UpdateTaskExceptionMessage")]
        public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message)
        {
            return Service.UpdateTaskExceptionMessage(taskNum, message);
        }
 
        //[HttpPost, HttpGet, Route("UpdateTaskStatusToNext")]
        //public WebResponseContent UpdateTaskStatusToNext(int taskNum)
        //{
        //    return Service.UpdateTaskStatusToNext(taskNum);
        //}
 
        [HttpPost, HttpGet, Route("TaskStatusRecovery")]
        public WebResponseContent TaskStatusRecovery(int taskNum)
        {
            return Service.TaskStatusRecovery(taskNum);
        }
 
        [HttpPost, HttpGet, Route("RollbackTaskStatusToLast")]
        public WebResponseContent RollbackTaskStatusToLast(int taskNum)
        {
            return Service.RollbackTaskStatusToLast(taskNum);
        }
 
        /// <summary>
        /// 回复AGV安全信号
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("SendSecureReplyToAgv")]
        public WebResponseContent SendSecureReplyToAgv(int taskNum)
        {
            return Service.SendSecureReplyToAgv(taskNum);
        }
 
        [HttpPost, HttpGet, Route("GetRouteEndPoint"), AllowAnonymous]
        public WebResponseContent GetRouteEndPoint(string startPoint, int routeType)
        {
            return WebResponseContent.Instance.OK(data: _routerExtension.GetEndPoint(startPoint, routeType));
        }
        [HttpPost, HttpGet, Route("AgvCarrying"), AllowAnonymous]
        public WebResponseContent AgvCarrying(int row, int startColumn, int endColumn, int layer, int targetLayer)
        {
            return Service.AgvCarrying(row, startColumn, endColumn, layer, targetLayer);
        }
        //[HttpPost, HttpGet, Route("WebSocketPushMessage"), AllowAnonymous]
        //public WebResponseContent WebSocketPushMessage(string message)
        //{
        //    try
        //    {
        //         _webSocketServer.PublishAllClientPayload(message);
        //        return WebResponseContent.Instance.OK();
        //    }
        //    catch(Exception ex)
        //    {
        //        return WebResponseContent.Instance.Error(ex.Message);
        //    }
        //}
        [HttpPost, HttpGet, Route("RecWMSTaskCompleted"), AllowAnonymous]
        public WebResponseContent RecWMSTaskCompleted(int taskNum)
        {
            return Service.RecWMSTaskCompleted(taskNum);
        }
 
        //堆垛机任务重发
        [HttpPost, HttpGet, Route("StackerCraneTaskResending"), AllowAnonymous]
        public WebResponseContent StackerCraneTaskResending(int taskNum)
        {
            try
            {
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null)
                {
                    return WebResponseContent.Instance.Error("未找到该任务信息");
                }
                if(task.TaskState == TaskStatusEnum.SC_Executing.ObjToInt())
                {
                    _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute);
                }
                else
                {
                    return WebResponseContent.Instance.Error("非堆垛机执行中状态");
                }
                return WebResponseContent.Instance.OK();
            }
            catch(Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
 
        //堆垛机任务优先执行
        [HttpPost, HttpGet, Route("StackerCraneTaskPriority"), AllowAnonymous]
        public WebResponseContent StackerCraneTaskPriority(int taskNum)
        {
            try
            {
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null)
                {
                    return WebResponseContent.Instance.Error("未找到该任务信息");
                }
                if (task.TaskState == TaskStatusEnum.SC_Execute.ObjToInt())
                {
                    task.Grade = 98;
                }
                else
                {
                    return WebResponseContent.Instance.Error("非堆垛机待执行状态");
                }
                _taskRepository.UpdateData(task);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
    }
}