dengjunjie
2025-05-20 be484c84a25d1f6c769e7b5e958048d745942e55
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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
using System.Collections;
using System.Collections.Generic;
using System.Dynamic;
using System.Reflection;
using System.Threading.Tasks;
using WIDESEAWCS_Common.StackerCraneEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_Core.Utilities;
using WIDESEAWCS_DTO.System;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Server.Controllers.System;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using WIDESEAWCS_Tasks.ShuttleCarJob;
using WIDESEAWCS_Tasks.StackerCraneJob;
using static WIDESEAWCS_Server.Controllers.LargeScreenController;
 
namespace WIDESEAWCS_Server.Controllers
{
    [Route("api/LargeScreen")]
    [ApiController, AllowAnonymous]
    public class LargeScreenController : Controller
    {
        private readonly IDeviceInfoRepository _deviceInfoRepository;
        private readonly IRouterService _routerService;
        private readonly ICacheService _cacheService;
        private readonly ITaskRepository _taskRepository;
        private readonly ITaskService _taskService;
        public LargeScreenController(ICacheService cacheService, IRouterService routerService, IDeviceInfoRepository deviceInfoRepository, ITaskRepository taskRepository, ITaskService taskService)
        {
            _deviceInfoRepository = deviceInfoRepository;
            _routerService = routerService;
            _cacheService = cacheService;
            _taskRepository = taskRepository;
            _taskService = taskService;
        }
 
        [HttpPost, Route("GetTaskInfos")]
        public WebResponseContent GetTaskInfos([FromBody] SaveModel model)
        {
            WebResponseContent webResponseContent = new WebResponseContent();
            List<TaskInfo> taskInfos = new List<TaskInfo>();
            List<DictionaryDTO> dictionaryDTOs = new List<DictionaryDTO>();
            try
            {
                var name = model.MainData["Name"].ToString();
                List<Dt_Task> dt_Tasks = new List<Dt_Task>();
                if (name == "入库")
                {
                    dt_Tasks = _taskRepository.QueryData(x => !_taskService.TaskOutboundTypes.Contains(x.TaskType) && !_taskService.TaskRelocationTypes.Contains(x.TaskType));
                    dt_Tasks = dt_Tasks.OrderByDescending(x => x.TaskType).Take(10).ToList();
                }
                else
                {
                    dt_Tasks = _taskRepository.QueryData(x => !_taskService.TaskInboundTypes.Contains(x.TaskType));
                    dt_Tasks = dt_Tasks.OrderByDescending(x => x.TaskType).Take(10).ToList();
                }
                if (dt_Tasks.Count > 0)
                {
                    List<DictionaryDTO> taskTypeDTOs = GetDictionary(Sys_DictionaryController.GetVueDictionary("taskType").Data);
                    List<DictionaryDTO> taskStateDTOs = GetDictionary(Sys_DictionaryController.GetVueDictionary("taskState").Data);
                    foreach (var dt_Task in dt_Tasks)
                    {
                        TaskInfo taskInfo = new TaskInfo();
                        taskInfo.PalletCode = dt_Task.PalletCode;
                        taskInfo.ShuttleCarCode = dt_Task.ShuttleCarCode;
                        taskInfo.TaskState = taskStateDTOs.Where(x => x.name == dt_Task.TaskState.ToString()).First().remark;
                        taskInfo.TaskType = taskTypeDTOs.Where(x => x.name == dt_Task.TaskType.ToString()).First().remark;
                        taskInfo.SourceAddress = dt_Task.SourceAddress;
                        taskInfo.TargetAddress = dt_Task.TargetAddress;
                        taskInfo.TaskNum = dt_Task.TaskNum;
                        taskInfos.Add(taskInfo);
                    }
                }
                webResponseContent.OK(data: taskInfos);
            }
            catch (Exception ex)
            {
                webResponseContent.Error(ex.Message);
            }
            return webResponseContent;
        }
        /// <summary>
        /// 获取穿梭车电量
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("GetShuttleCarInfos")]
        public WebResponseContent GetShuttleCarInfos()
        {
            WebResponseContent webResponseContent = new WebResponseContent();
            int ElectricQuantity1 = 0;
            int ElectricQuantity2 = 0;
            try
            {
                var Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), "RGV01");
                if (Device != null)
                {
                    ShuttleCarTaskCommandR? shuttleCar = Device as ShuttleCarTaskCommandR;
                    if (shuttleCar != null) ElectricQuantity1 = shuttleCar.ElectricQuantity;
                }
                Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), "RGV02");
                if (Device != null)
                {
                    ShuttleCarTaskCommandR? shuttleCar = Device as ShuttleCarTaskCommandR;
                    if (shuttleCar != null) ElectricQuantity2 = shuttleCar.ElectricQuantity;
                }
            }
            catch (Exception ex)
            {
                webResponseContent.Error(ex.Message);
            }
            return webResponseContent.OK(data: new
            {
                ElectricQuantity1,
                ElectricQuantity2
            });
        }
        /// <summary>
        /// 获取设备信息
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("GetDeviceInfos")]
        public WebResponseContent GetDeviceInfos()
        {
            WebResponseContent webResponseContent = new WebResponseContent();
            try
            {
                List<DeviceInfo> devices = new List<DeviceInfo>();
                var DeviceInfos = _deviceInfoRepository.QueryData(x => x.DeviceStatus == "1").ToList();
                foreach (var item in DeviceInfos)
                {
                    switch (item.DeviceType)
                    {
                        case "SpeStackerCrane"://堆垛机
                            {
                                var Device = _cacheService.Get(typeof(StackerCraneTaskCommandR), item.DeviceCode) as StackerCraneTaskCommandR;
                                if (Device != null)
                                {
                                    DeviceInfo deviceInfo = new DeviceInfo()
                                    {
                                        DeviceName = item.DeviceName,
                                        DeviceCode = item.DeviceCode,
                                        DeviceStatus = Device.Onlinestate == 1 ? "在线" : "离线",
                                        DeviceMachine = GetRunStatus(Device.RunStatus),
                                        Err_Status = GetErr_Status(Device.Err_Status),
                                        TaskID = Device.CurrentTaskNum
                                    };
                                    devices.Add(deviceInfo);
                                }
                            }
                            break;
                        case "CommonConveyorLine"://输送线
                            {
                                List<string> childDeviceCodes = _routerService.QueryAllPositions(item.DeviceCode);
                                List<string> strings = new List<string>() { "1003", "1006", "1007" };
                                childDeviceCodes.AddRange(strings);
                                foreach (var childDeviceCode in childDeviceCodes.OrderBy(x => x))
                                {
                                    var Device = _cacheService.Get(typeof(ConveyorLineTaskCommandR), childDeviceCode) as ConveyorLineTaskCommandR;
                                    if (Device != null)
                                    {
                                        DeviceInfo deviceInfo = new DeviceInfo()
                                        {
                                            DeviceName = item.DeviceName,
                                            DeviceCode = childDeviceCode,
                                            DeviceStatus = Device.inRead == 1 ? "可写" : "不可写",
                                            DeviceMachine = GetMachine(Device.Status),
                                            TaskID = Device.TaskNum,
                                            Err_Status = GetSpec(Device.Spec)
                                        };
                                        devices.Add(deviceInfo);
                                    }
                                }
                            }
                            break;
                        case "ShuttleCar"://穿梭车
                            {
                                var Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), item.DeviceCode) as ShuttleCarTaskCommandR;
                                if (Device != null)
                                {
                                    DeviceInfo deviceInfo = new DeviceInfo()
                                    {
                                        DeviceName = item.DeviceName,
                                        DeviceCode = item.DeviceCode,
                                        DeviceStatus = Device.JoinStatus == 1 ? "在线" : "离线",
                                        DeviceMachine = GetStatus(Device.Status),
                                        Err_Status = GetErrStatus(Device.Err_Status),
                                        TaskID = Device.number
                                    };
                                    devices.Add(deviceInfo);
                                }
                            }
                            break;
                        default:
                            break;
                    }
                }
                webResponseContent.OK(data: devices);
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
            return webResponseContent;
        }
        List<DictionaryDTO> GetDictionary(object data)
        {
            List<DictionaryDTO> dictionaryDTOs = new List<DictionaryDTO>();
            List<object> a = data as List<object>;
            foreach (var task in a)
            {
                dynamic dictionaryDTO = task;
                DictionaryDTO dictionary = new DictionaryDTO
                {
                    name = dictionaryDTO.key,
                    remark = dictionaryDTO.value,
                };
                dictionaryDTOs.Add(dictionary);
            }
            return dictionaryDTOs;
        }
        public class DictionaryDTO
        {
            public string name { get; set; }
            public string remark { get; set; }
        }
        public class TaskInfo
        {
            /// <summary>
            /// 任务号
            /// </summary>
            public int TaskNum { get; set; }
            /// <summary>
            /// 托盘号
            /// </summary>
            public string PalletCode { get; set; }
            /// <summary>
            /// 穿梭车
            /// </summary>
            public string ShuttleCarCode { get; set; }
            /// <summary>
            /// 任务类型
            /// </summary>
            public string TaskType { get; set; }
            /// <summary>
            /// 任务状态
            /// </summary>
            public string TaskState { get; set; }
            /// <summary>
            /// 起始地址
            /// </summary>
            public string SourceAddress { get; set; }
            /// <summary>
            /// 目的地址
            /// </summary>
            public string TargetAddress { get; set; }
        }
        public class DeviceInfo
        {
            /// <summary>
            /// 设备名
            /// </summary>
            public string DeviceName { get; set; }
            /// <summary>
            /// 设备编号
            /// </summary>
            public string DeviceCode { get; set; }
            /// <summary>
            /// 设备状态
            /// </summary>
            public string DeviceStatus { get; set; }
            /// <summary>
            /// 设备信息
            /// </summary>
            public string DeviceMachine { get; set; }
            /// <summary>
            /// 故障
            /// </summary>
            public string Err_Status { get; set; }
            public int TaskID { get; set; }
        }
        /// <summary>
        /// 获取堆垛机运行状态
        /// </summary>
        /// <param name="status"></param>
        /// <returns></returns>
        string GetRunStatus(ushort status)
        {
            string RunStatus = string.Empty;
            switch (status)
            {
                case 1: RunStatus = "初始化中"; break;
                case 2: RunStatus = "故障暂停"; break;
                case 3: RunStatus = "手动模式"; break;
                case 4: RunStatus = "单步模式"; break;
                case 5: RunStatus = "维护模式"; break;
                case 6: RunStatus = "取货检查"; break;
                case 7: RunStatus = "取货站点判断"; break;
                case 8: RunStatus = "无货运行"; break;
                case 9: RunStatus = "请求取货"; break;
                case 10: RunStatus = "取货探货"; break;
                case 11: RunStatus = "取货伸叉"; break;
                case 12: RunStatus = "取货抬高"; break;
                case 13: RunStatus = "取货回叉"; break;
                case 14: RunStatus = "取货完成"; break;
                case 15: RunStatus = "放货检查"; break;
                case 16: RunStatus = "放货站点判断"; break;
                case 17: RunStatus = "有货运行"; break;
                case 18: RunStatus = "请求放货"; break;
                case 19: RunStatus = "放货探货"; break;
                case 20: RunStatus = "放货伸叉"; break;
                case 21: RunStatus = "放货降低"; break;
                case 22: RunStatus = "放货回叉"; break;
                case 23: RunStatus = "放货完成"; break;
                case 24: RunStatus = "无货待命"; break;
                case 25: RunStatus = "有货待命"; break;
                case 26: RunStatus = "半自动模式"; break;
            }
            return RunStatus;
        }
        /// <summary>
        /// 获取堆垛机故障代码
        /// </summary>
        /// <param name="status"></param>
        /// <returns></returns>
        string GetErr_Status(ushort status)
        {
            string RunStatus = string.Empty;
            switch (status)
            {
                case 1: RunStatus = "货叉不在中"; break;
                case 2: RunStatus = "取货货架无货"; break;
                case 3: RunStatus = "放货货架有货"; break;
                case 4: RunStatus = "任务非法"; break;
                case 5: RunStatus = "行走反向"; break;
                case 6: RunStatus = "行走变频器报警"; break;
                case 7: RunStatus = "行走堵转"; break;
                case 8: RunStatus = "行走失速"; break;
                case 9: RunStatus = "提升反向"; break;
                case 10: RunStatus = "提升变频器报警"; break;
                case 11: RunStatus = "提升堵转"; break;
                case 12: RunStatus = "提升失速"; break;
                case 13: RunStatus = "货叉1反向"; break;
                case 14: RunStatus = "货叉1变频器报警"; break;
                case 15: RunStatus = "货叉1堵转"; break;
                case 16: RunStatus = "货叉1失速"; break;
                case 17: RunStatus = "货叉2反向"; break;
                case 18: RunStatus = "货叉2变频器报警"; break;
                case 19: RunStatus = "货叉2堵转"; break;
                case 20: RunStatus = "货叉2失速"; break;
                case 21: RunStatus = "急停故障"; break;
                case 22: RunStatus = "前极限"; break;
                case 23: RunStatus = "后极限"; break;
                case 24: RunStatus = "行走极限"; break;
                case 25: RunStatus = "上极限"; break;
                case 26: RunStatus = "下极限"; break;
                case 27: RunStatus = "升降极限"; break;
                case 28: RunStatus = "货叉前极限"; break;
                case 29: RunStatus = "货叉后极限"; break;
                case 30: RunStatus = "货叉后极限"; break;
                case 31: RunStatus = "右超叉"; break;
                case 32: RunStatus = "前超叉"; break;
                case 33: RunStatus = "后超叉"; break;
                case 34: RunStatus = "超高"; break;
                case 35: RunStatus = "认址故障"; break;
                case 36: RunStatus = "放货无货"; break;
                case 37: RunStatus = "取货完成无货"; break;
                case 38: RunStatus = "取货货叉有货"; break;
                case 39: RunStatus = "放货完成有货"; break;
                case 40: RunStatus = "提升编码"; break;
                case 41: RunStatus = "行走"; break;
                case 42: RunStatus = "货叉"; break;
                case 43: RunStatus = "断绳故障"; break;
                case 44: RunStatus = "A叉不在中"; break;
                case 45: RunStatus = "B叉不在中"; break;
                case 46: RunStatus = "取货前排有货"; break;
                case 47: RunStatus = "放货前排有货"; break;
                case 48: RunStatus = "不在列站点"; break;
                case 49: RunStatus = "不在层站点"; break;
                case 50: RunStatus = "通讯故障"; break;
                case 51: RunStatus = "卸货货叉回叉有货故障"; break;
                case 52: RunStatus = "载货台超重过载"; break;
                case 53: RunStatus = "高度不符"; break;
                case 54: RunStatus = "层给定位置超限故障"; break;
                case 55: RunStatus = "列给定位置超限故障"; break;
                case 56: RunStatus = "叉给定位置超限故障"; break;
                case 57: RunStatus = "触摸屏通讯故障"; break;
            }
            return RunStatus;
        }
        string GetMachine(ushort machine)
        {
            string RunStatus = string.Empty;
            switch (machine)
            {
                case 0: RunStatus = "关闭"; break;
                case 2: RunStatus = "有货"; break;
                case 3: RunStatus = "等待指令"; break;
                case 4: RunStatus = "空闲"; break;
                case 12: RunStatus = "自检错误"; break;
                case 13: RunStatus = "无变有"; break;
                case 14: RunStatus = "提前到来"; break;
                case 15: RunStatus = "接收超时"; break;
                case 16: RunStatus = "接收暂停"; break;
                case 17: RunStatus = "有变无"; break;
                case 19: RunStatus = "放行超时"; break;
                case 20: RunStatus = "放行暂停"; break;
            }
            return RunStatus;
        }
        string GetSpec(ushort spec)
        {
            string RunStatus = string.Empty;
            switch (spec)
            {
                case 1: RunStatus = "左超"; break;
                case 2: RunStatus = "右超"; break;
                case 3: RunStatus = "前超"; break;
                case 4: RunStatus = "后超"; break;
                case 5: RunStatus = "超高"; break;
                case 6: RunStatus = "超重"; break;
            }
            return RunStatus;
        }
        string GetStatus(short status)
        {
            string Status = string.Empty;
            switch (status)
            {
                case 0: Status = "待机中"; break;
                case 1: Status = "入库中"; break;
                case 2: Status = "出库中"; break;
                case 3: Status = "移库中"; break;
                case 4: Status = "盘点中"; break;
                case 9: Status = "手动中"; break;
                case 10: Status = "充电中"; break;
                case 13: Status = "A侧回零中"; break;
                case 14: Status = "B侧回零中"; break;
                case 15: Status = "A侧后退中"; break;
                case 16: Status = "B侧后退中"; break;
            }
            return Status;
        }
        string GetErrStatus(short status)
        {
            string Status = string.Empty;
            switch (status)
            {
                case 0: Status = "正常"; break;
                case 1: Status = "前防撞保护"; break;
                case 2: Status = "后防撞保护"; break;
                case 3: Status = "顶升超时"; break;
                case 4: Status = "行走超时"; break;
                case 5: Status = "前减速激光故障"; break;
                case 6: Status = "后减速激光故障"; break;
                case 7: Status = "前向上减速激光故障"; break;
                case 8: Status = "后向上减速激光故障"; break;
                case 9: Status = "接近开关故障"; break;
                case 10: Status = "行走堵转报警"; break;
                case 11: Status = "A侧急停报警"; break;
                case 12: Status = "B侧急停报警"; break;
                case 13: Status = "行走电机故障"; break;
                case 14: Status = "顶升电机故障"; break;
                case 15: Status = "电量不足"; break;
            }
            return Status;
        }
    }
}