dengjunjie
8 天以前 f40ba2a9fb9d3c2ece08e9a7cd987d4744dccab2
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Interface/LargeScreenController.cs
@@ -2,14 +2,27 @@
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
{
@@ -20,13 +33,62 @@
        private readonly IDeviceInfoRepository _deviceInfoRepository;
        private readonly IRouterService _routerService;
        private readonly ICacheService _cacheService;
        public LargeScreenController(ICacheService cacheService, IRouterService routerService, IDeviceInfoRepository deviceInfoRepository)
        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>
@@ -80,13 +142,17 @@
                    {
                        case "SpeStackerCrane"://堆垛机
                            {
                                var Device = _cacheService.Get(typeof(StackerCraneTaskCommandR), item.DeviceCode);
                                var Device = _cacheService.Get(typeof(StackerCraneTaskCommandR), item.DeviceCode) as StackerCraneTaskCommandR;
                                if (Device != null)
                                {
                                    DeviceInfo deviceInfo = new DeviceInfo()
                                    {
                                        DeviceName = item.DeviceName,
                                        Deviceinfo = Device
                                        DeviceCode = item.DeviceCode,
                                        DeviceStatus = Device.Onlinestate == 1 ? "在线" : "离线",
                                        DeviceMachine = GetRunStatus(Device.RunStatus),
                                        Err_Status = GetErr_Status(Device.Err_Status),
                                        TaskID = Device.CurrentTaskNum
                                    };
                                    devices.Add(deviceInfo);
                                }
@@ -95,15 +161,21 @@
                        case "CommonConveyorLine"://输送线
                            {
                                List<string> childDeviceCodes = _routerService.QueryAllPositions(item.DeviceCode);
                                foreach (var childDeviceCode in childDeviceCodes)
                                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);
                                    var Device = _cacheService.Get(typeof(ConveyorLineTaskCommandR), childDeviceCode) as ConveyorLineTaskCommandR;
                                    if (Device != null)
                                    {
                                        DeviceInfo deviceInfo = new DeviceInfo()
                                        {
                                            DeviceName = childDeviceCode,
                                            Deviceinfo = Device
                                            DeviceName = item.DeviceName,
                                            DeviceCode = childDeviceCode,
                                            DeviceStatus = Device.inRead == 1 ? "可写" : "不可写",
                                            DeviceMachine = GetMachine(Device.Status),
                                            TaskID = Device.TaskNum,
                                            Err_Status = GetSpec(Device.Spec)
                                        };
                                        devices.Add(deviceInfo);
                                    }
@@ -112,13 +184,17 @@
                            break;
                        case "ShuttleCar"://穿梭车
                            {
                                var Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), item.DeviceCode);
                                var Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), item.DeviceCode) as ShuttleCarTaskCommandR;
                                if (Device != null)
                                {
                                    DeviceInfo deviceInfo = new DeviceInfo()
                                    {
                                        DeviceName = item.DeviceName,
                                        Deviceinfo = Device
                                        DeviceCode = item.DeviceCode,
                                        DeviceStatus = Device.JoinStatus == 1 ? "在线" : "离线",
                                        DeviceMachine = GetStatus(Device.Status),
                                        Err_Status = GetErrStatus(Device.Err_Status),
                                        TaskID = Device.number
                                    };
                                    devices.Add(deviceInfo);
                                }
@@ -128,10 +204,7 @@
                            break;
                    }
                }
                webResponseContent.OK(data: new
                {
                    devices
                });
                webResponseContent.OK(data: devices);
            }
            catch (Exception ex)
            {
@@ -139,11 +212,267 @@
            }
            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
        {
            //public string DeviceCode { get; set; }
            /// <summary>
            /// è®¾å¤‡å
            /// </summary>
            public string DeviceName { get; set; }
            public object Deviceinfo { 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;
        }
    }
}